美文网首页
朴素贝叶斯,中文文档分类

朴素贝叶斯,中文文档分类

作者: 疯狂的小强_94ee | 来源:发表于2019-04-14 22:55 被阅读0次

    1 朴素贝叶斯实现步骤参考

     地址: https://github.com/gzhold/DataAnalysis/tree/master/sklearn/data/nativeBayes/

    文件:朴素贝叶斯分类.pdf

    2 分档分类实现demo

    数据 : https://github.com/gzhold/DataAnalysis/tree/master/sklearn/data/textClassification

    数据说明: 文档共有 4 种类型:女性、体育、文学、校园

    使用朴素贝叶斯分类对训练集进行训练,并对测试集进行验证,并给出测试集的准确率。

    #!/usr/bin/env python

    # -*- coding:utf8 -*-

    import os

    from sklearn.feature_extraction.textimport TfidfVectorizer

    from sklearnimport metrics

    import jieba

    # 加载数据

    def load_data(base_path):

    """

        :parambase_path: 基础路径

        :return: 分词列表,标签列表

    """

        documents = []

    labels = []

    # 循环所有文件并进行分词打标

        for root, dirs, filesin os.walk(base_path):

    for filein files:

    label = root.split('/')[-1]

    filename = os.path.join(root, file)

    # 因为字符集问题因此直接用二进制方式读取

                with open(filename, 'rb')as f:

    content = f.read()

    word_list =list(jieba.cut(content))

    words = [wlfor wlin word_listif wlnot in stop_words]

    documents.append(' '.join(words))

    labels.append(labelMap[label]);

    return documents, labels

    labelMap = {'体育':0, '女性':1, '文学':2, '校园':3}

    #加载停用词

    stop_words = [line.strip()for linein open('./../data/nativeBayes/stopword.txt').readlines()]

    # 训练集

    train_contents, train_labels = load_data('./../data/textClassification/train')

    #计算单词的权重

    tfidf_vec = TfidfVectorizer(stop_words=stop_words, max_df=0.5)

    train_features = tfidf_vec.fit_transform(train_contents)

    #print('每个单词的 ID:', tfidf_vec.vocabulary_)

    #print('每个单词的 tfidf 值:', train_features.toarray())

    # 多项式贝叶斯分类器

    from sklearn.naive_bayesimport MultinomialNB

    clf = MultinomialNB(alpha=0.001).fit(train_features, train_labels)

    #测试集

    test_contents, test_labels = load_data('./../data/textClassification/test');

    # vocabulary 词汇表:字典型

    # max_df 参数用来描述单词在文档中的最高出现率。

    # 假设 max_df=0.5,代表一个单词在 50% 的文档中都出现过了,那么它只携带了非常少的信息,因此就不作为分词统计(一般很少设置 min_df,因为 min_df 通常都会很小)。

    test_tf = TfidfVectorizer(stop_words=stop_words, max_df=0.5, vocabulary=tfidf_vec.vocabulary_)

    # 用 fit_transform 方法进行拟合,得到 TF--IDF 特征空间 features,你可以理解为选出来的分词就是特征

    test_features = test_tf.fit_transform(test_contents)

    # 预测得到分类结果(predict 函数做的工作就是求解所有后验概率并找出最大的那个)

    predicted_labels = clf.predict(test_features)

    #计算准确率实际上是对分类模型的评估。accuracy_score 函数方便我们对实际结果和预测的结果做对比,给出模型的准确率。

    print(metrics.accuracy_score(test_labels, predicted_labels))

    相关文章

      网友评论

          本文标题:朴素贝叶斯,中文文档分类

          本文链接:https://www.haomeiwen.com/subject/ezuewqtx.html