[英]Scikit-learn cross val score: too many indices for array
我有以下代碼
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.cross_validation import cross_val_score
#split the dataset for train and test
combnum['is_train'] = np.random.uniform(0, 1, len(combnum)) <= .75
train, test = combnum[combnum['is_train']==True], combnum[combnum['is_train']==False]
et = ExtraTreesClassifier(n_estimators=200, max_depth=None, min_samples_split=10, random_state=0)
min_samples_split=10, random_state=0 )
labels = train[list(label_columns)].values
tlabels = test[list(label_columns)].values
features = train[list(columns)].values
tfeatures = test[list(columns)].values
et_score = cross_val_score(et, features, labels, n_jobs=-1)
print("{0} -> ET: {1})".format(label_columns, et_score))
檢查數組的形狀:
features.shape
Out[19]:(43069, 34)
和
labels.shape
Out[20]:(43069, 1)
我得到了:
IndexError: too many indices for array
這個追溯的相關部分:
---> 22 et_score = cross_val_score(et, features, labels, n_jobs=-1)
我正在從Pandas數據幀創建數據,我在這里搜索並通過這種方法看到了一些可能的錯誤參考,但無法弄清楚如何糾正? 數據陣列的外觀如下:功能
Out[21]:
array([[ 0., 1., 1., ..., 0., 0., 1.],
[ 0., 1., 1., ..., 0., 0., 1.],
[ 1., 1., 1., ..., 0., 0., 1.],
...,
[ 0., 0., 1., ..., 0., 0., 1.],
[ 0., 0., 1., ..., 0., 0., 1.],
[ 0., 0., 1., ..., 0., 0., 1.]])
標簽
Out[22]:
array([[1],
[1],
[1],
...,
[1],
[1],
[1]])
當我們在scikit-learn中進行交叉驗證時,該過程需要(R,)
形狀標簽而不是(R,1)
。 雖然它們在某種程度上是相同的,但它們的索引機制是不同的。 所以在你的情況下,只需添加:
c, r = labels.shape
labels = labels.reshape(c,)
在將其傳遞給交叉驗證函數之前。
如果您將目標標簽指定為Pandas中的單個數據列,那么它似乎是可以修復的。 如果目標有多列,我會收到類似的錯誤。 例如嘗試:
labels = train['Y']
將.ravel()
添加到傳遞給公式的Y / Labels變量中也有助於解決KNN中的這個問題。
嘗試目標:
y=df['Survived']
相反,我用過
y=df[['Survived']]
這使得目標是一個日期框架,似乎系列會沒問題
您可能需要稍微玩一下尺寸,例如
et_score = cross_val_score(et, features, labels, n_jobs=-1)[:,n]
要么
et_score = cross_val_score(et, features, labels, n_jobs=-1)[n,:]
n是維度。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.