GaussianNB,SVM,LDA文本分类

1. 朴素贝叶斯的原理

   什么是朴素贝叶斯:贝叶斯分类是一类分类算法的总称,这类算法均以贝叶斯定理为基础,故统称为贝叶斯分类。而朴素朴素贝叶斯分类是贝叶斯分类中最简单,也是常见的一种分类方法。

贝叶斯公式:
P(Y|X)=P(X|Y)P(Y)P(X)
P(Y|X)=P(X|Y)P(Y)P(X)

X:特征向量 Y:类别
先验概率P(X)P(X):先验概率:是指根据以往经验和分析得到的概率。 
后验概率P(Y|X)P(Y|X):事情已经发生,要求这件事情发生的原因是由某个因素引起的可能性的大小。 
类条件概率P(X|Y)P(X|Y):在已知某类别的特征空间中,出现特征值X的概率密度。

朴素:朴素贝叶斯算法是假设各个特征之间相互独立,也是朴素这词的意思。那么贝叶斯公式中P(X|Y)P(X|Y)可写成 
P(X|Y)=P(x1|Y)P(x2|Y)⋯P(xn|Y)
P(X|Y)=P(x1|Y)P(x2|Y)⋯P(xn|Y)

朴素贝叶斯公式: 
P(Y|X)=P(x1|Y)P(x2|Y)⋯P(xn|Y)P(Y)P(X)
 

2. 利用朴素贝叶斯模型进行文本分类

from sklearn import metrics
from sklearn.naive_bayes import GaussianNB
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import MinMaxScaler

# 读取数据
X = []
Y = []
fr = open("datingTestSet.txt")
index = 0
for line in fr.readlines():
    line = line.strip()
    line = line.split('\t')
    X.append(line[:3])
    Y.append(line[-1])

#归一化
scaler = MinMaxScaler()
X = scaler.fit_transform(X)

# 交叉分类
train_X,test_X, train_y, test_y = train_test_split(X,
                                                   Y,
                                                   test_size=0.2) # test_size:测试集比例20%

扫描二维码关注公众号,回复: 5560370 查看本文章

# KNN模型,选择3个邻居
model = GaussianNB()

model.fit(train_X, train_y)
print(model)

expected = test_y
predicted = model.predict(test_X)
print(metrics.classification_report(expected, predicted))       # 输出分类信息
label = list(set(Y))    # 去重复,得到标签类别
print(metrics.confusion_matrix(expected, predicted, labels=label))  # 输出混淆矩阵信息
 

3. SVM的原理

SVM的全称是Support Vector Machine,即支持向量机,主要用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。

4. 利用SVM模型进行文本分类

import numpy as np from sklearn.svm

import SVC from sklearn.cross_validation

import train_test_split from sklearn.metrics import classification_report

with open("test.txt","r") as file:
    ty=-3 #代表取哪一列label值,-1代表取倒一列所有值
    result=[]
    for line in file.readlines():
        result.append(list(map(str,line.strip().split(','))))

    vec = np.array(result)
    x = vec[:,:-3]#取除掉最后三列以外的所有列,即所有特征列
    y = vec[:,ty]#标签列

train_x,test_x,train_y,test_y = train_test_split(x,y,test_size=0.2)

clf = SVC(kernel='linear',C=0.4)
    clf.fit(train_x,train_y)
    
    pred_y = clf.predict(test_x)
    print(classification_report(test_y,pred_y))

5. pLSA、共轭先验分布;LDA主题模型原理

  LDA模型。其实就是给PLSA主题模型加了贝叶斯先验。

6. 使用LDA生成主题特征,在之前特征的基础上加入主题特征进行文本分类

  这块请参考: https://blog.csdn.net/TiffanyRabbit/article/details/76445909

猜你喜欢

转载自blog.csdn.net/cs123456789dn/article/details/88371894