文本分类(机器学习方法)

文本分类实现步骤:
  1. 定义阶段:定义数据以及分类体系,具体分为哪些类别,需要哪些数据
  2. 数据预处理:对文档做分词、去停用词等准备工作
  3. 数据提取特征:对文档矩阵进行降维、提取训练集中最有用的特征
  4. 模型训练阶段:选择具体的分类模型以及算法,训练出文本分类器
  5. 评测阶段:在测试集上测试并评价分类器的性能
  6. 应用阶段:应用性能最高的分类模型对待分类文档进行分类
特征提取的几种经典方法:
  • Bag-of-words:最原始的特征集,一个单词/分词就是一个特征。往往会导致一个数据集有上万个特征,有一些的简单指标可以筛选掉一些对分类没帮助的词语,如去停用词、计算互信息熵等。但总的来说,特征维度都很大,每个特征的信息量太小
  • 统计特征:TF-IDF方法。主要是用词汇的统计特征来作为特征集,每个特征都有其物理意义,看起来会比 bag-of-word 好,实际效果差不多
  • N-gram:一种考虑词汇顺序的模型,也就是 N 阶 Markov 链,每个样本转移成转移概率矩阵,有不错的效果
分类器方法:
  • 朴素贝叶斯(Naive Bayesian, NB)

    对于给定的训练集,首先基于特征条件独立学习输入、输出的联合概率分布 P(X, Y),然后基于此模型,对给定的输入 x ,利用贝叶斯定理求出后验概率最大的输出 y

    假设P(X, Y)独立分布,通过训练集合学习联合概率分布 P(X, Y)

    \[P(X,Y)=P(Y|X)·P(X)=P(X|Y)·P(Y) \]

    根据上面的等式可得贝叶斯理论的一般形式

    \[P(Y=c_k|X=x)=\frac{P(X=x|y=c_k)·P(Y=c_k)}{\sum_k{P(X=x|Y=c_k)·P(Y=c_k)}} \]

    分母是根据全概率公式得到

    因此,朴素贝叶斯可以表示为:

    \[y=f(x)=argmax_{c_k}\frac{P(Y=c_k)\prod_{j}{P(X^{(j)}=x^{(j)}|Y=c_k)}}{\sum_{k}{P(Y=c_k)\prod_{j}P(X^{(j)}=x^{(j)}|Y=c_k)}} \]

    为了简化计算,可以将相同的分母去掉

    优点:实现简单,学习与预测的效率都很高

    缺点:分类的性能不一定很高

  • 逻辑回归(Logistic Regression, lR)

    一种对数线性模型,它的输出是一个概率,而不是一个确切的类别

    逻辑斯蒂函数:

    \[h_\theta(x)=\frac{1}{1+e^{-\theta Tx}},P(Y=1|X;\theta)=h_{\theta}(x),P(Y=0|x;\theta)=1-h_{\theta}(x) \]

    图像:

    对于给定数据集,应用极大似然估计方法估计模型参数

    \[l(\theta)=logL(\theta)=\sum_{i=1}^{N}y^{(i)}logh(x^{i})+(1-y^{i})log(1-h(x^{i})) \]

    优点:实现简单、分类时计算量小、速度快、存储资源低等

    缺点:容易欠拟合、准确率不高等

  • 支持向量机(Support Vector Machine, SVM)

    在特征空间中寻找到一个尽可能将两个数据集合分开的超平面(hyper-plane)

    对于线性不可分的问题,需要引入核函数,将问题转换到高维空间中

    优点:可用于线性/非线性分类,也可以用于回归;低泛化误差;容易解释;计算复杂度低;推导过程优美

    缺点:对参数和核函数的选择敏感

中文垃圾邮件分类实战

数据集分为:ham_data.txt 和 Spam.data.txt , 对应为 正常邮件和垃圾邮件

其中每行代表着一个邮件

主要过程为:

  1. 数据提取
  2. 对数据进行归整化和预处理
  3. 提取特征(tfidf 和 词袋模型)
  4. 训练分类器
    • 基于词袋模型的多项式朴素贝叶斯
    • 基于词袋模型的逻辑回归
    • 基于词袋模型的支持向量机
    • 基于 tfidf 的多项式朴素贝叶斯
    • 基于 tfidf 的逻辑回归
    • 基于 tfidf 的支持向量机
  5. 用 准确率(Precision)、召回率(Recall)、F1测度 来评价模型

代码放在 GitHub 上了

https://github.com/CuveeFer/my-nlp

结果:

猜你喜欢

转载自www.cnblogs.com/alivinfer/p/12892147.html