- バックアップ一覧
- 差分 を表示
- 現在との差分 を表示
- ソース を表示
- 機械学習/Pythonでデータ分析する次の一歩(機械学習ライブラリー、scikit-learn編) へ行く。
目次 †
はじめに †
scikit-learnは機械学習ライブラリーです。
多くの機械学習手法を同じような方法で使うことができますので、共通部分を押さえておくと、アルゴリズムをよく知らない機械学習手法であっても、とりあえず使ってみることができます。
そこで、ここでは、その共通部分について説明し、scikit-learnで使うことができる代表的な機械学習アルゴリズムを紹介します。
機械学習と予測モデル †
機械学習では、データから予測モデルを学習します。
予測モデルへの入力は、一つだけとは限らず、一般的には複数の値が入力されます。 予測モデルからの出力も、一般的に一つだけとは限りませんが、基礎的な機械学習では一つです。
そこで、予測モデルへの入力はベクトル [math]X[/math] と表し、予測モデルからの出力はスカラー(値)[math]y[/math] と表します。
訓練データに出力値 [math]y[/math] が与えられているものを教師付き学習、与えられていないものを教師なし学習といいます。
教師付き学習 †
教師付き学習では、入力 [math]X[/math] とそれに対応する出力 [math]y[/math] の組 [math](X,\,y)[/math] の集合 [math]\mathcal{D}[/math] から、 \[ y = f(X) \] となる関数 [math]f[/math] を求めます。 この関数 [math]f[/math] が予測モデルです。
出力 [math]y[/math] がカテゴリー、ラベル、クラスといった、離散値のとき、この問題を分類 (clasiffication, categorization)といいます。
出力 [math]y[/math] が数値(連続値)のとき、この問題を回帰 (regression)といいます。
教師なし学習 †
教師なし学習は、入力 [math]X[/math] の集合 [math]\mathcal{D}[/math] だけから、関数 [math]f[/math] を求めます。
(正解となるグループはわかっていないが)データをいくつかのグループに分ける問題をクラスタリング (clustering)といいます。
Pythonプログラムの書き方 †
ライブラリーの読み込み †
ライブラリー名は sklearn です。
NumPyやpandasのサンプル・コードはライブラリー全体を読みますが、scikit-learnのサンプル・コードは必要なクラスだけを読み込んでいます。
例えば、決定木のクラス sklearn.tree.DecisionTreeClassifier を読み込むには、次のようにします。
from sklearn.tree import DecisionTreeClassifier
予測モデル学習器の生成 †
学習アルゴリズムのクラスのコンストラクターを使うと、デフォルトの学習パラメーターを用いた予測モデル学習器を生成することができます。
例えば、決定木の学習器を生成するには、次のようにします。
model = DecisionTreeClassifier()
ここで、clfは学習器のオブジェクトを格納しておく変数で、classifierの略です。 回帰のときはregressorの略であるregrを使います。
学習アルゴリズムごとに独自の学習パラメーターがあり、コンストラクターへの引数で設定することができます。 例えば、木の深さ max_depth という学習パラメーターを 3 に設定する場合は、次のようにします。
model = DecisionTreeClassifier(max_depth=3)
各アルゴリズムの学習パラメーターについては、ドキュメントを参照してください。
- API Reference - scikit-learn
予測モデルの学習 †
どの予測モデル学習器にも予測モデルを学習するためのfit関数が用意されていて、これを呼び出すだけで予測モデルを学習することができます。
教師付き学習の予測モデルを学習する場合、入力 [math]X[/math] と出力 [math]y[/math] を引数として渡します。
model.fit(X, y)
教師なし学習の予測モデルを学習する場合、入力 [math]X[/math] だけを引数として渡します。
model.fit(X)
入力 [math]X[/math] と出力 [math]y[/math] を用意する方法については、次のページを見てください。
- Pythonでデータ分析する次の一歩(データ分析支援ライブラリー、pandas編) - とうごろうぃき
- Pythonで決定木を使う - とうごろうぃき
学習した予測モデルの評価 †
どの予測モデル学習器にも学習した予測モデルを評価するためのscore関数が用意されていて、これを呼び出すだけで学習した予測モデルを評価することができます。 ただし、評価基準は予測モデル学習器ごとに異なります。
教師付き学習の予測モデルを評価する場合、入力 [math]X[/math] と出力 [math]y[/math] を引数として渡します。
model.score(X, y)
教師なし学習の予測モデルを学習する場合、入力 [math]X[/math] だけを引数として渡します。
model.score(X)
分類分析 †
決定木 †
決定木 (Decision Tree) 学習は、木構造の分類規則(決定木)を学習します。
from sklearn.tree import DecisionTreeClassifier model = DecisionTreeClassifier() model.fit(X, y)
学習パラメーターには、節の評価基準 criterion、木の深さ max_depth などがあります。
ランダム・フォレスト †
ランダム・フォレスト (Random Forest) は、たくさんの決定木をランダムに生成し、いいものを組み合わせて予測モデルを作成します。
from sklearn.ensemble import RandomForestClassifier model = RandomForestClassifier() model.fit(X, y)
学習パラメーターには、決定木と同じものに加えて、決定木の数 n_estimators、乱数のシード random_state などがあります。
XGBoost †
ランダム・フォレストはランダムにたくさんの決定木を作成しますが、XGboostは決定木を一つずつ作っていく勾配ブースティング (Gradient Boosting) という方法を採用しています。
from sklearn.ensemble import GradientBoostingClassifier model = GradientBoostingClassifier() model.fit(X, y)
学習パラメーターには、ランダム・フォレストと同じものに加えて、損失関数 loss、学習率 learnin_rate などがあります。
サポート・ベクター・マシン (SVM, SVC) †
SVC (Support Vector Classififier) は、境界線(面、超平面)に最も近いデータまでの距離(マージン)が最大となるような境界線を求めます。 カーネル・トリックと呼ばれる方法で、線形分離不可能な問題も解くことができます。 もともとSVM (Support Vector Machine) と呼ばれていましたが、同じ原理で回帰を行うSVRと区別するためにSVCとも呼ばれます。
from sklearn.svm import SVC model = SVC() model.fit(X, y)
学習パラメーターには、カーネルの種類 kernel、正則化パラメーター C などがあります。 カーネルによる独自のパラメーターもあります。
ニューラル・ネットワーク (NN) †
人間の脳の神経回路網をモデルにしたニューラル・ネットワーク (Neural Network) を学習します。 分類問題では、多層パーセプトロン (Multi-layer Perceptron) を用います。
from sklearn.neural_network import MLPClassifier model = MLPClassifier() model.fit(X, y)
学習パラメーターには、隠れ層のユニット数 hidden_layer_sizes、活性化関数 activation、最適化手法 solver、正則化パラメーター alpha、学習率 learning_rate などがあります。
判別分析 †
データの分布が正規分布に従っているものとして、データを二つに分けるための判別関数を解析的に求めます。
from sklearn.naive_bayes import GaussianNB model = GaussianNB() model.fit(X, y)
学習パラメーターには、最適化手法 solver などがあります。
二項ロジスティック回帰分析 †
ロジスティック関数を用いてデータがクラスに所属する確率を予測するモデルを学習します。 出力が確率である予測モデルを学習する回帰問題として学習し、予測した所属確率が最も高いクラスに分類して分類問題に適用します。
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis model = LinearDiscriminantAnalysis() model.fit(X, y)
学習パラメーターには、正則化手法 penalty、最適化手法 solver などがあります。