2016-08-17 8 views
0

私はscikitとMLにちょっと新しいです。私は、1つのクラスと残りのクラスのAdaboostクラスターを訓練しようとしています。私は、テキストがclean_train_reviewsとして挿入されたパイプラインを使用し、Yは、クラス(マルチラベル、N = 10)であり、次のコードをchi squared selectKbest不正な入力形状エラー

# To Read Training data set 
test = pd.read_csv("train.csv", header=0, delimiter=",", \ 
        quoting=1, error_bad_lines=False) 
num_reviews = len(test["text"]) 
clean_train_reviews = [] 
catlist=[] 
for i in xrange(0,num_reviews): 
    data=processText(test["text"][i]) 
    data1=test["category"][i] 
    clean_train_reviews.append(data) 
    catlist.append(data1.split('.')) 

# To read test dataset 
test = pd.read_csv("test.csv", header=0, delimiter=",", \ 
        quoting=1, error_bad_lines=False) 
num_reviews = len(test["text"]) 
clean_test_reviews = [] 
for i in xrange(0,num_reviews): 
    data=processText(test["text"][i]) 
    clean_test_reviews.append(data) 
X_test=np.array(clean_test_reviews) 


lb = preprocessing.MultiLabelBinarizer() 
Y = lb.fit_transform(catlist) 

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer(ngram_range=(1,2), max_features=1500,min_df=4)), 
    ('tfidf', TfidfTransformer()), 
    ('chi2', SelectKBest(chi2, k=200)), 
    ('clf', OneVsRestClassifier(AdaBoostClassifier()))]) 
classifier.fit(clean_train_reviews, Y) 
predicted = classifier.predict(X_test) 

を使用しています。テキストフィーチャは、TfidfVectorizer()を使用してパイプラインで抽出され、カイ2乗フィーチャ選択方法を使用して選択されます。アダブースト分類は与える:ValueErrorをを:悪い入力形状を使用すると、マルチラベルの問題のために期待するとして、特徴選択が機能しないため(1000年、10)

File "<ipython-input-10-9dbc8b18e6b8>", line 1, in <module> 
    runfile('C:/Users/Administrator/Desktop/nincymiss/adaboost.py', wdir='C:/Users/Administrator/Desktop/nincymiss') 

    File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 601, in runfile 
    execfile(filename, namespace) 

    File "C:\Python27\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 66, in execfile 
    exec(compile(scripttext, filename, 'exec'), glob, loc) 

    File "C:/Users/Administrator/Desktop/nincymiss/adaboost.py", line 179, in <module> 
    classifier.fit(clean_train_reviews, Y) 

    File "C:\Python27\lib\site-packages\sklearn\pipeline.py", line 164, in fit 
    Xt, fit_params = self._pre_transform(X, y, **fit_params) 

    File "C:\Python27\lib\site-packages\sklearn\pipeline.py", line 145, in _pre_transform 
    Xt = transform.fit_transform(Xt, y, **fit_params_steps[name]) 

    File "C:\Python27\lib\site-packages\sklearn\base.py", line 458, in fit_transform 
    return self.fit(X, y, **fit_params).transform(X) 

    File "C:\Python27\lib\site-packages\sklearn\feature_selection\univariate_selection.py", line 322, in fit 
    X, y = check_X_y(X, y, ['csr', 'csc']) 

    File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 515, in check_X_y 
    y = column_or_1d(y, warn=True) 

    File "C:\Python27\lib\site-packages\sklearn\utils\validation.py", line 551, in column_or_1d 
    raise ValueError("bad input shape {0}".format(shape)) 

ValueError: bad input shape (1000, 10) 
+0

Usman Maqboolありがとうございました:) – Sanoop

答えて

0

これがあります。それぞれのラベルの「ベスト」機能を別々に選択することができます。

classifier = Pipeline([ 
    ('vectorizer', CountVectorizer(ngram_range=(1,2), max_features=1500, min_df=4)), 
    ('tfidf', TfidfTransformer()), 
    ('chi2', SelectKBest(chi2, k=200)), 
    ('clf', AdaBoostClassifier())]) 

clf = OneVsRestClassifier(classifier) 
+0

非常に多くのStergiosありがとうございました。将来の助けを期待してください:) – Sanoop

+0

それは動作するので、私の答えをupvoteし、この答えを受け入れるために 'チック'をクリックしてください! – Stergios

関連する問題