使用 TF_IDF 提取特征后如何使用朴素贝叶斯分类器
How to use naive bayes classifier after Extract the features using TF_IDF
我正在尝试使用朴素贝叶斯class化器class化特征,我使用TF_IDF进行特征提取。
finaltfidfVector
是一个向量列表,每个向量代表数字列表,0
如果没有找到单词,否则如果找到单词的权重。
并且classlabels
包含每个向量的所有class标签。我正在尝试 class 使用此代码对其进行验证,但它不起作用。
26652 行数据集
from nltk.classify import apply_features
def naivebyse(finaltfidfVector,classlabels,reviews):
train_set = []
j = 0
for vector in finaltfidfVector:
arr={}
if j<18697:
arr[tuple(vector)] = classlabels[j]
train_set.append((arr, reviews[j]))
j += 1
test_set = []
j = 18697
for vector in finaltfidfVector:
arr = {}
if j < 26652 and j>=18697:
arr[tuple(vector)] = classlabels[j]
test_set.append((arr, reviews[j]))
j += 1
classifier = nltk.NaiveBayesClassifier.train(train_set)
print(nltk.classify.accuracy(classifier, test_set))
输出:
0.0
参考 TF_IDF 并应用于 finaltfidfVector
https://triton.ml/blog/tf-idf-from-scratch?fbclid=IwAR3UlCToGYFEQSmugXo3M5Q9fcld79JfXSfBaDG7wKv5a49O0ZDEft9DFNg。
数据集
this is sample about the used data set before preprocessing and TF_IDF
这是 finaltfidfVector
列表中索引为零的第一个向量的示例
[0.0,0.0, 0.0, 0.6214608098422192, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5115995809754083,0.0,0.0, 0.0, 0.0, 0.5521460917862246, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6214608098422192,0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6214608098422192, 0.0, 0.0, 0.0, 0.6214608098422192]
classlabels
包含每个向量的 class 标签
, 1 表示讽刺 0 表示不讽刺。索引0的class标签是1,这个1代表finaltfidfVector
中的第一个向量。
train_set的第一项是
({(0.0, 0.0, 1.3803652294655615,.....ect): '0'}, "former versace store clerk sues over secret 'black code' for minority shoppers")
这是一个可复制的玩具示例:
# let's define a train_set
train_set = [
({'adam': 0.05,'is': 0.0, 'a': 0.0, 'good': 0.02, 'man': 0.0}, 1),
({'eve': 0.0, 'is': 0.0, 'a': 0.0,'good': 0.02,'woman': 0.0}, 1),
({'adam': 0.05, 'is': 0.0, 'evil': 0.0}, 0)]
玩具数据集是使用手工制作的 "tfidf" 乐谱字典创建的:
tfidf_dict = {
'adam': 0.05,
'eve': 0.05,
'evil': 0.02,
'kind': 0.02,
'good': 0.02,
'bad': 0.02
}
其中每个已知单词都有一个 tfidf 分数,一个未知单词的分数为 0。而且在 train_set 中,我们对标有 1 ("adam is good") 的句子有正分,负分标记为 0 ("adam is evil").
现在运行一些测试:
import nltk
clf = nltk.NaiveBayesClassifier.train(train_set)
看看这在玩具火车组上是如何工作的:
>>> nltk.classify.accuracy(clf, train_set)
1.0
由于测试集与训练集具有相同的结构,这足以说明如何训练 运行 朴素贝叶斯分类器。
我正在尝试使用朴素贝叶斯class化器class化特征,我使用TF_IDF进行特征提取。
finaltfidfVector
是一个向量列表,每个向量代表数字列表,0
如果没有找到单词,否则如果找到单词的权重。
并且classlabels
包含每个向量的所有class标签。我正在尝试 class 使用此代码对其进行验证,但它不起作用。
26652 行数据集
from nltk.classify import apply_features
def naivebyse(finaltfidfVector,classlabels,reviews):
train_set = []
j = 0
for vector in finaltfidfVector:
arr={}
if j<18697:
arr[tuple(vector)] = classlabels[j]
train_set.append((arr, reviews[j]))
j += 1
test_set = []
j = 18697
for vector in finaltfidfVector:
arr = {}
if j < 26652 and j>=18697:
arr[tuple(vector)] = classlabels[j]
test_set.append((arr, reviews[j]))
j += 1
classifier = nltk.NaiveBayesClassifier.train(train_set)
print(nltk.classify.accuracy(classifier, test_set))
输出:
0.0
参考 TF_IDF 并应用于 finaltfidfVector
https://triton.ml/blog/tf-idf-from-scratch?fbclid=IwAR3UlCToGYFEQSmugXo3M5Q9fcld79JfXSfBaDG7wKv5a49O0ZDEft9DFNg。
数据集
this is sample about the used data set before preprocessing and TF_IDF
这是 finaltfidfVector
列表中索引为零的第一个向量的示例
[0.0,0.0, 0.0, 0.6214608098422192, 0.0, 0.0, 0.0, 0.0, 0.0, 0.5115995809754083,0.0,0.0, 0.0, 0.0, 0.5521460917862246, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6214608098422192,0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.6214608098422192, 0.0, 0.0, 0.0, 0.6214608098422192]
classlabels
包含每个向量的 class 标签
, 1 表示讽刺 0 表示不讽刺。索引0的class标签是1,这个1代表finaltfidfVector
中的第一个向量。
train_set的第一项是
({(0.0, 0.0, 1.3803652294655615,.....ect): '0'}, "former versace store clerk sues over secret 'black code' for minority shoppers")
这是一个可复制的玩具示例:
# let's define a train_set
train_set = [
({'adam': 0.05,'is': 0.0, 'a': 0.0, 'good': 0.02, 'man': 0.0}, 1),
({'eve': 0.0, 'is': 0.0, 'a': 0.0,'good': 0.02,'woman': 0.0}, 1),
({'adam': 0.05, 'is': 0.0, 'evil': 0.0}, 0)]
玩具数据集是使用手工制作的 "tfidf" 乐谱字典创建的:
tfidf_dict = {
'adam': 0.05,
'eve': 0.05,
'evil': 0.02,
'kind': 0.02,
'good': 0.02,
'bad': 0.02
}
其中每个已知单词都有一个 tfidf 分数,一个未知单词的分数为 0。而且在 train_set 中,我们对标有 1 ("adam is good") 的句子有正分,负分标记为 0 ("adam is evil").
现在运行一些测试:
import nltk
clf = nltk.NaiveBayesClassifier.train(train_set)
看看这在玩具火车组上是如何工作的:
>>> nltk.classify.accuracy(clf, train_set)
1.0
由于测试集与训练集具有相同的结构,这足以说明如何训练 运行 朴素贝叶斯分类器。