Scikit-learn cross val得分:数组的索引太多了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scikit-learn cross val得分:数组的索引太多了相关的知识,希望对你有一定的参考价值。
我有以下代码
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']]
这使目标y成为一个日期框架,看起来系列就可以了
您可能需要稍微使用尺寸,例如
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是维度。
以上是关于Scikit-learn cross val得分:数组的索引太多了的主要内容,如果未能解决你的问题,请参考以下文章
scikit-learn:cross_val_predict 仅适用于分区
交叉验证:来自 scikit-learn 参数的 cross_val_score 函数
scikit-learn中的cross_val_score函数scoring参数设置
如何从 scikit-learn 中与 predict_proba 一起使用的 cross_val_predict 获取类标签
如果我们在管道中包含转换器,来自 scikit-learn 的“cross_val_score”和“GridsearchCV”的 k 折交叉验证分数是不是存在偏差?