さて、ロジスティック回帰のテンプレートで、まだ未実装の交差エントロピー(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
また、学習後のモデルによる各カテゴリの事後確率は、以下のように各カテゴリのデータの領域にて高い確率(赤系の色)をとるようになります。
正解率(Accuracy)
分類方法の評価方法として、交差エントロピー損失の他に一般的には正解率(Accuracy)が用いられます。正解率とは、入力データx^i, i=1,2,...,Nを、分類モデルが正しいカテゴリに分類できた割合のことをいいます。具体的には、one-hot表現のカテゴリラベルt^iを用いると、正解率は以下のように定義されます。
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を、plotly.express.lineを用いて以下のようにプロットし、visualizationフォルダにhtmlとして保存するメソッドplotEvalをlogisticRegressionに追加しましょう。
※以下のグラフでは学習率learningRateを0.01に設定しています。
グラフをhtmlに保存するためには、write_html('ファイル名')を使いましょう。2) 以下の「ロジスティック回帰の構成」参考に、モデルパラメータbを、wの一部として学習するように、logisticRegression.updateメソッドを拡張しましょう。
作成したスクリプトおよび出力したグラフ画像を、Moodleにて提出してください。