gpt4 book ai didi

python - 在多列数据上拟合 MultinomialNB

转载 作者:行者123 更新时间:2023-11-28 19:02:05 25 4
gpt4 key购买 nike

给定一个包含 100 行的数据表,例如:

Place    | Text             | Value | Text_Two
europe | some random text | 3.2 | some more random text
america | the usa | 4.1 | the white house
...

我正在尝试使用以下内容进行分类:

df = pd.read_csv('data.csv')
mnb = MultinomialNB()
tf = TfidfVectorizer()

df.loc[df['Place'] == 'europe','Place'] = 0
df.loc[df['Place'] == 'america','Place'] = 1

X = df[['Text', 'Value', 'Text_Two']]
y = df['Place']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25)
X_train_tf = tf.fit_transform(X_train)

mnb.fit(X_train_tf, y_train)

以上会产生以下错误:

ValueError: Found input variables with inconsistent numbers of samples: [3, 100]

据我所知,它只能看到使用 X = df[['Text', 'Value', 'Text_Two']] 设置的类别,而不是这些类别中的数据。

如果我只为一个类别指定 X,则上面的代码有效,例如: X = df['文本']

是否可以将 MultinomialNB 拟合到多个类别的数据上?

最佳答案

这与 MultinomialNB 无关。它可以很好地处理多列。问题是 TfidfVectorizer。

TfidfVectorizer 仅适用于单一维度的可迭代(数据框的单列),不会对输入数据的形状或类型进行任何类型的检查。

它将only do this :

for doc in raw_documents:
...
...

当您将数据框传递给它时(无论是单列还是多列),for doc in raw_documents:,在数据框上只会输出列名,而不输出实际数据。您在 X 中传递的数据具有三列,因此只有这些列用作文档,因此出现错误

ValueError:发现样本数量不一致的输入变量:[3, 100]

因为您的 y 的长度为 100,而您的 X(即使它的长度为 100,但由于 tfidfvectorizer,它现在只有 3 个长度)。

所以要解决这个问题,您有两个选择:

1) 您需要对每个文本列(TextText_Two)进行单独的 tf-idf 向量化,然后组合结果矩阵形成特征矩阵与 MultinomialNB 一起使用。

2) 您可以按照@âńōŋŷxmoůŜ 的建议将两个文本列组合成一个列,然后在该列上执行 tf-idf。

这两个选项会产生不同的特征向量,所以你需要先了解每个选项的作用,然后选择你想要的。

关于python - 在多列数据上拟合 MultinomialNB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51697502/

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