2016-12-10 5 views
0

サンプル(行)を削除する効果をプロットする必要があります。それを「学習曲線」と呼んでいる人もいます。クロスバリデーションのためにデータフレームをscikitに送信するにはどうすればよいですか?

私はPandasを使っていくつかの行を削除することを考えました。 How to remove, randomly, rows from a dataframe but from each label?

しかし、私はクロスバリデーションを行いたい場合は、私が(でも配列にデータフレームを有効にするdf.valuesを使用した後に)次のエラーを取得する:

enter image description here

だから、私は何をしています間違っている? sss = StratifiedShuffleSplit(n_splits=1, test_size=0.35)であなたは、反復可能ではないオブジェクトを生成している、右バットオフ

import pandas as pd 
import numpy as np 
from sklearn.model_selection import StratifiedShuffleSplit 
from sklearn import neighbors 
from sklearn import cross_validation 

df = pd.DataFrame(np.random.rand(12, 5)) 
label = np.array([1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]) 
df['label'] = label 

df1 = pd.concat(g.sample(2) for idx, g in df.groupby('label')) 

X = df1[[0, 1, 2, 3, 4]].values 
y = df1.label.values 
print(X) 
print(y) 

clf = neighbors.KNeighborsClassifier() 
sss = StratifiedShuffleSplit(1, test_size=0.1) 
scoresSSS = cross_validation.cross_val_score(clf, X, y, cv=sss) 
print(scoresSSS) 

答えて

1

>>> type(sss) 
    <class 'sklearn.model_selection._split.StratifiedShuffleSplit'> 

代わりのStratifiedShuffleSplitクラスにあなたの全体のオブジェクトを与える。ここ

は私のコードです(明らかにiterableではないので、エラーです)、クラスの .split()メソッド( docs)の列車/テスト出力を与える必要があります。

さらに、StratifiedShuffleSplitクラスのtest_sizeパラメータが小さすぎます。 0.1をそのまま使用すると、ValueErrorという3つの固有のクラスがあるため、テストサイズは0.1になりません。最後に、KNeighbors clfオブジェクトのデフォルトのn_neighbors param値を使用しています。このような小さなデータセットを使用する場合、このデフォルト値は大きすぎます。あなたが持っているものを使用するとn_neighbors <= n_samplesのために別のValueErrorを投げます。したがって、下の私の例では、StratifiedShuffleSplitオブジェクトにテストサイズをアップし、n_neighborsを2に落とし、sss.split(X, y)からcross_validation.cross_val_scorecv paramにiterablesを渡しました。だからここ

は、あなたのコードは次のようになりたいものです。

import pandas as pd 
import numpy as np 
from sklearn.model_selection import StratifiedShuffleSplit 
from sklearn import neighbors 
from sklearn import cross_validation 

df = pd.DataFrame(np.random.rand(12, 5)) 
label=np.array([1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3]) 
df['label'] = label 

df1 = pd.concat(g.sample(2) for idx, g in df.groupby('label')) 


X = df1[[0,1,2,3,4]].values 
y = df1.label.values 

clf = neighbors.KNeighborsClassifier(n_neighbors=2) 
sss = StratifiedShuffleSplit(n_splits=1, test_size=0.35) 

scoresSSS = cross_validation.cross_val_score(clf, X, y, cv=sss.split(X, y)) 
print(scoresSSS) 

私はちょうど私があなたが得るために探している、と決して私が主張していますスコア何見当がつかないを言ってみましょうこれがあなたのスコアを最適化するだろう。しかし、これはあなたが仕事に戻ることができるようにそれらのエラーを取り除くのに役立ちます。

関連する問題