Scikit-learnの使い方を徹底解説!AIエンジニアにおすすめ

こんにちは三谷です。
今回は、Scikit-learnの使い方について徹底解説します!

Scikit-learnとは?

Scikit-learnは、Pythonで使用できるオープンソースプロジェクトのライブラリです。
読み方は「サイキットラーン」です。
オープンソースですので、誰でも自由に利用したり再頒布でき、ソースコードを覗いてどんな計算が行われているかを確認することもできます。
Scikit-learnはかなり活発なユーザーコミュニティの中で開発・改良が加えられているため、ドキュメントも整備されているので初心者でもスムーズにScikit-learnを使い始めることができるようになっています。

Scikit-learnの使い方まとめ

Scikit-learnは、様々なアルゴリズムが含まれたライブラリですので、それぞれのアルゴリズムを呼び出して使用します。
ここでは、シンプルなコードを使用して概要をつかんでいただきます。
Scikit-learnを使ったプログラムは基本的に以下の構成となっています。

1. ライブラリのインポート
2. 学習データとテストデータの用意
3. アルゴリズムの指定と学習実行
4. テストデータでテスト
5. 必要に応じて精度などをビジュアライズ

今回の題材となっているこちらのプログラムを解説していきます。

1. ライブラリのインポート

Scikit-learn全体をインポートすることもできますが、Scikit-learn自体が非常に多くの機能を持ったものですので、Scikit-learnの一部のみをインポートすることが多いです。今回のプログラムでは、クラス分類問題でよく使われる、SVM(サポートベクターマシン)をインポートしてます。また、学習結果を表示するためのmetricsから、精度を出力できる

from sklearn import svmfrom sklearn.metrics import accuracy_score

accuracy_scoreもインポートしています。

2. 学習データとテストデータの用意

学習データとテストデータを用意します。今回は単純な問題で試したいため、0と1のみが含まれた多重リストを用意しました。
train_dataが学習用の入力データ、train_labelが正解ラベルとなり、これが教師データとなります。
test_dataはテストデータで、あまり面白くありませんが学習データと同じ多重リストを用意しました。
このテストデータに対して学習済みモデルが正しく[0, 1, 1, 0]と判定できるかを確認します。

#学習データとラベルを準備train_data = [[0, 0], [1, 0], [0, 1], [1, 1]]train_label = [0, 1, 1, 0]#テストデータを準備test_data = [[0, 0], [1, 0], [0, 1], [1, 1]]

3. アルゴリズムの指定と学習実行

続いて、機械学習アルゴリズムを指定します。先程インポートしたSVMの中から、クラス分類をするためのSVC(Support Vector Classification)を選択します。
学習実行をするには、clf.fit()を使用します。
実はScikit-learnは、様々な機械学習アルゴリズムに対応するために、多くのアルゴリズムにおいてclf.fit() = 学習実行という記述の仕方になっています。
clf.fit()の引数には、学習用のデータと、ラベルデータを指定するだけなので簡単ですね。

#アルゴリズムを指定clf = svm.SVC(C=10, gamma=0.1)#学習clf.fit(train_data,train_label)

4. テストデータでテスト

学習が終わりましたので、用意しておいたテストデータを利用してテストを行います。
学習がclf.fit()だったのに対し、テストはclf.predict()を使用します。
こちらも引数にテストデータを入れることで学習済みモデルを利用した予測を行ってくれるため、非常に簡単にテスト部分を実装することができます。

#テストtest_label = clf.predict(test_data)

5. 必要に応じて精度などをビジュアライズ

ここまでで学習とテストが終わっていますので、正解したかどうか・またその精度をビジュアライズします。

#テスト結果の表示print("テストデータ:{0},予測ラベル:{1}".format(test_data,test_label))print("正解率= {}".format(accuracy_score([0, 1, 1, 0], test_label)))

今回は非常に簡単なデータでしたので、以下のような正解率100%のモデルができたことが確認できます。

テストデータ:[[0, 0], [1, 0], [0, 1], [1, 1]],予測ラベル:[0 1 1 0]正解率= 1.0

Scikit-learnの使い方~応用編

簡単なプログラムでしたが、機械学習アルゴリズムを使ったクラス分類問題が行えたことがわかったと思います。
これを応用すると、様々なアルゴリズムでのクラス分類ができることがわかると思います。
例えば、代表的なアルゴリズムのインポートと学習方法は以下のように指定することで実行できます。

ロジスティック回帰

from sklearn.linear_model import LogisticRegressionclf = LogisticRegression()

決定木

from sklearn.tree import DecisionTreeClassifierclf = DecisionTreeClassifier()

ランダムフォレスト

from sklearn.ensemble import RandomForestClassifierclf = RandomForestClassifier()

勾配ブースティング決定木

from sklearn.ensemble import GradientBoostingClassifierclf = GradientBoostingClassifier()

k近傍法

from sklearn.neighbors import KNeighborsClassifierclf = KNeighborsClassifier()

ナイーブベイズ

from sklearn.naive_bayes import GaussianNBclf = GaussianNB()

確率的勾配降下法(SGD:Stochastic Gradient Descent)

from sklearn.linear_model import SGDClassifierclf = SGDClassifier()

Scikit-learnの使い方~応用実装編

Scikit-learnでは、このような多数のアルゴリズムが用意されており、その名前を変えることで簡単に違うアルゴリズムを使用した学習が実行できます。
ここでは先程のプログラムを編集して、ランダムフォレストで先程の問題を解いてみます。
変更する箇所はたったの2箇所です。

本来はそれぞれのアルゴリズムにハイパーパラメーターがあり、引数で指定したり調整が必要ですが、そちらは次の機会にご紹介します。

Scikit-learnの使い方まとめ

いかがだったでしょうか?たくさんのアルゴリズムが実装されていますが、それらが非常に簡単に使えるライブラリ、それがScikit-learnであることがご理解いただけたのではないでしょうか。
是非いろいろなアルゴリズムを使って試してみてください。

最新情報をチェックしよう!
企業向けAI人材育成サービス

企業向けAI人材育成サービス

AI事業発足やAI導入に必要な人材育成のステップとAI研究所が提供するサービス。AI研究所の人材育成サービスでは、3つのステップを軸に御社の業務内でAIを活用できる人材育成やAIプロジェクトの支援を行います。

CTR IMG