使用TF_IDF提取特征后如何使用朴素贝叶斯分类器

时间:2019-06-10 00:43:27

标签: python classification nltk sentiment-analysis naivebayes

我正在尝试使用朴素贝叶斯分类器对特征进行分类,我使用TF_IDF进行特征提取。

$ sudo apt-get install php7.3-intl $ sudo /etc/init.d/php7.3-fpm restart 是一个向量列表,每个向量表示数字列表,finaltfidfVector(如果找不到该单词),否则找到该单词的权重。

0包含每个向量的所有类标签。我正在尝试使用此代码对其进行分类,但是它不起作用。

数据集的26652行

classlabels

输出:

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))

已使用的TF_IDF的 引用,已应用于0.0 https://triton.ml/blog/tf-idf-from-scratch?fbclid=IwAR3UlCToGYFEQSmugXo3M5Q9fcld79JfXSfBaDG7wKv5a49O0ZDEft9DFNg。 数据集

this is sample about the used data set before preprocessing and TF_IDF

这是finaltfidfVector列表中第一个索引为零的向量的示例

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] 包含每个向量的类标签 ,1表示讽刺,0表示不嘲讽。索引0的类标签为1,对于classlabels中的第一个向量,此标签为1。

培训集的第一项是

finaltfidfVector

1 个答案:

答案 0 :(得分:0)

这是一个可复制的玩具示例:

# 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”)。是邪恶的”)。

现在运行一些测试:

import nltk
clf = nltk.NaiveBayesClassifier.train(train_set)

看看这在玩具火车上如何工作:

>>> nltk.classify.accuracy(clf, train_set)
1.0

由于测试集与训练集具有相同的结构,因此足以说明如何训练和运行朴素贝叶斯分类器。