2016-10-07 1 views
0

내 모델에 Kfold 교차 사용을 시도하고 있지만이 오류가 발생합니다. 나는 KFold이 1D 배열 만 받아들이는 것을 알고 있지만 길이 입력을 배열로 변환 한 후에도이 문제를 일으킨다.TypeError : 길이가 1 인 배열 만 Kfold 교차 사용시 Python 스칼라로 변환 될 수 있습니다.

from sklearn.ensemble import ExtraTreesClassifier, RandomForestClassifier 
from sklearn.cross_validation import train_test_split 
from sklearn.cross_validation import KFold 

if __name__ == "__main__": 
    np.random.seed(1335) 

    verbose = True 
    shuffle = False 
    n_folds = 5 

    y = np.array(y) 

    if shuffle: 
    idx = np.random.permutation(y.size) 
    X_train = X_train[idx] 
    y = y[idx] 

    skf = KFold(y, n_folds) 

    models = [RandomForestClassifier(n_estimators=100, n_jobs=-1, criterion='gini'),ExtraTreesClassifier(n_estimators=100, n_jobs=-1, criterion='entropy')] 

    print("Stacking in progress") 
    A = [] 
    for j, clf in enumerate(models): 
    print(j, clf) 

    for i, (itrain, itest) in enumerate(skf): 
     print("Fold :", i) 
     x_train = X_train[itrain] 
     x_test = X_train[itest] 
     y_train = y[itrain] 
     y_test = y[itest] 
     print(x_train.shape, x_test.shape) 

     print(len(x_train), len(x_test)) 

     clf.fit(x_train, y_train) 
     pred = clf.predict_proba(x_test) 
     A.append(pred) 

"skf = KFold(y, n_folds)"줄에 오류가 표시됩니다. 이것에 대한 도움을 주시면 감사하겠습니다.

+0

'y'정의 방법은 무엇입니까? 또한 예제가 최소한이어야합니다. 4 개의 분류자를 포함하는 것이 정말 유용합니까? –

+0

y는 교육 집합의 대상 변수로 정의됩니다. 아니 내가 그것을 편집합니다. – Sahil

+0

그래서 더 이상 모델과 j 루프가 필요 없습니다. 간단한 예제는 우리가 이해하기가 더 쉽고 오류를 발견하는 것이 더 빠릅니다. KFold 사용에 대한 내 대답을보십시오. –

답변

1

its doc에서 KFold()y을 입력으로 간주하지 않고 분할 수 (n_folds) 만 예상합니다.

인스턴스가 KFold이되면 myKfold.split(x) (x은 모든 입력 데이터 임)을 수행하면 열차 및 테스트 색인을 생성하는 반복기를 얻을 수 있습니다. sklearn doc에서 붙여 넣은 복사 예 :

>>> from sklearn.model_selection import KFold 
>>> X = np.array([[1, 2], [3, 4], [1, 2], [3, 4]]) 
>>> y = np.array([1, 2, 3, 4]) 
>>> kf = KFold(n_splits=2) 
>>> kf.get_n_splits(X) 
2 
>>> print(kf) 
KFold(n_splits=2, random_state=None, shuffle=False) 
>>> for train_index, test_index in kf.split(X): 
... print("TRAIN:", train_index, "TEST:", test_index) 
... X_train, X_test = X[train_index], X[test_index] 
... y_train, y_test = y[train_index], y[test_index] 
TRAIN: [2 3] TEST: [0 1] 
TRAIN: [0 1] TEST: [2 3] 
관련 문제