如何用机器学习对文本分类
2017-05-30 20:21
148 查看
需求
使用监督学习对历史数据训练生成模型,用于预测文本的类别。样本清洗
主要将重复的数据删除掉,将错误无效的数据纠正或删除,并检查数据的一致性等。比如我认为长度小于少于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 | 汽车 |
分类词库
特征提取涉及到文本分词,由搜狗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)
参数
SVM参数需要选择的主要有两个:核函数和惩罚因子。主要的核函数包括RBF核、线性核、多项式核和Sigmoid核,文本分类中一般可选线性核。惩罚因子用来惩罚分错的样本,惩罚因子越大说明越重视损失,不断增大它最终总能让所有样本都正确分类,但这可能会存在过拟合,影响后面的泛化能力。====广告时间,可直接跳过====
公众号的菜单已分为“分布式”、“机器学习”、“深度学习”、“NLP”、“Java深度”、“Java并发核心”、“JDK源码”、“Tomcat内核”等,可能有一款适合你的胃口。
鄙人的新书《Tomcat内核设计剖析》已经在京东销售了,有需要的朋友可以购买。感谢各位朋友。
为什么写《Tomcat内核设计剖析》
=========================
欢迎关注:
相关文章推荐
- 如何用Python和机器学习训练中文文本情感分类模型?
- 基于机器学习的文本自动分类技术[3]
- 从文本分类问题中的特征词选择算法追踪如何将数学知识,数学理论迁移到实际工程中去
- 基于统计概率和机器学习的文本分类技术
- 在机器学习分类中如何处理训练集中不平衡问题
- Eclipse设置文本格式为UTF-8/eclipse 工程平铺展开方式,如何将代码工程进行分类
- 基于机器学习的文本自动分类技术[1]
- 【译文】如何利用机器学习和分布式计算来对用户事件进行分类
- 【机器学习基础】机器学习算法的分类——关于如何选择机器学习算法和适用解决的问题
- 【机器学习实验】使用朴素贝叶斯进行文本的分类
- 文本数据的机器学习自动分类方法(上)
- 机器学习文本分类Improved Iterative Scaling算法以及JAVA实现
- 文本分类,数据挖掘和机器学习
- 如何提高机器学习中的分类准确率
- 文本数据的机器学习自动分类方法
- 基于机器学习的文本自动分类技术[4]
- Python 文本分类:使用scikit-learn 机器学习包进行文本分类
- 【机器学习实验】使用朴素贝叶斯进行文本的分类
- 程序员的机器学习入门笔记(五):文本分类的入门介绍
- 文本数据的机器学习自动分类方法(转)