【发布时间】:2019-03-16 11:31:50
【问题描述】:
如何让 TFIDF Vectorizer 在用于交叉验证的 sklearn 管道中返回具有相应列名的 pandas 数据帧?
我有一个 Sklearn 管道,其中一个步骤是 TFIDF 矢量化器:
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() 可以帮助了解列名。但是如何在管道中包含这个 + 将稀疏矩阵转换为数据帧?
【问题讨论】:
-
稀疏矩阵的密集版本是否足够小以适合内存?
-
是的@swhat,我有足够的内存来适应矩阵的密集版本。我的问题是如何在管道内进行转换
标签: python pandas scikit-learn tf-idf