Python SKLearn交叉验证错误--类型错误

Python SKLearn交叉验证错误--类型错误,python,numpy,pandas,scikit-learn,cross-validation,Python,Numpy,Pandas,Scikit Learn,Cross Validation,我正在尝试对KNN分类器的结果进行交叉验证。我使用了下面的代码,它返回一个类型错误 在上下文中,我已经导入了SciKit Learn、Numpy和Pandas库 from sklearn.cross_validation import cross_val_score, ShuffleSplit n_samples = len(y) knn = KNeighborsClassifier(3) cv = ShuffleSplit(n_samples, n_iter=10, test_size=0.

我正在尝试对KNN分类器的结果进行交叉验证。我使用了下面的代码,它返回一个类型错误

在上下文中,我已经导入了SciKit Learn、Numpy和Pandas库

from sklearn.cross_validation import cross_val_score, ShuffleSplit

n_samples = len(y)
knn = KNeighborsClassifier(3)
cv = ShuffleSplit(n_samples, n_iter=10, test_size=0.3, random_state=0)

test_scores = cross_val_score(knn, X, y, cv=cv)
test_scores.mean()
返回:

    ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-139-d8cc3ee0c29b> in <module>()
  7 cv = ShuffleSplit(n_samples, n_iter=10, test_size=0.3, random_state=0)
  8 
  9 test_scores = cross_val_score(knn, X, y, cv=cv)
 10 test_scores.mean()

//anaconda/lib/python2.7/site-packages/sklearn/cross_validation.pyc in     cross_val_score(estimator, X, y, scoring, cv, n_jobs, verbose, fit_params, score_func, pre_dispatch)
1150         delayed(_cross_val_score)(clone(estimator), X, y, scorer, train, test,
1151                                   verbose, fit_params)
1152         for train, test in cv)
1153     return np.array(scores)
1154 

//anaconda/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.pyc in __call__(self, iterable)
515         try:
516             for function, args, kwargs in iterable:
517                 self.dispatch(function, args, kwargs)
518 
519             self.retrieve()
//anaconda/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.pyc in dispatch(self, func, args, kwargs)
310         """
311         if self._pool is None:
312             job = ImmediateApply(func, args, kwargs)
313             index = len(self._jobs)
314             if not _verbosity_filter(index, self.verbose):
//anaconda/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.pyc in __init__(self, func, args, kwargs)
134         # Don't delay the application, to avoid keeping the input
135         # arguments in memory
136         self.results = func(*args, **kwargs)
137 
138     def get(self):

//anaconda/lib/python2.7/site-packages/sklearn/cross_validation.pyc in _cross_val_score(estimator, X, y, scorer, train, test, verbose, fit_params)
1056         y_test = None
1057     else:
1058         y_train = y[train]
1059         y_test = y[test]
1060     estimator.fit(X_train, y_train, **fit_params)

TypeError: only integer arrays with one element can be converted to an index
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
在()
7 cv=ShuffleSplit(n_样本,n_iter=10,测试尺寸=0.3,随机状态=0)
8.
9测试分数=交叉分数(knn、X、y、cv=cv)
10个测试分数。平均值()
//anaconda/lib/python2.7/site-packages/sklearn/cross\u validation.pyc在cross\u Valu分数中(估计器、X、y、分数、cv、n\u作业、详细信息、拟合参数、分数函数、预调度)
1150延迟(_cross_val_score)(克隆(估计器),X,y,记分器,训练,测试,
1151详细,适合(参数)
1152(用于列车,在cv中进行试验)
1153返回np.数组(分数)
1154
//anaconda/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.pyc in_u_调用(self,iterable)
515尝试:
516对于iterable中的函数、参数、kwargs:
517自动调度(功能、参数、kwargs)
518
519 self.retrieve()
//调度中的anaconda/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.pyc(self、func、args、kwargs)
310         """
311如果self.\u池为无:
312作业=立即应用(func、args、kwargs)
313索引=长度(自作业)
314如果不是详细过滤器(索引,self.verbose):
//anaconda/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.pyc in_u________(self、func、args、kwargs)
134#不要延迟应用程序,以免保留输入
135#内存中的参数
136 self.results=func(*args,**kwargs)
137
138 def get(自我):
//anaconda/lib/python2.7/site-packages/sklearn/cross_validation.pyc in_cross_val_分数(估计器、X、y、计分器、训练、测试、详细、拟合参数)
1056 y_试验=无
1057其他:
1058 y_列=y[列]
1059 y_试验=y[试验]
1060估算器拟合(X_序列、y_序列、**拟合参数)
TypeError:只有包含一个元素的整数数组才能转换为索引

这是一个与熊猫有关的错误。Scikit learn需要numpy数组、稀疏矩阵或行为类似的对象

pandas数据帧的主要问题是,使用[…]进行索引选择列而不是行。pandas中的行索引是通过DataFrame.loc[…]进行的。这是sklearn的意外行为。错误可能来自第1058行,代码未能提取列车样本

要解决此问题,如果y是一个数据帧列,请尝试将列转换为数组类型

y = y.values

否则可能是一个选项。

请指定y变量是pandas.DataFrame还是从pandas.DataFrame派生而来