zoukankan      html  css  js  c++  java
  • 机器学习朴素贝叶斯 SVC对新闻文本进行分类

    朴素贝叶斯分类器模型(Naive Bayles)

    Model basic introduction:

       朴素贝叶斯分类器是通过数学家贝叶斯的贝叶斯理论构造的,下面先简单介绍贝叶斯的几个公式:

    先验概率: P(X) or P(Y)

    条件概率: P(X|Y)=P(XY)P(Y)  => P(XY)=P(X|Y)*P(Y)   ①

    后验概率: P(Y|X)=P(YX)P(X)  结合①式可以推导=> P(Y|X)=P(X|Y)*P(Y)P(X)

    朴素贝叶斯分类器:它可以计算数据的每一个维度 被分到某一个类的概率。倘若一个数据有n个维度的特征,用X={x1,x2,x3,x4,x5,….,xn}来表示,类别有K个,用Y={y1,y2,y3,y4,y5,…,yk}来表示。那么X被分到i类的概率就可以用一个公式来表示:

           P(Y=y(i) | X) = P(X | Y=y(i) ) *P( Y=y(i) ) P(X)

    朴素贝叶斯的目的就是找到向量X属于最大概率的类别,所以 argmax P(Y|X)=argmaxP(x1,x2,x3,x4…|Y)*P(Y)   因为朴素贝叶斯的每个特征假设都是独立的,所以将每个特征进行单独计算。

    利用SVC分类器对文本进行分类:

    对文本单词进行统计,统计出所有单词(去除重复的),然后将这些单词作为特征向量,将行数作为维度。

    ①   :分割数据集

    ②   :使用特征向量化库对文本进行 特征向量转化(将文本转化成多维度的特征向量)

    ③   :初始化SVC模型,用分割好的训练数据,训练模型,使模型get到参数

    ④   :用训练好的模型,预测X_test

    ⑤   :用svc自带的评估来评估模型,用classification_report对预测结果(分类器性能)评估

    from sklearn.datasets import fetch_20newsgroups
    news = fetch_20newsgroups(subset='all')
    
    from string import punctuation
    table = str.maketrans(' ',' ',punctuation)
    st = [w.translate(table) for w in news.data]
    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test = train_test_split(news.data,news.target,test_size=0.25,random_state=33,stratify=news.target)
    from sklearn.feature_extraction.text import CountVectorizer
    from sklearn.feature_extraction.text import TfidfVectorizer,TfidfTransformer
    from sklearn.metrics import classification_report
    
    #运用tfidf来特征向量化
    tfidf_filter_vec=TfidfVectorizer(max_df=0.045,binary=True,stop_words='english',ngram_range=(1,2),smooth_idf=True,sublinear_tf=True)
    X_tfidf_filter_train = tfidf_filter_vec.fit_transform(X_train)
    X_tfidf_filter_test = tfidf_filter_vec.transform(X_test)
    
    #svc
    from sklearn.svm import LinearSVC
    svc=LinearSVC()
    svc.fit(X_tfidf_filter_train,y_train)
    svc_pred = svc.predict(X_tfidf_filter_test)
    print('svc',svc.score(X_tfidf_filter_test,y_test))

    SVC评估结果为: 0.941213921901528

      

  • 相关阅读:
    webDriver检索table数据
    C# 遍历枚举
    Java——Iterate through a HashMap
    Java——Read/convert an InputStream to a String
    简单的异步HTTP服务端和客户端
    授信主体查找
    mysql 事务测试
    mysql 替换
    如何查看由EF生成的SQL?
    C# 如何用多字符分割字符串
  • 原文地址:https://www.cnblogs.com/szj666/p/11775668.html
Copyright © 2011-2022 走看看