机器学习之分类算法-朴素贝叶斯(2.2)

   朴素?
          假设:特征与特征之间是相互独立

   贝叶斯公式(变式如下):

         P(B|A)=P(A|B)*P(B)/P(A)

   应用场景
           文本分类
            单词作为特征

   拉普拉斯平滑系数:

        目的:防止计算出的分类概率为0  

       计算出现  影院,支付宝,云计算 属于娱乐的概率?(未算分母P(A))

        

   P(娱乐|影院,支付宝,云计算) =P(影院,支付宝,云计算|娱乐)P(娱乐) =P(影院|娱乐)*P(支付宝|娱乐)*P(云计算|娱乐)P(娱乐)=(56+1/121+4)(15+1/121+4)(0+1/121+1*4)(60/90) = 0.00002



流程:

             1)获取数据
             2)划分数据集
             3)特征工程
                    文本特征抽取
             4)朴素贝叶斯预估器流程
             5)模型评估

   

    优点:
              对缺失数据不太敏感,算法也比较简单,常用于文本分类。
             分类准确度高,速度快
    缺点:
              由于使用了样本属性独立性的假设,所以如果特征属性有关联时其效果不好

 案例:
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB


def nb_news():
    """
    用朴素贝叶斯算法对新闻进行分类
    :return:
    """
    # 1)获取数据
    news = fetch_20newsgroups(subset="all")

    # 2)划分数据集
    x_train, x_test, y_train, y_test = train_test_split(news.data, news.target)

    # 3)特征工程:文本特征抽取-tfidf
    transfer = TfidfVectorizer()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)

    # 4)朴素贝叶斯算法预估器流程
    estimator = MultinomialNB()
    estimator.fit(x_train, y_train)

    # 5)模型评估
    # 方法1:直接比对真实值和预测值
    y_predict = estimator.predict(x_test)
    print("y_predict:\n", y_predict)
    print("直接比对真实值和预测值:\n", y_test == y_predict)

    # 方法2:计算准确率
    score = estimator.score(x_test, y_test)
    print("准确率为:\n", score)

    return None

 



posted @ 2021-05-26 11:31  纵横捭阖行  阅读(52)  评论(0编辑  收藏  举报