我怎样才能把一个词变成一个浮点值[关闭]
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 对应于max_df
参数)。您可以在docs 中了解有关max_df
和min_df
的更多信息。以上是关于我怎样才能把一个词变成一个浮点值[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
在ps中,点击了一个抓手工具,之后鼠标一到图片上就变成抓手,怎样才能让图片上变成正常的光标?
Laravel 的调试消息 - 部分是法语。我怎样才能把它变成英文?