我有以下代码
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]])
向传递到公式中的Y/Labels变量添加
.ravel()
也有助于在KNN中解决此问题。如果将目标标签指定为来自Pandas的单个数据列,则它似乎是可以修复的。如果目标有多个列,我会得到一个类似的错误。例如,尝试:
在scikit learn中进行交叉验证时,该过程需要一个
(R,)
形状标签,而不是(R,1)
。虽然它们在某种程度上是相同的,但是它们的索引机制是不同的。所以在你的例子中,只需加上:在传递给交叉验证函数之前。
相关问题 更多 >
编程相关推荐