首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用两个不同特性的模型的集成学习作为输入?

如何使用两个不同特性的模型的集成学习作为输入?
EN

Stack Overflow用户
提问于 2021-09-16 21:35:36
回答 1查看 314关注 0票数 1

我有一个假新闻检测的问题,它预测二进制标签“1”和“0”,通过矢量化的'tweet‘列,我使用三种不同的模型来检测,但我想使用集成方法来提高准确性,但他们使用不同的向量。

I有3个KNN模型,第一个和第二个KNN模型使用TF将'tweet‘列矢量化。

代码语言:javascript
复制
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进行句子矢量化

代码语言:javascript
复制
%%time
sent_vec = []
for index, row in X_train.iterrows():
    sent_vec.append(avg_feature_vector(row['tweet']))
%%time
sent_vec1 = []
for index, row in X_test.iterrows():
    sent_vec1.append(avg_feature_vector(row['tweet']))

缩放后的

.我的第三个模型适合这样的输入

代码语言:javascript
复制
scaler.fit(sent_vec)
scaled_X_train= scaler.transform(sent_vec)
scaled_X_test= scaler.transform(sent_vec1)
.
.
.
knn_model1.fit(scaled_X_train, y_train)

现在我想把这三种模型结合起来,我想用集成方法来给我和VotingClassifier一样的多数,但是我不知道如何处理不同的输入(TF-

& fastText),还有其他的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-17 06:36:33

您可以创建一个自定义MyVotingClassifier,它采用一个合适的模型,而不是一个尚未经过训练的模型实例。在VotingClassifier中,sklearn只将未匹配的分类器作为输入,并对它们进行训练,然后对预测结果进行投票。你可以创造出这样的东西。下面的函数可能不是确切的函数,但为了您的目的,您可以像下面这样做类似的功能。

代码语言:javascript
复制
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}
        '''
        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}) # Input the pre-processed `X`s 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69215446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档