AI研究所 - AI(人工知能)に脅かされないために、AI(人工知能)を作る側の人間になる -

HOME  >  Scikit-learnの使い方を徹底解説

公開日:2019.07.30 [最終更新日]2019.10.02

Scikit-learnの使い方を徹底解説

カテゴリー: Scikit-learn

こんにちは三谷です。
今回は、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 svm
from 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 LogisticRegression
clf = LogisticRegression()

決定木

from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier()

ランダムフォレスト

from sklearn.ensemble import RandomForestClassifier
clf = RandomForestClassifier()

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

from sklearn.ensemble import GradientBoostingClassifier
clf = GradientBoostingClassifier()

k近傍法

from sklearn.neighbors import KNeighborsClassifier
clf = KNeighborsClassifier()

ナイーブベイズ

from sklearn.naive_bayes import GaussianNB
clf = GaussianNB()

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

from sklearn.linear_model import SGDClassifier
clf = SGDClassifier()

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

Scikit-learnでは、このような多数のアルゴリズムが用意されており、その名前を変えることで簡単に違うアルゴリズムを使用した学習が実行できます。

ここでは、先程のプログラムを編集して、ランダムフォレストで先程の問題を解いてみます。変更する箇所は、たったの2箇所です。

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

まとめ

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

タグ:


参考になったら「いいね!」と「シェア」をお願いします!!

このエントリーをはてなブックマークに追加

AI(人工知能)セミナー開催中
AI(人工知能)入門セミナー AI(人工知能)入門セミナー

AI入門ブログの中の人

AI研究所 研究スタッフ

【マサミ】

アメリカ・サンフランシスコにある情報メディアの専門学校を卒業。大手金融会社での事務経験を経て、2016年9月よりAI研究所に入所。見習い研究員として、AI技術を日々勉強中。


【三谷】

AIセミナー責任者、講師。AIについての幅広い知識を持ち、人に分かりやすく伝える技術を持つ。特にAIを事業や仕事に取り入れる方法について日々講義しています。

AI研究所Twitter

Facebookページ