覚え書きブログ

Pythonによる機械学習2(ロジスティック回帰 4/4)

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

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

Pythonによる機械学習2(ロジスティック回帰 4/4)の目次】

演習4

最急降下法によるモデルパラメータの学習の進捗を数値的に確認するために、ロジスティック回帰が最小かする損失関数「交差エントロピー」を用います。
以下の【交差エントロピーの計算】を実装し、lossメソッドを完成させましょう。

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

演習3と4で作成したlogisticRegression_template.pyおよび出力した画像を、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メソッドを拡張しましょう。
f:id:hirotaka_hachiya:20181124001242p:plain

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