0

我訓練估計與此:如何用估算器對文本進行分類?

def train_estimator(feature_list, expected_values, k=5): 
    pipeline = Pipeline([('vect', CountVectorizer(input='filename', stop_words='english')), 
         ('clf', MultinomialNB())]) 

    parameters = {'vect__ngram_range':[(1, 1), (1, 2), (1, 3)], 
        'vect__min_df':[0.001, 0.01, 0.02, 0.05, 0.1], 
        'vect__max_df':[0.85, 0.90, 0.95, 0.99, 1.0], 
        'clf__alpha':[0.001, 0.01, 0.1, 0.2, 0.5, 1.0]} 

    gs_clf = GridSearchCV(pipeline, parameters, n_jobs=6, cv=k, verbose=1, refit=True, scoring='roc_auc') 
    gs_clf.fit(feature_list, expected_values) 

    return gs_clf.best_estimator_ 

現在我需要一些文字與此估計進行分類,但其並不清楚如何正確地矢量化的文本。

我需要矢量化text,然後用矢量調用estimator.predict()。問題是,這個向量必須與用於訓練estimator的向量(foobar這個詞必須與用於訓練模型的向量相同的索引)一致。從文檔中不清楚如何以這種方式矢量化text

我該如何編寫這個predict()函數?

def predict(estimator, text): 
    # Vectorize text and call estimator.predict() 

編輯

feature_listexpected_values作了如下:

def fetch_training_set(doc_iterator): 
    files, labels = list(), list() 
    for row in doc_iterator: 
     filename = 'somepath/%s.txt' % random() 
     with open(filename, 'w', encoding='utf-8') as f: 
      f.write(row['text']) 

     files.append(filename) 
     labels.append(row['label']) 

    feature_list = np.array(files) 
    expected_values = np.array(labels) 

    return feature_list, expected_values 
+0

什麼是'feature_list'?原始文本? –

+0

@Vivek Kumar'feature_list'是一個文件名列表。每個文件都包含文本。 – Jay

+0

@Vivek Kumar'feature_list'實際上是一個'np.array()'文件名。我用更多的信息更新了這個問題。 – Jay

回答

0

我想加入你的額外功能train_estimatorpredict使事情變得複雜。

gs_clf = GridSearchCV(pipeline, parameters, n_jobs=6, cv=k, verbose=1, refit=True, scoring='roc_auc') 
gs_clf.fit(feature_list, expected_values) 
gs_clf.predict(your_data) 

會做這項工作(最後一行)。由於您改裝(refit=True)您的管道,gs_clf是用網格搜索找到的最佳參數進行改裝。然後,gs_clf.predict將調用管道的每個成員的predict函數。

+0

什麼是'your_data'?它是文本還是特徵向量? – Jay

+0

通常是文字。但是由於CountVectorizer的輸入是文件名,所以我應該嘗試一個文件名。 – geompalik

相關問題