第8回「scikit-learnによる計算」(連載:scikit-learnで学ぶ機械学習)

はじめに

連載「scikit-learnで学ぶ機械学習」を始めますに書いた通り、scikit-learnを用いて機械学習について学んで行きたいと思います。

前回の記事「データセット読み込みユーティリティ」では、scikit-learnのデータローダーについて学びました。

本記事のテーマは、「scikit-learnによる計算」です!

といってもこのテーマ名ではよく分かりませんね。

具体的には、増分学習について学びます。

増分学習

partial_fitを使うことで、与えたデータに対して1エポックの学習ができます。

  • 学習データが次々と追加されていく
  • 学習データの量が多く、一度にメモリに展開できない
    といったシーンで役立ちます。
    こういった学習を増分学習と言います。

コードの全体像

先に、完成後のソースコードを貼り付けておきます。

1
2
3
4
5
6
from sklearn.linear_model import SGDClassifier
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
clf = SGDClassifier(loss='log')
for i in range(1000):
clf.partial_fit(X_train, y_train, classes=[0, 1])
print (clf.score(X_test, y_test))

データセットローダーのインポート

1
from sklearn.linear_model import SGDClassifier

SGD学習を行う線形モデルをロードします。

のちに誤差関数をlogに設定することで、
ロジスティック回帰をSGDで学習させることができます。

from sklearn.linear_model import LogisticRegressionのロジスティック回帰実装ではSGDでの学習ができません。)

データセットの分割

1
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

モデルのインスタンスを作成

1
clf = SGDClassifier(loss='log')

losslogに設定します。

他の誤差関数も使用可能で、hingeとした場合は線形SVMとなります。

学習

1
2
for i in range(1000):
clf.partial_fit(X_train, y_train, classes=[0, 1])

1000エポック学習させています。

partial_fitfitと違い、classesを引数に与える必要があります。(初回だけで十分ですが、コードを簡単にするため毎回与えています。)

評価

1
print (clf.score(X_test, y_test))

まとめ

scikit-learnの増分学習の使い方がご理解いただけたでしょうか。

これにて、連載「scikit-learnで学ぶ機械学習」は終了です。

お疲れ様でした。

csvデータの学習方法を知りたい方は

CSVファイルをpandasで読み込み、scikit-learnで学習させる

もどうぞ。

機械学習の入門〜NumPyによるロジスティック回帰の実装を勉強したい方は

連載「ゼロから始める機械学習」

データ分析と機械学習の関係については以下の記事でまとめています。

データ分析とは何か?機械学習との関係について

記事情報

  • 投稿日:2020年3月9日
  • 最終更新日:2020年3月31日