2017-11-17 42 views
-3
で一覧形式で出力

を取得:は、私は次のPythonコードを持っているのPython

from sklearn.datasets import load_iris 
iris = load_iris() 
from sklearn.linear_model import LogisticRegression 
logreg = LogisticRegression() 
from sklearn.model_selection import StratifiedKFold 
for n_splits in [2, 3, 5]:  
    skf = StratifiedKFold(n_splits=n_splits, shuffle=False, random_state=0) 
    X, y = iris.data, iris.target 
    for train_index, test_index in skf.split(X, y): 
     X_train, X_test = X[train_index], X[test_index] 
     y_train, y_test = y[train_index], y[test_index]  
     logreg_fit = LogisticRegression().fit(X_train, y_train) 
     logreg_scores = logreg_fit.score(X_test, y_test) 
     print('{}-fold STRATIFIED Cross-validation scores: {:.3f}'.format(
      n_splits, logreg_scores)) 

(Pythonの本と機械学習入門からと「http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.StratifiedKFold.html#sklearn.model_selection.StratifiedKFold.split」)は、このの出力は次のようになります。

2-fold STRATIFIED Cross-validation scores: 0.947 
2-fold STRATIFIED Cross-validation scores: 0.947 
3-fold STRATIFIED Cross-validation scores: 0.961 
3-fold STRATIFIED Cross-validation scores: 0.922 
3-fold STRATIFIED Cross-validation scores: 0.958 
5-fold STRATIFIED Cross-validation scores: 1.000 
5-fold STRATIFIED Cross-validation scores: 0.967 
5-fold STRATIFIED Cross-validation scores: 0.933 
5-fold STRATIFIED Cross-validation scores: 0.900 
5-fold STRATIFIED Cross-validation scores: 1.000 

私はこのように、すなわち、それぞれの折り目のため をリスト形式で出力を取得したいと思います:

2-fold STRATIFIED Cross-validation scores: [ 0.947 0.947] 
3-fold STRATIFIED Cross-validation scores: [ 0.961 0.922 0.958] 
5-fold STRATIFIED Cross-validation scores: [ 1.000 0.967 0.933 0.900 1.000] 

私は本当にありがとうと思います。どうもありがとう。

+0

。これはscore()関数が返すもので、そこを見るための努力をしています。私はスコアが平均精度、単一の値であり、リストではないというこのページを見つけました。あなたが望むものを見つけるためにscikitのドキュメントを読んでください。一般的にPythonではなくそのパッケージに関する質問を投稿できない場合は、 – Chris

+0

あなたが試したことを教えてください。 – KyleKnoepfel

+0

ChrisとKyleKnoepfelに感謝します。以下のSheshnathが提供するソリューションは私の質問に完全に答え、リスト形式で必要な出力を得ることができます – einoven

答えて

0

これは基本的に結果をリストに保存してから、内側のループが完了すると印刷するのに役立ちます。

from sklearn.datasets import load_iris 
iris = load_iris() 
from sklearn.linear_model import LogisticRegression 
logreg = LogisticRegression() 
from sklearn.model_selection import StratifiedKFold 
for n_splits in [2, 3, 5]:  
    skf = StratifiedKFold(n_splits=n_splits, shuffle=False, random_state=0) 
    X, y = iris.data, iris.target 
    res = [] 
    for train_index, test_index in skf.split(X, y): 
     X_train, X_test = X[train_index], X[test_index] 
     y_train, y_test = y[train_index], y[test_index]  
     logreg_fit = LogisticRegression().fit(X_train, y_train) 
     logreg_scores = logreg_fit.score(X_test, y_test) 
     res.append(logreg_scores) 
    print('{}-fold STRATIFIED Cross-validation scores: {}'.format(
     n_splits, res)) 
+0

あなたの返事をありがとうございました。できます!あなたのコードで編集したいのは、{:.3f}を{}(浮動小数点10進数オプションなし){}に変更する必要があります。{:.3f}は、 'TypeError: list .__ format__ '上記のコードに私が含まれていたので、このフォールトは私のものです。私はそれを明確にしたかった。いずれにしても、シンプルでエレガントなソリューションに感謝します。 – einoven

+0

これは助けになり、誤字を指摘してくれたことに感謝し、正しい答えとして受け入れます。 – Sheshnath

0

あり形式のリストの中でそれを行う方法であってもよいが、ここで代替がある可能性があります

print('{}-fold STRATIFIED Cross-validation scores: {}'.format(
     n_splits, ["{:.3f"}.format(member) for member in logreg_scores])) 

これは、各メンバーが3DPの文字列である文字列の新しいリストを作成します。浮く。

あなたは上のラインにそれを移動することで読みやすくすることができます:これは単なるPythonの問題ではありません

formatted_logreg_scores = ["{:.3f"}.format(member) for member in logreg_scores] 
    print('{}-fold STRATIFIED Cross-validation scores: {}'.format(
      n_splits, formatted_logreg_scores)) 
+0

お返事ありがとうございます。残念ながら、あなたのコードを実行すると、次のようなエラーが表示されます。 'TypeError:' numpy.float64 'オブジェクトは反復不可能です。[上で述べたように、コードを実行する前に{3}内の.3fを削除しました。そこから始める)]]。 – einoven

+0

ああ、あなたの 'logreg_scores'は浮動小数点のリストではなく、単一の浮動小数点のリストであるようです。あなたは浮動小数点のリストを与えるために正しい変数を見つける必要がありますし、私の推薦を行うことができます。運が良ければ:) – Splatmistro

+0

はい、私はそれを実現させる方法を見つけなければならないでしょう。それにもかかわらず、あなたのお手伝いをもう一度お願いします。 – einoven

関連する問題