基于朴素贝叶斯算法及案例分析

基于朴素贝叶斯算法及案例分析_第1张图片
基于朴素贝叶斯算法及案例分析_第2张图片
这里是引用

   import pandas as pd
    import numpy as np
    import jieba
    import matplotlib.pyplot as plt
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.naive_bayes import MultinomialNB
    """
    文本评价分类
    """
    #加载数据
    data=pd.read_csv('./data.csv',encoding='gbk')
    # print(data)
    """
                               内容   评价
    0              从编程小白的角度看,入门极佳。  好评
    1            很好的入门书,简洁全面,适合小白。  好评
    2    讲解全面,许多小细节都有顾及,三个小项目受益匪浅。  好评
    3          前半部分讲概念深入浅出,要言不烦,很赞  好评
    4             看了一遍还是不会写,有个概念而已  差评
    5         中规中矩的教科书,零基础的看了依旧看不懂  差评
    6     内容太浅显,个人认为不适合有其它语言编程基础的人  差评
    7                         破书一本  差评
    8   适合完完全全的小白读,有其他语言经验的可以去看别的书  差评
    9                   基础知识写的挺好的!  好评
    10                         太基础  差评
    11          略啰嗦。。适合完全没有编程经验的小白  差评
    12                    真的真的不建议买  差评
    """
    #取出内容列数据进行分析
    content=data['内容 ']#注意有空格
    # print(content)
    """
    0                从编程小白的角度看,入门极佳。
    1              很好的入门书,简洁全面,适合小白。
    2      讲解全面,许多小细节都有顾及,三个小项目受益匪浅。
    3            前半部分讲概念深入浅出,要言不烦,很赞
    4               看了一遍还是不会写,有个概念而已
    5           中规中矩的教科书,零基础的看了依旧看不懂
    6       内容太浅显,个人认为不适合有其它语言编程基础的人
    7                           破书一本
    8     适合完完全全的小白读,有其他语言经验的可以去看别的书
    9                     基础知识写的挺好的!
    10                           太基础
    11            略啰嗦。。适合完全没有编程经验的小白
    12                      真的真的不建议买
    Name: 内容 , dtype: object
    """
    #制定评判标准   1好评  0差评
    plt.rcParams['font.sans-serif']='SimHei'
    # data.loc[data.loc[:,'评价']=='好评','评论标号']=1#好评
    # data.loc[data.loc[:,'评价']=='差评','评论标号']=0#差评
    # pingjia=data['评论标号'].values#获取数据
    pingjia=data['评价'].values#获取数据
    # print(pingjia)
    #['好评' '好评' '好评' '好评' '差评' '差评' '差评' '差评' '差评' '好评' '差评' '差评' '差评']
    #运用停用词对文本进行去重筛选无意义文本文字
    #使用停用词时先对停用词进行去重
    #加载停用词
    stopwords=[]
    with open('./stopwords.txt','r',encoding='utf-8') as f:
        lines=f.readlines()
        # print(lines)
        #['一\n', '一.\n', '一一\n', '一下\n', '一个\n', '一些\n', '一何\n', '一切\n', '一则\n', '一则通过\n', '一天\n',
        for tmp in lines:
            line=tmp.strip()
            stopwords.append(line)
    #对停用词表进行去重
    stopwords=list(set(stopwords))#去重  列表形式
    # print(stopwords)
    #['或则', '一则', '其后', '不怎么', '故而', '该当', '从古至今', '不够', '却不', '从此', '必要', '自己', '而',
    
    #对内容进行处理转化成标准形式(数据)
    comment_list=[]
    for tmp in content:
        # print(tmp)
        #对文本数据进行切割
        seg_list=jieba.cut(tmp,cut_all=False)#cut_all 参数默认为 False,所有使用 cut 方法时默认为精确模式
        # print(seg_list)#
        seg_str=','.join(seg_list)#拼接字符串
        # print(seg_str)
        """
        从,编程,小白,的,角度看,,,入门,极佳,。
    很,好,的,入门,书,,,简洁,全面,,,适合,小白,。
    讲解,全面,,,许多,小,细节,都,有,顾及,,,三个,小,项目,受益匪浅,。
    前半部,分讲,概念,深入浅出,,,要言不烦,,,很赞
    看,了,一遍,还是,不会,写,,,有个,概念,而已
    中规中矩,的,教科书,,,零,基础,的,看,了,依旧,看不懂
    内容,太,浅显,,,个人,认为,不,适合,有,其它,语言,编程,基础,的,人
    破书,一本
    适合,完完全全,的,小白读,,,有,其他,语言,经验,的,可以,去,看,别的,书
    基础知识,写,的,挺,好,的,!
    太,基础
    略,啰嗦,。,。,适合,完全,没有,编程,经验,的,小白
    真的,真的,不,建议,买
    
        """
        comment_list.append(seg_str)#目的是转化成列表形式
    # print(comment_list)
    """
    ['从,编程,小白,的,角度看,,,入门,极佳,。', '很,好,的,入门,书,,,简洁,全面,,,适合,小白,。', '讲解,全面,,,许多,小,细节,都,有,顾及,,
    ,三个,小,项目,受益匪浅,。', '前半部,分讲,概念,深入浅出,,,要言不烦,,,很赞', '看,了,一遍,还是,不会,写,,,有个,概念,而已', '中规中矩,的,教科书,,
    ,零,基础,的,看,了,依旧,看不懂', '内容,太,浅显,,,个人,认为,不,适合,有,其它,语言,编程,基础,的,人', '破书,一本', '适合,完完全全,的,小白读,,,有,其他,语言,经验,的,可以,去,看,别的,书',
     '基础知识,写,的,挺,好,的,!', '太,基础', '略,啰嗦,。,。,适合,完全,没有,编程,经验,的,小白', '真的,真的,不,建议,买']
    """
    #进行统计词个数
    #实例化对象
    con=CountVectorizer(min_df=1,stop_words=stopwords)#CountVectorizer 类会将文本中的词语转换为词频矩阵
    #进行词数统计
    X=con.fit_transform(comment_list)#它通过 fit_transform 函数计算各个词语出现的次数
    name=con.get_feature_names()#通过 get_feature_names()可获取词袋中所有文本的关键字
    # print(X.toarray())#通过 toarray()可看到词频矩阵的结果
    # print(name)
    """
    [[0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0
      0 0 1 0 0 1 0 0 0 0 0 0 0 0]
     [0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1
      0 0 0 0 0 0 0 0 0 0 0 1 0 0]
     [0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
      1 0 0 0 0 0 0 1 1 0 0 0 1 1]
     [0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0
      0 0 0 0 1 0 0 0 0 0 0 0 0 0]
     [0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0
      0 0 0 1 0 0 0 0 0 0 1 0 0 0]
     [0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0]
     [0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
      0 0 1 0 0 0 1 0 0 1 0 1 0 0]
     [1 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 1 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0]
     [0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
      0 1 0 0 0 0 0 0 0 1 0 1 0 0]
     [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 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 0 0 0 0 1 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 0 0 0 0 1 0 0 1 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0
      0 1 1 0 0 0 0 0 0 0 0 1 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 1 0 0 0 0 0 0 0 0 0 2 0 0
      0 0 0 0 0 0 0 0 0 0 0 0 0 0]]
    ['一本', '一遍', '三个', '不会', '个人', '中规中矩', '依旧', '入门', '全面', '其他', '其它', '内容', '分讲', '别的', '前半部', 
    '受益匪浅', '可以', '啰嗦', '基础', '基础知识', '完全', '完完全全', '小白', '小白读', '建议', '很赞', '教科书', '有个', '极佳', 
    '概念', '没有', '浅显', '深入浅出', '看不懂', '真的', '破书', '简洁', '细节', '经验', '编程', '而已', '要言不烦', '角度看', '认为', 
    '讲解', '许多', '语言', '还是', '适合', '项目', '顾及']
    """
    
    #朴素贝叶斯算法预测
    #准备训练集   这里将文本前10行当做训练集  后3行当做测试集
    x_train=X.toarray()[:10,:]
    y_train=pingjia[:10]
    #准备测试集
    x_text=X.toarray()[10:,:]
    y_text=pingjia[10:]
    #构建贝叶斯算法分类器
    mb=MultinomialNB(alpha=1)#alpha 为可选项,默认 1.0,添加拉普拉修/Lidstone 平滑参数
    #训练数据
    mb.fit(x_train,y_train)
    #预测数据
    y_predict=mb.predict(x_text)
    #预测值与真实值展示
    print('预测值:',y_predict)
    print('真实值:',y_text)
    """
    预测值: ['差评' '差评' '差评']
    真实值: ['差评' '差评' '差评']
    """
    """
    分析得出预测值与真实值相等,预测准确
    """

你可能感兴趣的:(基于朴素贝叶斯算法及案例分析)