scikit-learnによるモデル選択(1)

scikit-learnによるモデル選択(1)

Kaggleのブログで紹介されているscikit-learnによる機械学習のチュートリアル。
初学者向けの分かりやすい説明で、英語のスピードも聞き取りやすいです。
今回は、この動画を参考にしてscikit-leanでモデル選択をする方法を紹介します。

ロジスティック回帰モデルによる分類

用いるのはirisデータで、150個の個体に対して
変数XはSepal.Length(がく片の長さ)、Sepal.Width(がく片の幅)、 Petal.Length(花びらの長さ)、Petal.Width(花びらの幅)、
変数yはアヤメの種類(0:setosa、1:versicolor、2:virginic)になっています。

<code>*****************************************
#irisデータの読み込み
from sklearn .datasets import load_iris
iris = load_iris()

#X(説明変数)とy(目的変数)を作成
X = iris.data
y = iris.target
*****************************************************

まずはXからyを予測するロジスティック回帰モデルを作り、
次にモデルの性能評価の指標として正解率を計算します。
このとき、モデルのフィットにも正解率の計算にも、
150個体全てのデータを使ってみることにします。

<code>********************************************
#ロジスティック回帰
from sklearn.linear_model import LogisticRegression

#モデルのインスタンスを生成(デフォルトのパラメータを使用)
logreg = LogisticRegression()

#モデルをデータにフィット
logreg.fit(X, y)

#Xに対する目的変数の値を予測
y_pred = logreg.predict(X)

#ロジスティック回帰モデルに対して正解率を計算する
from sklearn import metrics
print metrics.accuracy_score(y, y_pred)
********************************************************

ロジスティック回帰の正解率は0.96でした。
K=5のK近傍法、K=1のK近傍法でも同様に計算します。

<code>********************************************
#K近傍法(K=5)
from sklearn.neighbors import KNeighborsClassifier
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X,y)
y_pred = knn.predict(X)
print metrics.accuracy_score(y, y_pred)

#K近傍法(K=1)
knn = KNeighborsClassifier(n_neighbors=1)
knn.fit(X,y)
y_pred = knn.predict(X)
print metrics.accuracy_score(y, y_pred)
********************************************************

正解率は
ロジスティック回帰 : 0.96
K近傍法(K=5) : 0.966666
K近傍法(K=1) : 1
となりました。

しかし、最も正解率が高いK=1のK近傍法を最も良いモデルとして選択してしまってよいでしょうか?

(次回につづく)

続きを読む>>