我有一個假新聞檢測問題,它通過對'tweet'列進行矢量化來預測二進制標簽 "1"& "0",我使用三個不同的模型進行檢測,但我想使用集合方法來提高準確性,但它們使用不同的矢量器。
我有3個KNN模型,第一個和第二個模型使用TF-IDF對 "tweet "列進行矢量化。
from sklearn.feature_extraction.text import TfidfVectorizer
vector = TfidfVectorizer(max_features =5000, ngram_range=(1,3)
X_train = vector.fit_transform(X_train['tweet']) .toarray()
X_test = vector.fit_transform(X_test['tweet']).toarray()
對于第三個模型,我使用fastText進行句子矢量化%%time sent_vec = [] for index, row in X_train.iterrows()。 sent_vec.append(avg_feature_vector(row['tweet'] )) %%時間 sent_vec1 = [] for index, row in X_test.iterrows() 。 sent_vec1.append(avg_feature_vector(row['tweet'])經過縮放和......我的第三個模型適合這樣的輸入
。scaler.fit(send_vec) scaled_X_train= scaler.transform(send_vec) scaled_X_test= scaler.transform(send_vec1) . . . knn_model1.fit(scaled_X_train, y_train)現在我想像這樣將三個模型結合起來,我希望集合方法能像VotingClassifier一樣給我多數,但是我不知道如何處理不同的輸入(TF-IDF & fastText),是否有其他方法可以做到?uj5u.com熱心網友回復:
你可以創建一個自定義的
MyVotingClassifier,它需要一個擬合的模型而不是一個尚未訓練的模型實體。在VotingClassifier中,sklearn只接受未擬合的分類器作為輸入并訓練它們,然后在預測結果上應用投票。你可以創建這樣的東西。下面的函式可能不是準確的函式,但你可以為你的目的制作相當類似的函式,如下。from collections import Counter clf1 = knn_model_1.fit(X1, y) clf2 = knn_model_2.fit(X2, y) clf3 = knn_model_3.fit(X3, y) class MyVotingClassifier。 def __init__(self, **models): self.models = models def predict(dict_X)。 '' dict_X = {'knn_model_1': X1, 'knn_model_2': X2, 'knn_model_3': X3} ''/span> preds = [] for model_name in dict_X: model = self.models[model_name] preds.append(model.predict(dict_X[model_name])) preds = list(zip(*preds)) final_pred = list(map(lambda x: Counter(x).most_common(1)[0][0] ) return final_pred ensemble_model = MyVotingClassifier(knn_model_1=clf1, knn_model_2=clf2, knn_model_3=clf3) ensemble_model。 predict({'knn_model_1': X1, 'knn_model_2': X2, 'knn_model_3': X3}) # 輸入預處理的`X`s /span轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/329804.html
標籤:
下一篇:Haskell中的零階函式
