2017-06-08 21 views
2

トレーニング時間中に私の損失値をチェックして、各繰り返しで損失を観察できます。これまでのところ、私はscikitが損失の価値の履歴を得ることを学ぶための簡単な方法を見つけていないし、scikit内の機能を見つけることもできなかった。Python sklearnはトレーニング中に損失値を表示します

これをプロットする方法がない場合は、classifier.fitの最後に単純に最終的な損失値を取得できれば素晴らしいと思います。

注:一部のソリューションは閉鎖されているということを認識しています。私は、ロジスティック回帰やSVMなどの分析的な解決策を持たないいくつかの分類子を使用しています。

誰にも提案はありますか?

+0

ちょっとだけ正確に説明してもらえますか? –

+0

これはあなたが求めているものに近いですか? http://scikit-learn.org/stable/modules/generated/sklearn.metrics.log_loss.html – MichaelMMeskhi

答えて

2

だから私は、直接反復あたりの損失値を取得するには非常に良いドキュメントを見つけることができませんでしたが、私は、これは将来的に誰かを助けることを願っています:

old_stdout = sys.stdout 
sys.stdout = mystdout = StringIO() 
clf = SGDClassifier(**kwargs, verbose=1) 
clf.fit(X_tr, y_tr) 
sys.stdout = old_stdout 
loss_history = mystdout.getvalue() 
loss_list = [] 
for line in loss_history.split('\n'): 
    if(len(line.split("loss: ")) == 1): 
     continue 
    loss_list.append(float(line.split("loss: ")[-1])) 
plt.figure() 
plt.plot(np.arange(len(loss_list)), loss_list) 
plt.savefig("warmstart_plots/pure_SGD:"+str(kwargs)+".png") 
plt.xlabel("Time in epochs") 
plt.ylabel("Loss") 
plt.close() 

このコードは、ちょうど約(通常SGDClassifierがかかります任意の線形分類器)、verbose=1フラグを代行受信し、分割して冗長印刷からの損失を得る。明らかにこれは遅いですが、私たちに損失を与えて印刷します。

関連する問題