• 机器学习之贝叶斯算法


    # coding = utf-8
    from sklearn.naive_bayes import MultinomialNB
    from sklearn.datasets import load_iris, fetch_20newsgroups, load_boston
    from sklearn.model_selection import train_test_split, GridSearchCV
    from sklearn.neighbors import KNeighborsClassifier
    from sklearn.preprocessing import StandardScaler
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.naive_bayes import MultinomialNB
    from sklearn.metrics import classification_report
    from sklearn.feature_extraction import DictVectorizer
    from sklearn.tree import DecisionTreeClassifier, export_graphviz
    from sklearn.ensemble import RandomForestClassifier
    import pandas as pd
    
    '''
    特征之间相互独立
    联合概率:P(A,B) = P(A)*P(B)  关键字“且”
    条件概率:就是事件A在另一个时间B已经发生的条件下发送的概率 记,P(A|B)
        特性:P(A1,A2|B) = P(A1|B)*P(A2|B) ,A1,A2必须相互独立
    
    朴素贝叶斯:P(C|W) = ( P(W|C)*P(C) )/ P(W),C为文档类别,W为给定文档特征值
    
    
    解决计算结果为0:
        拉普拉斯平滑:拉普拉斯平滑系数
        P(F1|C) = (Ni+a) / (N+am) ,其中a为指定的系数,一般为1;m为训练文档中统计的特征词个数
    
    
    API:sklearn.naive_bayes import MultinomialNB(a=1.0)
    
    
    朴素贝叶斯:
        优势:理论基础;对缺失数据不敏感;分类准确率高,速度快
        影响因素:数据中特征词的选择是否合理
        参数:没有超参可以调
        场景:文本分类
    '''
    
    
    def naviebyte():
        """
        朴素贝叶斯
        :return:
        """
        #数据抽取
        news = fetch_20newsgroups(subset='all')
    
    
        #数据分割
        x_train,x_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25);
    
        #对数据集进行特征抽取
        tf = TfidfVectorizer()
    
        #以训练集当中的词列表进行每篇文章重要性统计
        x_train = tf.fit_transform(x_train)
    
        print(tf.get_feature_names())
    
        x_test = tf.transform(x_test)
    
    
        #贝叶斯实例化
        mlt = MultinomialNB(alpha=1.0)
        print(x_train.toarray())
        #训练
        mlt.fit(x_train,y_train)
        #预测
        y_predict = mlt.predict(x_test)
        print("预测的文章类别为:",y_predict)
        #准确率
        print("准确率为:",mlt.score(x_test,y_test))
    
        return  None
    
    
    if __name__ == '__main__':
        naviebyte()

    计算方法:

      

  • 相关阅读:
    BZOJ 3531[Sdoi2014]旅行
    BZOJ4998 星球联盟
    BZOJ2959 长跑
    【北京集训D2T3】tvt
    [Bzoj]5343: [Ctsc2018]混合果汁
    HGOI20190810 省常中互测3
    HGOI20190809 省常中互测2
    HGOI20190808 省常中互测1
    组合排列和组合数 学习笔记
    2-SAT (two-statisfiability) 算法 学习笔记
  • 原文地址:https://www.cnblogs.com/ywjfx/p/10883800.html
Copyright © 2020-2023  润新知