美文网首页
09-朴素贝叶斯算法

09-朴素贝叶斯算法

作者: jxvl假装 | 来源:发表于2019-10-01 14:48 被阅读0次
    """朴素贝叶斯算法
    划分类别的依据:根据其属于各个类别的概率,找出最大概率即可
    
    概率基础:
        联合概率:包含多个条件,且所有条件同时成立的概率,记做P(A,B) = P(A)P(B)
        条件概率:事件A在另外一个事件B已经发生的条件下发生的概率,记做P(A|B)。特性:P(A1,A2|B) = P(A1|B)P(A2|B)
    
        注意,此时A1与A2应当相互独立(相互独立:特征之间不相互影响)
    
    朴素贝叶斯的使用场景:特征独立
    
    拉普拉斯平滑:
        𝑃(𝐹1│𝐶)=(𝑁𝑖+𝛼)/(𝑁+𝛼𝑚)
        𝛼为指定的系数一般为1,m为训练文档中统计出的特征词个数
        从而避免某个特征词没有出现而导致计算结果概率为0的情况
    
    api:sklearn.naive_bayes
        sklearn.naive_bayes.MultinomialNB(alpha = 1.0)  素贝叶斯分类
    
        alpha:拉普拉斯平滑系数。这里的alpha不算是超参数,这个参数对结果不会有影响
    
    朴素贝叶斯进行文本分类的时候,受训练集影响非常大,如果训练集误差大,结果肯定不好。且不需要调参
    
    总结:
        优点:
            有稳定的分类效率
            对缺失数据不太敏感,算法简单,常用于文本分类
            分类准确度高,速度快
        缺点:
            由于使用了样本属性独立性的假设,所以如果样本属性有关联时效果不好
            在训练集中进行统计词这些工作,会对结果造成干扰
    
    """
    
    from sklearn.datasets import fetch_20newsgroups
    from sklearn.model_selection import train_test_split
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.naive_bayes import MultinomialNB
    def naivebayes():
        """
        朴素贝叶斯
        :return: None
        """
        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) #以训练集中的词的列表进行每篇文档重要性统计
        x_test = tf.transform(x_test)
        print(tf.get_feature_names())
    
        #进行朴素贝叶斯算法的预测
        mlt = MultinomialNB(alpha=1.0)
        print(x_train)
        mlt.fit(x_train, y_train)
        y_predict = mlt.predict(x_test)
        print("预测的文章类别为:", y_predict)
        print(y_predict.max())
        #得出准确率
        print("准确率为:", mlt.score(x_test, y_test))
        return None
    
    if __name__ == "__main__":
        naivebayes()
    

    相关文章

      网友评论

          本文标题:09-朴素贝叶斯算法

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