美文网首页
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