gpt4 book ai didi

python - scikit-learn pipeline (SVC) 的功能重要性

转载 作者:行者123 更新时间:2023-12-01 09:03:42 25 4
gpt4 key购买 nike

我有以下管道,我想获取每个类的特征权重。我有三个类(class)(“小说”、“非小说”、“无”)。我使用的分类器是 SVC

Book_contents= Pipeline([('selector', ItemSelector(key='Book')),
('tfidf',CountVectorizer(analyzer='word',
binary=True,
ngram_range=(1,1))),
])

Author_description= Pipeline([('selector', ItemSelector(key='Description')),
('tfidf', CountVectorizer(analyzer='word',
binary=True,
ngram_range=(1,1))),
])

ppl = Pipeline([('feats', FeatureUnion([('Contents',Book_contents),
('Desc',Author_description)])),
('clf', SVC(kernel='linear',class_weight='balanced'))
])

model = ppl.fit(training_data, Y_train)

我尝试过 eli5,但出现特征名称和分类器不匹配的错误。

f1=model.named_steps['feats'].transformer_list[0][1].named_steps['tfidf'].get_feature_names()
f2=model.named_steps['feats'].transformer_list[1][1].named_steps['tfidf'].get_feature_names()
list_features=f1
list_features.append(f2)
explain_weights.explain_linear_classifier_weights(model.named_steps['clf'],
vec=None, top=20,
target_names=ppl.classes_,
feature_names=list_features)

我收到此错误:

feature_names has a wrong length: expected=47783, got=10528

如何获得每个类别的特征权重排名?他们有办法在没有 eli5 的情况下做到这一点吗?

最佳答案

除了这一行之外,您所做的一切都是正确的:

list_features.append(f2)

在这里,您将整个 f2 列表作为元素附加到 f1 列表。这不是你想要的。

您想要将 f2 的所有元素添加到 f1。为此,您需要使用extend。只需这样做:

list_features.extend(f2)

有关更多详细信息,请参阅此问题:

除此之外,我认为您调用 explain_weights.explain_linear_classifier_weights 的方式是错误的。您只需调用 explain_weights(...),它就会自动在内部调用 explain_linear_classifier_weights

关于python - scikit-learn pipeline (SVC) 的功能重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52254618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com