【发布时间】:2018-11-04 01:24:42
【问题描述】:
我正在构建一个朴素贝叶斯分类器,并按照 scikit-learn 网站上的教程进行操作。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import time
import csv
import string
from sklearn.cross_validation import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
# Importing dataset
data = pd.read_csv("test.csv", quotechar='"', delimiter=',',quoting=csv.QUOTE_ALL, skipinitialspace=True,error_bad_lines=False)
df2 = data.set_index("name", drop = False)
df2['sentiment'] = df2['rating'].apply(lambda rating : +1 if rating > 3 else -1)
train, test = train_test_split(df2, test_size=0.2)
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(traintrain['review'])
test_matrix = count_vect.transform(testrain['review'])
clf = MultinomialNB().fit(X_train_tfidf, train['sentiment'])
第一个参数是词汇字典,它返回一个 Document-Term 矩阵。 第二个参数应该是什么,twenty_train.target?
编辑数据示例
Name, review,rating
film1,......,1
film2, the film is....,5
film3, film about..., 4
根据此说明,我创建了一个新列,如果评分 >3,则评论为正面,否则为负面
df2['sentiment'] = df2['rating'].apply(lambda rating : +1 if rating > 3 else -1)
【问题讨论】:
-
第二个参数应该是您希望模型学习的类标签。你不确定你的目标是什么?你能解释一下你想对数据做什么,你想让模型学习什么吗?如果您不确定这些问题,我建议您阅读有关机器学习的更多信息。
-
不,我确定,这是电影评论的极性,正面或负面,我的数据包含 3 个文件名、评论、评级,我添加了第 4 个包含极性的文件
-
那么
'sentiment'你这里有什么?为什么要在多列上训练 tfidfvectorizer?它会给出错误的结果。 -
@VivekKumar:我编辑了帖子,情绪是正面或负面的,我只在专栏评论上训练
-
代码没有显示你只在复习上训练。目前,您将完整的
df2发送到train_test_split,然后使用它来训练CountVectorizer,这意味着它使用所有 df2。不仅仅是'reviews'
标签: python python-3.x pandas machine-learning scikit-learn