我怎样才能把一个词变成一个浮点值[关闭]

Posted

技术标签:

【中文标题】我怎样才能把一个词变成一个浮点值[关闭]【英文标题】:How can I turn a word into a float value [closed] 【发布时间】:2020-07-17 21:40:39 【问题描述】:

对于我的一个附带项目,我正在尝试构建一个朴素贝叶斯模型,该模型可以根据标题检测一条新闻是否是假的。到目前为止,这是我的代码:

import numpy as np
import pandas as pd
import sklearn
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import CountVectorizer

data = pd.read_csv("/Users/amanpuranik/Desktop/fake-news-detection/data.csv")
data = data[['Headline', "Label"]]
print(data)

x = data[["Headline"]]
y = data[["Label"]]

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.1, random_state=1)

tfidf_vectorizer=TfidfVectorizer(stop_words='english', max_df=0.7)

model = MultinomialNB()
model.fit(x_train, y_train)

当我运行它时,我收到一个错误,告诉我标题无法转换为浮点值。由于标题是由一堆单词组成的,我想知道我的下一步是什么,因为我不确定如何将单词转换为浮点数。

【问题讨论】:

例如应该将单词转换成哪个浮点数? 我没有学足够的ML,但是据我所知,你必须将标题转换成一个数字列表,每个数字都有一定的含义,例如标题中的单词数,平均词长,特定词的使用次数,并将这些数字映射在 0 和 1 之间。如果我错了,请纠正我。 看来您需要阅读有关自然语言处理 (NLP) 的更多信息,以了解为所需处理编码输入的各种方法,然后选择一种方法。对于 Stack Overflow 来说,这个问题太广泛了。 【参考方案1】:

如果我理解正确,您想先使用TfidfVectorizer 对文本进行矢量化,然后尝试使用MultinomialNB 模型对结果向量进行分类。我建议您将这两个步骤包含在 pipeline 中,以便更轻松地部署模型、交叉验证或添加更多步骤。

import numpy as np
import pandas as pd

from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.pipeline import Pipeline

data = pd.DataFrame('Headline': ['Are Lizard Immigrants Stealing our Oil???',
                                  'Trade Summit Proceeds As Planned'],
                     'Label': ['Fake', 'Real'])

print(data)

X = data[['Headline']]
y = data['Label']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1, random_state = 1)

tfidf_vectorizer=TfidfVectorizer(stop_words = 'english')

model = MultinomialNB()

pipeline = Pipeline([('vectorizer', tfidf_vectorizer), ('classifier', model)])

pipeline.fit(X_train, y_train)

print(pipeline)

输出:

                                    Headline Label
0  Are Lizard Immigrants Stealing our Oil???  Fake
1           Trade Summit Proceeds As Planned  Real
Pipeline(memory=None,
         steps=[('vectorizer',
                 TfidfVectorizer(analyzer='word', binary=False,
                                 decode_error='strict',
                                 dtype=<class 'numpy.float64'>,
                                 encoding='utf-8', input='content',
                                 lowercase=True, max_df=1.0, max_features=None,
                                 min_df=1, ngram_range=(1, 1), norm='l2',
                                 preprocessor=None, smooth_idf=True,
                                 stop_words='english', strip_accents=None,
                                 sublinear_tf=False,
                                 token_pattern='(?u)\\b\\w\\w+\\b',
                                 tokenizer=None, use_idf=True,
                                 vocabulary=None)),
                ('classifier',
                 MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True))],
         verbose=False)

请注意,当我从数据框中提取 y 时,我从您的代码中删除了内括号,因为它应该是一维的。

【讨论】:

这很奇怪,当我运行你的代码时,我得到一个“ValueError:max_df 对应于 @puranikman 你确定你在使用我的代码吗? (检查 tfidfvectorizer 的初始化。我取出了你的 max_df 参数)。您可以在docs 中了解有关max_dfmin_df 的更多信息。

以上是关于我怎样才能把一个词变成一个浮点值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

我怎样才能把几个字符打印成一个单词[关闭]

在ps中,点击了一个抓手工具,之后鼠标一到图片上就变成抓手,怎样才能让图片上变成正常的光标?

Laravel 的调试消息 - 部分是法语。我怎样才能把它变成英文?

我们怎样才能把 str_replace() 函数放到一个变量中呢? [关闭]

T-SQL如何将整型值变成浮点型

我的android平板电脑是默认横屏的,怎么才能让他变成默认竖屏