如何用机器学习对文本分类

需求

使用监督学习对历史数据训练生成模型,用于预测文本的类别。

样本清洗

主要将重复的数据删除掉,将错误无效的数据纠正或删除,并检查数据的一致性等。比如我认为长度小于少于13的数据是无效的遂将之删掉。

def writeFile(text):
   file_object = open(‘result.txt‘,‘w‘)
   file_object.write(text)
   file_object.close()

def clear():
   text = ""
   file_obj = open("deal.txt")
   list_of_lines = file_obj.readlines()
   for line in list_of_lines:
     if(len(line)>13):
       text += line
   writeFile(text)
   file_obj.close()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

定好类别集合

按照样本集人工做好分类,比如分为以下几类:

编号 类别
1 环保
2 交通
3 手机
4 法律
5 汽车

分类词库

特征提取涉及到文本分词,由搜狗http://pinyin.sogou.com/dict/可以搜索各种类别的词汇,自己下载下来再整理,它的格式为scel,可以使用深蓝词汇转换工具转成txt方便使用。

常用算法

  • 朴素贝叶斯
  • Rocchio
  • SVM
  • KNN
  • 决策树
  • 神经网络

这里选择用SVM,SVM本质上其实也就是一种特殊的两层神经网络,具有高效的学习算法

特征集

使用SVM分类时其中一项重要的工作就是要确定特征集,只有特征集确定好了才能往下计算,那么怎么确定特征集呢?一般的做法可以是将所有样本的词都提取出来作为特征集。比如我们有两个文本

“小学生上学”和“股票大跌”,那特征集就是{“小学生”,”上学”,”股票”,”大跌”}。

特征权重

特征集确定就可以看成是向量的维数,而对于每个样本来说就需要确定每个维度的值了,这个值可以看成是特征的权重,常常用TF-IDF作为值。TF-IDF又是什么?简单来说TF就是某文档中某个term出现的次数,而IDF即逆文档频率,可由下面公式计算:

IDF=log(Tt)

其中,T为统计样本中总文档数,t为包含某term的文档数。

TF和IDF的相乘则为特征权重。

特征降维

当统计样本越来越多且每个样本都比较大时,这时可能会导致特征维度特别大。所以可能会要对特征集进行降维处理。特征降维其实就是将一些几乎没影响的维度去掉,以避免维度灾难。有比较多处理方式:比如可以直接定义一个无意义词库将一些没意义的单词去掉、或以词频作为依据选择出代表性的单词、或以其他算法提取出若干热词作为代表性单词、或用经典的卡方校验算法选择代表性单词,以上方式都可以达到降维效果。

代码

机器学习库很多,可以选一个自己比较熟悉的且叫有名的库来实现,关键的代码如下:

double[][] samples = 所有样本特征集及权重数组
int labelInt[] = 分类标签数组
SVM<double[]> svm =
        new SVM<double[]>(new LinearKernel(), 1.0, 12, SVM.Multiclass.ONE_VS_ALL);
svm.learn(samples, labels);
svm.finish();

double[] test = 测试数据的特征集及权重数组
svm.predict(x)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

参数

SVM参数需要选择的主要有两个:核函数和惩罚因子。主要的核函数包括RBF核、线性核、多项式核和Sigmoid核,文本分类中一般可选线性核。惩罚因子用来惩罚分错的样本,惩罚因子越大说明越重视损失,不断增大它最终总能让所有样本都正确分类,但这可能会存在过拟合,影响后面的泛化能力。

====广告时间,可直接跳过====

时间: 2024-10-22 12:54:14

如何用机器学习对文本分类的相关文章

文本分类,数据挖掘和机器学习

转自:http://blog.chinaunix.net/uid-446337-id-94440.html 分类: 机器学习的有概率分类器(probabilistic) ,贝叶斯推理网络(bayesian inference networks) , 决策树分类器(decision tree) ,决策规则分类器(decision rule) ,基于回归的线性最小二乘llsf(regression based on linearleast squares fit ) , 符号规则归纳法( symbo

谷歌做了45万次不同类型的文本分类后,总结出一个通用的“模型选择算法”...

谷歌做了45万次不同类型的文本分类后,总结出一个通用的"模型选择算法"... 2018年07月25日 17:43:55 阅读数:6 新智元报道 来源:developers.google.com 编译:肖琴.大明 [导读]谷歌官方推出"文本分类"指南教程.为了最大限度地简化选择文本分类模型的过程,谷歌在进行大约450K的文本分类实验后,总结出一个通用的"模型选择算法",并附上一个完整的流程图,非常实用. 文本分类(Text classificati

机器学习经典算法详解及Python实现---朴素贝叶斯分类及其在文本分类、垃圾邮件检测中的应用

摘要: 朴素贝叶斯分类是贝叶斯分类器的一种,贝叶斯分类算法是统计学的一种分类方法,利用概率统计知识进行分类,其分类原理就是利用贝叶斯公式根据某对象的先验概率计算出其后验概率(即该对象属于某一类的概率),然后选择具有最大后验概率的类作为该对象所属的类.总的来说:当样本特征个数较多或者特征之间相关性较大时,朴素贝叶斯分类效率比不上决策树模型:当各特征相关性较小时,朴素贝叶斯分类性能最为良好.另外朴素贝叶斯的计算过程类条件概率等计算彼此是独立的,因此特别适于分布式计算.本文详述了朴素贝叶斯分类的统计学

机器学习的大局观:使用神经网络和TensorFlow来对文本分类

https://medium.freecodecamp.com/big-picture-machine-learning-classifying-text-with-neural-networks-and-tensorflow-d94036ac2274 机器学习的开发人员常常说,如果你想学习机器学习,必须先学习算法是怎么样工作的原理,但是我的经验告诉我,不是这样的. 我说,你应该首先能够看到大局:机器学习的应用程序是怎么样工作的.一旦你理解它,你就可以轻松地深入学习和体会到机器学习算法的工作原理

《机器学习系统设计》之应用scikit-learn做文本分类(下)

前言: 本系列是在作者学习<机器学习系统设计>([美] WilliRichert)过程中的思考与实践,全书通过Python从数据处理,到特征工程,再到模型选择,把机器学习解决问题的过程一一呈现.书中设计的源代码和数据集已上传到我的资源:http://download.csdn.net/detail/solomon1558/8971649 第3章通过词袋模型+K均值聚类实现相关文本的匹配.本文主要讲解K-均值聚类相关知识以及在20newsgroup数据集上使用K-均值聚类进行测试.     相关

文本分类——机器学习常用工具

文本分类现已比较成熟,各类开源工具不少,现推荐几个比较常用简单的工具: 1.scikit-learn:http://scikit-learn.org/stable/index.html python编写调用,里面有各种分类算法svm.随机森林.贝叶斯等,和特征提取,如字.ngram等,几行代码便可以构建一个分类任务. 2.WEKA:http://www.cs.waikato.ac.nz/ml/index.html 具有图形界面,但是感觉速度有点慢 3.libsvm :http://www.csi

机器学习基础——带你实战朴素贝叶斯模型文本分类

本文始发于个人公众号:TechFlow 上一篇文章当中我们介绍了朴素贝叶斯模型的基本原理. 朴素贝叶斯的核心本质是假设样本当中的变量服从某个分布,从而利用条件概率计算出样本属于某个类别的概率.一般来说一个样本往往会含有许多特征,这些特征之间很有可能是有相关性的.为了简化模型,朴素贝叶斯模型假设这些变量是独立的.这样我们就可以很简单地计算出样本的概率. 想要回顾其中细节的同学,可以点击链接回到之前的文章: 机器学习基础--让你一文学会朴素贝叶斯模型 在我们学习算法的过程中,如果只看模型的原理以及理

Spark ML下实现的多分类adaboost+naivebayes算法在文本分类上的应用

1. Naive Bayes算法 朴素贝叶斯算法算是生成模型中一个最经典的分类算法之一了,常用的有Bernoulli和Multinomial两种.在文本分类上经常会用到这两种方法.在词袋模型中,对于一篇文档$d$中出现的词$w_0,w_1,...,w_n$, 这篇文章被分类为$c$的概率为$$p(c|w_0,w_1,...,w_n) = \frac{p(c,w_0,w_1,...,w_n)}{p(w_0,w_1,...,w_n)} = \frac{p(w_0,w_1,...,w_n|c)*p(c

统计学习方法文本分类

一个文本分类问题就是将一篇文档归入预先定义的几个类别中的一个或几个,而文本的自动分类则是使用计算机程序来实现这样的分类.通俗点说,就好比你拿一篇文章,问计算机这文章要说的究竟是体育,经济还是教育,计算机答不上,说明计算机弱爆了就打它的屁屁. 注意这个定义当中着重强调的两个事实. 第一,用于分类所需要的类别体系是预先确定的.例如新浪新闻的分类体系,Yahoo!网页导航的分类层次.这种分类层次一旦确定,在相当长的时间内都是不可变的,或者即使要变更,也要付出相当大的代价(基本不亚于推倒并重建一个分类系