gpt4 book ai didi

python - 如何从管道内的 sklearn TFIDF Vectorizer 返回数据帧?

转载 作者:太空宇宙 更新时间:2023-11-03 14:41:40 26 4
gpt4 key购买 nike

如何让 TFIDF Vectorizer 在用于交叉验证的 sklearn 管道内返回具有相应列名的 pandas 数据帧?

我有一个 Sklearn 管道,其中一个步骤是 TFIDF Vectorizer:

class InspectPipeline(BaseEstimator, TransformerMixin):

def transform(self, x):
return x

def fit(self, x, y=None):
self.df = x
return self


pipeline = Pipeline(
[
("selector", ItemSelector(key="text_column")),
("vectorizer", TfidfVectorizer()),
("debug", InspectPipeline()),
("classifier", RandomForestClassifier())
]
)

我创建了 InspectPipeline 类,以便稍后检查传递给分类器的特征是什么(通过运行 pipeline.best_estimator_.named_steps['debug'].df).但是,TfidfVectorizer 返回一个稀疏矩阵,这是我在执行 pipeline.best_estimator_.named_steps['debug'].df 时得到的。我不想获取稀疏矩阵,而是想获取 TFIDF 向量作为 pandas 数据框,其中列名是相应的 tfidf 标记。

我知道 tfidf_vectorizer.get_feature_names() 可以帮助了解列名。但是我如何在管道中包含这个 + 将稀疏矩阵转换为数据帧?

最佳答案

您可以扩展 TfidfVectorizer 以返回具有所需列名的 DataFrame,并在您的管道中使用它。

from sklearn.feature_extraction.text import TfidfVectorizer
import pandas as pd

class DenseTfidfVectorizer(TfidfVectorizer):

def transform(self, raw_documents, copy=True):
X = super().transform(raw_documents, copy=copy)
df = pd.DataFrame(X.toarray(), columns=self.get_feature_names())
return df

def fit_transform(self, raw_documents, y=None):
X = super().fit_transform(raw_documents, y=y)
df = pd.DataFrame(X.toarray(), columns=self.get_feature_names())
return df

关于python - 如何从管道内的 sklearn TFIDF Vectorizer 返回数据帧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52759118/

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