python - 如何将单词转换为浮点值
问题描述
对于我的一个副项目,我正在尝试构建一个朴素贝叶斯模型,该模型可以根据标题检测一条新闻是否是假的。到目前为止,这是我的代码:
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)
当我运行它时,我收到一个错误,告诉我标题无法转换为浮点值。由于标题是由一堆单词组成的,我想知道我的下一步是什么,因为我不确定如何将一个单词转换为浮点数。
解决方案
如果我理解正确,您想使用第一个向量化文本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
,因为它应该是一维的。
推荐阅读
- python - 如何在 ib_insync 中获取我的股份数量?
- javascript - Vue.js - 注入一个 v-on 按钮以从来自外部源的静态 html 生成覆盖
- spring - @WebMvcTest - 如何配置安全性以便测试可以运行?
- python - 当我尝试将 sql 表加载到数据框中时,显示数据框中字符串的 NAN 值
- powershell - Azure DevOps 服务器 Invoke-RestMethod 错误:没有为“PUT”请求提供 API 版本
- amazon-web-services - 有没有一种简单的方法来克隆粘合作业,但更改数据库连接?
- python - 如何根据python中的条件从字典中的列表中删除元素
- react-native-push-notification - 当应用程序不工作时,PushNotificationIOS.getInitialNotification() 总是返回 null
- json - 如何替换存储在 JSON 文件中的 JSON 值并在 Rest Assured 测试中使用它
- javascript - XMLhttprequest 不发布(新的)