机器学习-朴素贝叶斯示例

朴素贝叶斯方法是基于贝叶斯定理的一组有监督学习算法,即简单的假设每对特征之间相互独立。

贝叶斯公式:

P(y \mid x_1, \dots, x_n) = \frac{P(y) P(x_1, \dots x_n \mid y)}                                  {P(x_1, \dots, x_n)}

下面这个例子就是使用朴素贝叶斯,根据关键词对文章进行分类。

示例:

from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB


def article_category():
    """
    http://sklearn.apachecn.org/cn/0.19.0/modules/naive_bayes.html
    朴素贝叶斯,根据关键词对文章内容进行分类
    20newsgroups中的数据形式:
    ['文章1','文章2',.....,'文章n']
    整体是一个数组,文章n代表一段文字
    :return:
    """
    #加载20newsgroups数据源,里面主要是英文报刊杂志的文章整理
    #categories指明要加载的文章类别,sunset指明要加载训练集
    categories = ['alt.atheism','soc.religion.christian','comp.graphics','sci.med']
    twenty_train = fetch_20newsgroups(subset='train',categories=categories)

    #计算所有文章的TFIDF
    tfidf_transformer = TfidfVectorizer()
    print(twenty_train.data)


    X_train_tfidf = tfidf_transformer.fit_transform(twenty_train.data)
    # print(X_train_tfidf)

    # 构建多项式朴素贝叶斯模型
    #创建对象 alpha:平滑参数
    clf = MultinomialNB(alpha=1.0)
    #训练
    clf.fit(X_train_tfidf,twenty_train.target)

    #需要判断类别的两篇文章
    docs_new = ['Chemical reaction','Intel CPU is good']
    #将要判断的文章向量化
    X_new_tfidf = tfidf_transformer.transform(docs_new)
    #进行预测
    predicted = clf.predict(X_new_tfidf)
    #zip 将数组a[1,2,3] b['a','b','c']变为[(1,'a'),(2,'b'),(3,'c')]
    for doc,category in zip(docs_new,predicted):
        print('%r => %s'%(doc,twenty_train.target_names[category]))
if __name__ == '__main__':
    article_category()

猜你喜欢

转载自blog.csdn.net/j123__/article/details/82956008