2016-08-05 1 views
0

У меня есть несбалансированные данные бинарного классификатора и вы хотите, чтобы Стратифицированное резюме K-Fold. Я получаю ошибку ниже:Machine Learning - Stratified K-Fold CV

data = DataFrame(df,columns=names) 
train,test = cross_validation.train_test_split(df,test_size=0.20) 
train_data,test_data = pd.DataFrame(train,columns=names),pd.DataFrame(test,columns=names) 
y = test_data['Classifier'].values 
k_fold = StratifiedKFold(y, n_folds=3, shuffle=False, random_state=None) 
scores = [] 

for train_indices, test_indices in k_fold: 
    print(train_indices) 
    print(test_indices) 
    train_text = train.iloc[train_indices] 
    train_y = train.iloc[train_indices] 
    print(train_y) 
    test_text = test.iloc[test_indices] 
    test_y = test.iloc[test_indices] 
    pipeline.fit(train_text, train_y) 

Здесь трубопровод является:

pipeline = Pipeline([ 
    ('count_vectorizer', CountVectorizer(ngram_range=(1, 2))), 
    ('tfidf_transformer', TfidfTransformer()), 
    ('classifier',   MultinomialNB()) ]) . The error is occurring in pipeline.Below is the error. 
C:\SMS\Anaconda32bit\lib\site-packages\sklearn\utils\validation.pyc in column_or_1d(y, warn) 
    549   return np.ravel(y) 
    --> 551  raise ValueError("bad input shape {0}".format(shape)) 
ValueError: bad input shape (54, 3) 

ответ

0

Вы не передавая действительные этикетки, на самом деле в вашем коде этикетки и данных это то же самое:

train_text = train.iloc[train_indices] 
train_y = train.iloc[train_indices] 

в то время как, возможно, вы хотели что-то между строк

train_y = y[train_indices] 

и то же самое для испытания.

+0

Спасибо за ответ. Не могли бы вы предоставить любой образец, который у вас есть для StratifiedK Fold, поскольку теперь я получаю другую ошибку. Заранее спасибо! – MLUser2016

+0

Тогда, пожалуйста, задайте отдельный вопрос и сообщите об ошибке. Примеры на сайте sklearn – lejlot