最近ではAI技術が急速に発展し、ChatGPTなどの人工知能や機械学習を使った開発が注目されています。
そこで今回は、機械学習に興味はあるけど詳しくわからないという人に向けて、機械学習の基礎知識や実際に開発する際の基本的な手順を説明します。

機械学習とは

機械学習はコンピュータがデータから学習し、予測や意思決定を行う能力を持つ技術です。
データを解析し、パターンや関係性を自動的に学習して、未知のデータに対して予測や分類を行うことができます。

AIと機械学習の違い

AI(人工知能)は、コンピュータに人間の知的な能力を持たせる技術を指し、機械学習はAIの一部でありデータからパターンを学習して予測や意思決定を行う手法です。
AIには機械学習以外の手法やルールベースのアプローチも含んでおり、人間の知的な能力を持たせるため幅広い技術を使用しています。

機械学習でできること

機械学習では画像認識や音声認識、自然言語処理、レコメンドシステム、不正検知、予測分析などの様々なタスクをこなすことが可能です。

機械学習の種類

機械学習は一般的に「教師あり学習」「教師なし学習」「強化学習」と呼ばれる3つの分類に分けられます。

教師あり学習

データとそれに対応するラベル(正解値)を与えることで、モデルはパターンや関連性を学習し、新たなデータに対して予測や分類を行います。

教師なし学習

ラベルのないデータを用いてパターンや構造を見つける手法です。データ自体の特徴や相関関係を抽出し、クラスタリングや次元削減などのタスクを実行します。

強化学習

強化学習は、コンピューターがゲームや問題を解く方法を学ぶ方法です。コンピューターは、行動を選択し、それによって得られる報酬を最大化するために学習します。
例えば、オセロではどこに石を置くかを選択し、それによってとれた石の数を報酬とします。この報酬を元に繰り返し戦略を改善していくことで精度を強化することができます。

機械学習を使用した開発の手順

ここでは教師あり学習を例に、機械学習を使った開発を行う場合の手順を説明します。

データセットの準備

機械学習では、学習のためにデータが必要です。データセットは入力データとそれに対応する正解データ(ラベル)から構成されます。

この準備の工程が、機械学習においては非常に重要で大変な作業となります。例えば、分類モデルではクラス(犬or猫)ごとに約1000~10000枚の画像を必要とします。膨大なデータを集めることは容易ではないため、枚数が足りない場合は画像の回転や拡大縮小、反転などを用いてデータを水増しして作成します。

モデルの選択と学習

回帰モデル、分類モデルともに複数の手法があるので適したモデルを選択し、準備したデータセットを使用してモデルに学習させます。
回帰モデルの主な例として線形回帰や決定木(XGBoost, LightGBM)など、分類モデルにはSVM(サポートベクタマシン)、ロジスティック回帰、k近傍法などがあります。

予測

学習が完了したモデルを使用して、新しいデータの予測を行います。予測結果は、分類問題の場合はクラスのラベル、回帰問題の場合は数値として表現されます。

モデルの評価

作成したモデルに対し、予測結果の正確さや性能を評価します。一般的な評価指標には、分類モデルでは正解率や適合率、回帰モデルではRMSEや決定係数と呼ばれる指標が使用されます。

おわりに

今回は、機械学習の基礎知識や開発手順を説明しました。この記事を通じて少しでも機械学習のイメージが掴めると嬉しいです。最後まで読んでいただきありがとうございました。

はじめに

本記事ではLinuxコマンド「|」(パイプ)と「;」(セミコロン)についてまとめます。
コマンドの挙動で勘違いしていた部分があったので、調べることにしました。

1. コマンド「|」(パイプ)

ここでは、コマンド「|」(パイプ)について、実行例などを基に説明します。

1-1. コマンド「|」(パイプ)とは

パイプとは、Linuxコマンドの標準出力結果を次のコマンドに渡すために使用されるコマンドです。
パイプを使用することで複数のコマンドを1つのプログラムのように動かすことができます。
パイプの正式名称は「パイプライン」と呼ばれます。

1-2. コマンド「|」(パイプ)の書式

コマンド「|」(パイプ)の書式は以下の通りです。

$ (command_1) | (command_2) | … | (command_n)

1-3. 実行例

「|」(パイプ)でよく使用されるパターンとして、標準出力の内容を操作することが多いです。
実際に、このコマンドが使用される実行例を紹介します。

例1:「grep」コマンドとの組み合わせ

「grep」は、文字列を検索するLinuxコマンドです。

  • テキストファイルから特定の文字列で「grep」を行う

①テキストの中身を表示する

[C:\Users\sp-taro]$ cat sample1.txt
aaaaa
bbbbb
ccccc

②文字列「aaaaa」でgrepを行う

[C:\Users\sp-taro]$ cat sample1.txt | grep aaaaa
aaaaa

 ⇒条件に一致する文字列が出力されます。

③文字列「abc」でgrepを行う

[C:\Users\sp-taro]$ cat sample1.txt | grep abc
[C:\Users\sp-taro]$

 ⇒条件に一致する文字列がないので、何も出力されませんでした。

例2:「tee」コマンドとの組み合わせ

「tee」コマンドは、標準出力の結果をファイルに出力できるコマンドです。

● カレントディレクトリに指定した文字列を含むファイル名を別ファイルに書き出す

①カレントディレクトリに存在するファイルを確認する

[C:\Users\sp-taro]$ ls -l
total 8
-rw-rw-r-- 1 dba dba 19 Aug 22 19:26 sample1.txt
-rw-rw-r-- 1 dba dba 19 Aug 22 19:26 sample2.txt
-rw-rw-r-- 1 dba dba  0 Aug 22 20:15 test1.txt
-rw-rw-r-- 1 dba dba  0 Aug 22 20:15 test2.txt

②「find」コマンドを使用し、指定した文字列を含むファイル名を別ファイルに出力する

[C:\Users\sp-taro]$ find test* | tee sample3.txt
test1.txt
test2.txt

③カレントディレクトリに存在するファイルを確認する。

[C:\Users\sp-taro]$ ls -l
total 12
-rw-rw-r-- 1 dba dba 19 Aug 22 19:26 sample1.txt
-rw-rw-r-- 1 dba dba 19 Aug 22 19:26 sample2.txt
-rw-rw-r-- 1 dba dba 20 Aug 22 20:21 sample3.txt ←新規作成された
-rw-rw-r-- 1 dba dba  0 Aug 22 20:15 test1.txt
-rw-rw-r-- 1 dba dba  0 Aug 22 20:15 test2.txt

 ⇒新たにsample3.txtというファイルが作成されました。

④sample3.txtの中身を確認する

[C:\Users\sp-taro]$ cat sample3.txt
test1.txt
test2.txt

⇒「find」コマンドで指定した文字列を含むファイル名が書き出されています。

2. コマンド「;」(セミコロン)について

ここでは、コマンド「;」(セミコロン)について、実行例などを基に説明します。

2-1. コマンド「;」(セミコロン)とは

セミコロンとは、複数のコマンドを続けて実行する際に使用されるLinuxコマンドです。
コマンドが終了してから次のコマンドが実行されます。

2-2. コマンド「;」(セミコロン)の書式

コマンド「;」(セミコロン)の書式は以下の通りです。

$ (command_1) ; (command_2) ; … ; (command_n)

2-3. 実行例

「;」(セミコロン)は、単純にコマンドを複数続けて実行するだけなので、よく使われるパターンみたいなものはなさそうです。
なので、複数コマンドを実行したときにコマンドが終わるまで次のコマンドが待機されるか確認してみたいと思います。

  • 「時刻取得」→「30秒待機」→「時刻取得」を1コマンドで実行する。
[C:\Users\sp-taro]$ date ; sleep 30s ; date
Thu Aug 25 18:25:20 JST 2022 ←コマンド1実行結果
Thu Aug 25 18:25:50 JST 2022 ←コマンド3実行結果

 ⇒コマンド1で時刻を取得してから、コマンド3で再度時刻を取得するまで30秒待機していることがわかります。

3. それぞれのコマンドの挙動の違い

ここでは、「はじめに」
で記載したコマンドの挙動で勘違いしていた部分についてまとめます。

やろうとしたこと

コマンド1で環境変数に値を設定し、コマンド2で設定した変数の値を使う。
2つのコマンドはパイプでつなげる。

実行してみた

export VAR=sample | echo $VAR
[C:\Users\sp-taro]$ export VAR=sample | echo $VAR

⇒結果、何も表示されませんでした。

セミコロン「;」で実行してみた

export VAR=sample ; echo $VAR
[C:\Users\sp-taro]$ export VAR=sample ; echo $VAR
sample

 ⇒ちゃんと表示されました。

上記結果より、
セミコロンはコマンドを連続で実行するのに対し、パイプは標準出力された値を次のコマンドに渡すだけであって、実際にコマンドが実行されているわけではなさそうです。

改めてですが、パイプは「標準出力した結果を次のコマンドに渡す」処理です。
なので今回のexportのように、出力されるものがない場合は次のコマンドに渡す値はありません。
パイプとして値を渡していないのはわかりますが、exportが実行されていれば内部的には変数が設定されるので、値が表示される想定でした。

そもそもセミコロンで実行すれば何も問題なかったですが、、、
こういう挙動をする、ということで気を付けないといけませんね。

さいごに

Linuxコマンドのパイプセミコロンと、それぞれのコマンドの挙動の違いについてまとめました。
他にもLinuxにはたくさんのコマンドがあるので、興味があれば是非調べてみてください。
ご覧いただきありがとうございました。

Vercelってどんなサービス?

Vercel は、追加の構成を必要とせずに、Web アプリをより迅速に構築および展開するために必要なツール、ワークフロー、インフラストラクチャを提供する開発者向けプラットフォームです。

公式ドキュメントではこのように紹介されていました。

Vercelが優秀である点は、シングルページアプリケーション(SPA)のデプロイを行ってくれることです。主にReactやVueなどJavascriptのフレームワークを使用したアプリケーションのことを指しますが、特徴としては、動的なコンテンツを含む描画を可能にします。SPAはJSX記法やTypescriptで書かれますが、ブラウザはこれを直接理解することが出来ません。そのため一度ブラウザが理解できるファイル形式に変換する必要があります。この処理がビルド(コンパイル)にあたります。そして、変換されたファイルをサーバー上に配置(デプロイ)することで、インターネット上でwebアプリケーションを展開することが出来ます。

「ビルド」と「デプロイ」を自分で行うにはバックエンドの知識や、サーバーの用意をする必要があり複雑です。しかしVercelを利用することで、これらの作業を自動化でき、手軽にアプリケーションを公開することが出来ます。

実際に使ってみる

– アカウントの登録

始めに、Vercelのトップページから、「Start Deploying」ボタンをクリックします。

Vercelのデプロイ機能を利用するには、vercel内でサインアップする必要があります。
VercelではPlan Typeが全部で3種類存在します。個人開発や非営利目的での使用であれば無料のHobby Typeで十分です。有料のPro Type、enterprise Typeでは、商用利用が可能になり、チーム機能も追加されることからビジネス利用に適しています。

今回はHobby Typeを選択します。

VercelはGitHub、GitLab、Bitbucketなどのバージョン管理サービスと連携できます。これにより、各サービスにプッシュされたアプリケーションを、Vercelでビルド・デプロイすることが出来ます。事前にGitHubアカウント等は作成しておきましょう。

メールアドレスで先に進んだ場合でもGitHub等と連携することが可能です。この記事ではGitHubで進めていきます。

– GitHubの同期設定

連携後はこのようにレポジトリが表示されます。もしデプロイしたいレポジトリが表示されていない場合には、「Add GitHub Account」を選択します。

そうすると、GitHub側のサイトに飛びます。「Repository access」の項目で「All repositories」が選択されているか確認してください。これによりGitHubアカウントに紐づけられている全てのレポジトリをVercelで選択することが出来ます。

– デプロイ

デプロイしたいリポジトリの「import」ボタンを押し先に進みます。

この画面ではプロジェクト名や、フレームワークプリセット(各フレームワークに適したビルドが可能)、ルートディレクトリを指定することが出来ます。「Deploy」ボタンを押すと、ビルドとデプロイが開始されます。

進行状況を確認できます。小規模のアプリケーションであれば1分程度で完了します。

問題が無ければ完了の画面に遷移します。

一度デプロイが完了したプロジェクトは、サイト上部のメニュー「Project」から詳細を確認できます。
「Visit」ボタンを押すと、アプリケーションが別ウィンドウで立ち上がります。

豊富な機能・サービス

Vercelには他にも便利なサービスが用意されています。自分で使用したことが無いため詳しい説明は出来ませんが、いくつか紹介させていただきます。

– Serverless Functions

ユーザー側が、サーバーの準備やインフラストラクチャの管理をすることなく、サーバー側のコードを実行することが出来ます。APIエンドポイントの作成や、データベース操作、外部APIの呼び出しなどに利用できます。

– Edge Functions

この関数は、デフォルトでグローバルにデプロイされ、ユーザーリクエストに最も近いリージョンで実行することで、低レイテンシで提供されます。地域別コンテンツや認証処理などに利用できます。

– 画像最適化

webアプリケーションに追加する画像を、常に適切なサイズにすることができます。これによりwebサイトの読み込み速度の改善に繋がります。

Learn how we helped 100 top brands gain success