2014-03-31 3 views
0

내 KNN 분류기의 결과에 교차 유효성 검사를 구현하려고합니다. 형식 오류를 반환하는 다음 코드를 사용했습니다.SKLearn 교차 유효성 검사 오류 - 유형 오류

문맥을 위해 이미 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 
+0

y 변수가 pandas.DataFrame인지 여부를 지정하십시오. – eickenberg

답변

1

이 팬더와 관련된 오류입니다. Scikit learn은 numpy 배열, 희소 행렬 또는 이와 유사하게 동작하는 객체를 기대합니다.

pandas DataFrames의 주요 문제점은 [...]로 색인을 생성하면 열이 아닌 열이 선택된다는 사실 때문입니다. pandas의 라인 인덱싱은 DataFrame.loc [...]을 통해 수행됩니다. 이것은 sklearn의 예기치 않은 동작입니다. 오류는 아마도 코드에서 열차 샘플을 추출하지 못하는 1058 번 줄에서 나온 것일 수 있습니다.

는 y를 하나의 DataFrame 열 경우,

y = y.values 

그렇지 않으면 pandas-sklearn 가능성 옵션입니다 배열 형식에 열을 변환하려고,이 문제를 해결합니다.