pythonの機械学習の仕組みが少し分かった

はじめに

progateの月3,000円のproffesionalコースにお世話になっている。

その中に、pythonで機械学習が学べるコースがあった。

まだ最初のレッスンしか見ていないものの、自分でも色々と調べて「機械学習ってこういうことなのか!」という状態になっている。

なので、機械学習のざっくりとした仕組みについて書いていきたいと思う。

機械学習の処理の流れ

処理の流れを大まかに分けると、以下のようになる。

元のデータを用意する(入力出力のデータを含んでいる必要がある)。

ライブラリ内の関数で、入力用の学習用データと評価用データ、出力用の学習用データと評価用データの4つに分ける。

機械学習用のアルゴリズムに学習用データ(入力と出力)を学習させる。

学習されたアルゴリズムに評価用の入力データを入力して、その出力結果を評価用の出力データと突き合わせて精度を割り出す。

ざっくりとまとめると、こんな感じになる。

人間の学習過程と似ている

機械学習の仕組みは、人間の学習過程と似ている。

人間も何かしらの入力があって、その出力結果を頭の中に思い浮かべる。

例えば、街路樹の扇形の葉っぱを見たときに、イチョウと判断するように。

機械学習の学習→評価

機械学習で行おうとすると、葉っぱの幅や切れ目と湾曲率などのデータを与えて、それはイチョウですよというデータも与えて学習させることで、次に別のデータを渡したときにそれがイチョウの葉っぱであるという結果を出すことができるようになる。

最初の葉っぱの幅などのデータを機械学習の分野では、学習用の特徴量データという。学習の時に与えたイチョウというデータは、学習用の目的変数という言い方をする。そして次に与えた葉っぱの幅などのデータを評価用の特徴量データ、1番最後に与えたイチョウというデータは、評価用の目的変数という。

だから、流れとしては学習→評価ということになる。

学習→評価後の機械学習アルゴリズム

その後に、実際にその精度が納得いくものであれば、未知の特徴量データを与えて、その目的変数を導き出すという扱われ方をしていくんだろう。

ChatGPTも同じ仕組みで成り立っている

ChatGPTの仕組みもそういう風になっている。ChatGPTなどの生成AIを作成するときに、膨大な学習用の特徴量データと目的変数を機械学習アルゴリズムに渡して、まずは学習モデルを構築する。

評価用の特徴量データをその作成した学習モデルに与えて、その結果と事前に用意した評価用の目的変数をライブラリのある関数(後で調べておく)に渡して精度を導き出す。その精度が納得いくものであれば、GPTの新しいバージョンとしてリリースするのだと思う。

もし学習させて構築したアルゴリズムの精度に納得がいかなかったら(低い数値が出たら)、そのアルゴリズム自体を作り替えるということを行っているんだと思う。

機械学習ライブラリの使い方を学べた

そのアルゴリズムの中身は、おそらく膨大だから学習するにはかなりの時間がかかると思うけど、現時点では機械学習に用いるアルゴリズムライブラリの使い方を理解することができた。

学習用の特徴量データと目的変数を学習させて、機械学習アルゴリズムのモデルを構築し、その精度を検証するという方法である。

具体的なソースコード

以下の例では、sikit-leranライブラリを使用している。特徴量と目的変数のデータを読み込み、それぞれ訓練データとテストデータに分ける。そして、LogisticRegressionというアルゴリズムを使用している。

from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

# データ読み込み(例:有名な「アイリスデータセット」)
iris = load_iris()
X = iris.data  # 特徴量
y = iris.target  # 目的変数(3クラス)

# データを訓練データとテストデータに分ける
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# モデル作成
model = LogisticRegression(max_iter=200)

# 学習(訓練データを使ってモデルに覚えさせる)
model.fit(X_train, y_train)

# 予測(テストデータで分類を予測)
y_pred = model.predict(X_test)

print("予測結果:", y_pred)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

投稿ID : 28649