CourseraのMachine LearningをPythonでやり直す#2
復習した内容+それをどうやってハンド&skleanで実装したかのまとめ
実装したファイル
github.com
参考資料
qiita.com
ロジスティック回帰
目的変数Yを説明変数Xで説明する回帰分析の手法を分類でも使うための手法。
目的変数Yを 0 ≦ Y ≦ 1 の範囲に収めるため、シグモイド関数を用いて計算結果を変換する。
# シグモイド関数 import math def sigmoid(z): return 1/(1+math.e**(-z))
正則化
説明変数をX2, X3...と増やすことで、100%に近い予測ができるがオーバーフィッティングしてしまう。
オーバーフィットとは説明変数が余分な影響力を持ってしまうことだから、θの値が大きくなりすぎないように工夫すればよい。
そのためには、目的関数でコストを算出する際に、θの2乗を足してしまう。
実装
scikit-learnだとものすごくお手軽。
生Pythonに興味ある方はGithub見てください。(正則化サボったけど)
import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn import linear_model # import datasets df = pd.read_csv("ex2data1.txt", sep=",", header=None) # 説明変数が0,1列目、目的変数が2列目にあるcsvファイル X = df.values[:,:2] Y = df.values[:,2:] logreg = linear_model.LogisticRegression(C=1) logreg.fit(X,Y) # 本来なら目的関数の定義と最急降下法のための準備が必要 # fitメソッドを呼ぶだけで良い。 # 予測モデルを用いて散布図の背景に色を塗る。 # メッシュを作成して各点ごとに予測を適用すればよい。 x_min, x_max = X[:,0].min(), X[:,0].max() y_min, y_max = X[:,1].min(), X[:,1].max() xx, yy = np.meshgrid(np.arange(x_min,x_max,.02), np.arange(y_min, y_max, .02)) Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(1, figsize=(4,3)) plt.pcolormesh(xx,yy,Z,cmap=plt.cm.Paired) # カラーメッシュ=要するにモザイク画みたいなもの plt.scatter(X[:,0], X[:,1], c=Y.ravel(), edgecolors='k', cmap=plt.cm.Paired) plt.show()
今回はおしまい!次回はいよいよ多クラス分類とニューラルネットワーク!