zoukankan      html  css  js  c++  java
  • 朴素贝叶斯算法(python)

    朴素贝叶斯算法

    优点

    • 算法原理和实现简单,常用于文本分类。
    • 对小规模数据表现很好,适合多分类增量式训练任务。
    • 对缺失数据不太敏感。

    缺点

    • 对输入数据的表达形式很敏感
    • 需要计算先验概率,分类决策存在错误率
    • 要求样本之间相互独立,这就是“朴素”的意思,这个限制有时很难做到,或使用者误以为符合而造成错误的结果

    适用数据类型:离散型数据。

    朴素贝叶斯假设:数据集属性之间是相互独立的,即独立同分布。

    朴素贝叶斯的思想基础是这样的

    对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。

    朴素贝叶斯共有三种模型,他们的区别在于计算条件概率的公式不同:
    • 高斯朴素贝叶斯 – 用于符合高斯分布(正态分布)的连续样本数据的分类
    • 多项式朴素贝叶斯 – 我们已经介绍的内容就是多项式朴素贝叶斯模型
    • 伯努利朴素贝叶斯 – 每个特征的取值为0或1,即计算特征是否存在的概率,他是唯一将样本中不存在的特征也引入计算概率的朴素贝叶斯模型

      这三个类适用的分类场景各不相同,一般来说,如果样本特征的分布大部分是连续值,使用GaussianNB会比较好。如果如果样本特征的分大部分是多元离散值,使用MultinomialNB比较合适。而如果样本特征是二元离散值或者很稀疏的多元离散值,应该使用BernoulliNB。

    使用 sklearn 实现朴素贝叶斯算法

    sklearn 提供了朴素贝叶斯算法的实现类,用于多项模型

    sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
    下面的列表中,我们将分类数称为 nc,将特征数称为 nf。

     构造参数
    sklearn.naive_bayes.MultinomialNB 类构造参数
     

     类方法

    fit(X, y[, sample_weight]) – 训练朴素贝叶斯模型
    get_params([deep]) – 获取参数
    set_params(**params) – 设置参数
    partial_fit(X, y[, classes, sample_weight]) – 部分样本上的增量拟合
    predict(X) – 预测
    predict_log_proba(X) – 返回测试向量X的对数概率估计
    predict_proba(X) – 返回测试向量X的概率估计
    score(X, y[, sample_weight]) – 返回模型的平均精度
     
     
     
    #coding=utf-8
    import pandas as pd
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn.feature_extraction.text import TfidfVectorizer
    from sklearn.naive_bayes import MultinomialNB
    
    #原始数据
    news = datasets.fetch_20newsgroups()
    X = news.data
    y = news.target
    print(X[:1])
    print(y[:5])
    print('………………')
    
    X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.25)
    #使用tf
    tf = TfidfVectorizer()
    X_train =tf.fit_transform(X_train)
    X_test = tf.transform(X_test)
    
    print(X_train[0:5])
    print(tf.get_feature_names()[8000:8020])#打印部分分词特征名
    
    #构建朴素贝叶斯模型
    mlt = MultinomialNB(alpha=1.0)#alpha拉普拉斯平滑系数,防止概率为0出现
    mlt.fit(X_train,y_train)
    
    #结果预测与评分
    y_predict = mlt.predict(X_test)
    print("预测结果:",y_predict[0:10])
    print("实际结果:",y_test[0:10])
    
    #评分
    print("准确度:",mlt.score(X_test,y_test))
     
     
     
     
     
     
     
     
     
     
     

    原文链接:https://blog.csdn.net/DILIGENT203/article/details/83934809
  • 相关阅读:
    springcloud
    redis实现Session
    深入理解Dip Ioc Di以及Ioc容器
    SQL Server 索引维护 索引碎片 填充因子
    SQL Server 非聚集索引的覆盖,连接交叉和过滤
    SQL Server 索引 聚集索引、非聚集索引、堆
    T-SQL存储过程
    T-SQl 批处理
    T-SQl 游标
    T-SQL 控制流语句
  • 原文地址:https://www.cnblogs.com/xiao02fang/p/12712008.html
Copyright © 2011-2022 走看看