应用 sklearn TFIDF returns 意外的数据帧形状

Applying sklearn TFIDF returns an unexpected dataframe shape

我将 TFIDF 应用于维度为 (590295, 6) 的特征矩阵,max_features 配置为 = 10000,但输出数据帧形状为 (6, 6) 而我期望它为 (590295, 10000)。这是在以下方法中发生的。请注意,以前,代码在方法之外工作:

def ApplyTFIDF(self,cleaned_data_set, max_features):
        print "in TFIDF", max_features
        vectorizer = TfidfVectorizer(analyzer = "word", tokenizer = None, preprocessor = None, stop_words = None, max_features = max_features) 
        print "in TFIDF cleaned_data_set", cleaned_data_set.shape 
        dataset_features = vectorizer.fit_transform(cleaned_data_set)

        print "in TFIDF, after fit_transform", dataset_features.shape 

        return dataset_features

输出:

cleaned_data_set shape (590295, 6)
in TFIDF 10000
in TFIDF cleaned_data_set (590295, 6)
in TFIDF, after fit_transform (6, 6)
after TFIDF (6, 6)

更多信息:

我正在处理一个包含 csv 文件数据的数据框。我正在使用以下代码将此数据框的几列提取到 cleaned_data_set 变量中:

cleaned_data_set = data_set[listOfAttributeColumnNames]

其中 listOfAttributeColumnNames 是列名列表。以前,我使用以下硬编码命令执行此操作:

cleaned_data_set = data_set.ColumnName1.map(str)+" "+data_set.ColumnName2.map(str)+ " " + data_set.ColumnName3.map(str)+" " + data_set.ColumnName4.map(str) + " " + data_set.ColumnName5.map(str)+ " " + data_set.ColumnName6.map(str)

我错过了什么?

TfidfVectorizertext 内容作为输入。
因此,对于您的用例,您需要传递一个包含 590295 个元素的向量:要向量化的文本(字符串)。

你给它一个 6 列的数据框:它应该矢量化的文本在哪里或什么?我很惊讶你没有收到错误。

您用于预处理的这两个命令非常不同:

cleaned_data_set = data_set[listOfAttributeColumnNames]

这为您提供了一个包含 len(listOfAttributeColumnNames)(显然是 6)列的数据框。正如我提到的,这不是矢量化器的正确输入。

cleaned_data_set = data_set.ColumnName1.map(str)+" "+data_set.ColumnName2.map(str)+ " " + data_set.ColumnName3.map(str)

这为您提供了一个 Series 对象,可以将其视为具有字符串元素的列向量。这是 TfidfVectorizer.

的正确输入

您可以按照以下方式做一些事情:

cleaned_data_set = data_set.apply(lambda x: " ".join([str(el) for el in x[["ColumnName1", "ColumnName2", "ColumnName3"]]]), axis=1)

希望对您有所帮助。