覚え書きブログ

Pythonによる機械学習2(4/4)

<< Pythonによる機械学習2(3/4)

ここでは、ロジスティック回帰のテンプレートで、まだ未実装の最急降下法(updateメソッド)と交差エントロピー(lossメソッド)を実装し、完成させていきます。

Pythonによる機械学習2(4/4)の目次】

演習2

演習1で導出したwとbの勾配を、以下のupdateメソッドの【wの勾配の計算】と【bの勾配の計算】の部分に実装し、最急降下法を完成させましょう。

#------------------------------------
# 2)最急降下法によるパラメータの更新
def update(self, alpha=0.1,printLoss=True):
	self.W -= alpha * 【wの勾配の計算】
	self.b -= alpha * 【bの勾配の計算】

	# 交差エントロピーの記録
	self.losses = np.append(self.losses, self.loss(self.x,self.t))
		
	# 交差エントロピーをプロット
	if printLoss:
		print("loss:{}".format(self.losses[-1]))
#------------------------------------

最急降下法によるモデルパラメータの学習の進捗を数値的に確認するために、ロジスティック回帰が最小かする損失関数「交差エントロピー」を用います。

演習3

以下の【交差エントロピーの計算】を実装し、lossメソッドを完成させましょう。

#------------------------------------
# 4)交差エントロピー
def loss(self, x,t):
	crossEntropy = 【交差エントロピーの計算】
	return crossEntropy
#------------------------------------

演習2と3で、作成したスクリプトおよび出力した画像を、Moodleにて提出してください。

ロジスティック回帰の実行例

完成させたロジスティック回帰を実行すると以下のような出力が得られます。

Training ite:1 loss:0.49115346993861275
Training ite:2 loss:0.23200943009952615
Training ite:3 loss:0.13502046010454277
Training ite:4 loss:0.10649315728013953
Training ite:5 loss:0.09657793299221096
...
Training ite:998 loss:0.03822483921499436
Training ite:999 loss:0.0382248334342374
Training ite:1000 loss:0.03822482771129196
Test loss: 0.0303131750462

また、学習後のモデルによる各カテゴリの事後確率は、以下のように各カテゴリのデータの領域にて高い確率(赤系の色)をとるようになります。
f:id:hirotaka_hachiya:20171125104428p:plain
f:id:hirotaka_hachiya:20171125104442p:plain
f:id:hirotaka_hachiya:20171125104500p:plain

正解率(Accuracy)

分類方法の評価方法として、交差エントロピー損失の他に一般的には正解率(Accuracy)が用いられます。正解率とは、入力データ \textbf{x}^i, i=1,2,...,Nを、分類モデル \widehat{p_{\textbf{w},\textbf{b}}}(y=c|\textbf{x}^i)が正しいカテゴリに分類できた割合のことをいいます。具体的には、one-hot表現のカテゴリラベル t^iを用いると、正解率は以下のように定義されます。
f:id:hirotaka_hachiya:20171128011315p:plain:w300

logisticRegression.updateメソッドでは、各反復にて、確認用(validation)データを用いて交差エントロピー損失および正解率を計算し、それぞれself.lossesおよびself.accuraciesに記録しています。

if printEval:
	# 交差エントロピーの記録
	self.losses = np.append(self.losses,self.loss(self.x[:,self.validInd],self.t[:,self.validInd]))

	# 正解率エントロピーの記録
	self.accuracies = np.append(self.accuracies,self.accuracy(self.x[:,self.validInd],self.t[:,self.validInd]))

宿題

1) updateメソッドにて記録している交差エントロピー損失self.lossesおよび正解率self.accuraciesを、以下のようにプロットし、visualizationフォルダに画像として保存するメソッドplotEvalをlogisticRegressionに追加しましょう。
f:id:hirotaka_hachiya:20171204191550p:plain
f:id:hirotaka_hachiya:20171204191556p:plain

2) 以下の「ロジスティック回帰の構成」参考に、モデルパラメータbを、Wの一部として学習するように、logisticRegression.updateメソッドを拡張しましょう。
hirotaka-hachiya.hatenablog.com

作成したスクリプトおよび出力したグラフ画像を、Moodleにて提出してください。