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

标签: 机器学习 模型 样本 分类 文本
1815人阅读 评论(0) 收藏 举报
分类:

需求

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

样本清洗

主要将重复的数据删除掉,将错误无效的数据纠正或删除,并检查数据的一致性等。比如我认为长度小于少于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内核设计剖析》

=========================

欢迎关注:

这里写图片描述

查看评论

文本数据的机器学习自动分类方法(上)

随着互联网技术的迅速发展与普及,如何对浩如烟海的数据进行分类、组织和管理,已经成为一个具有重要用途的研究课题。而在这些数据中,文本数据又是数量最大的一类。以统计理论为基础,利用机器学习算法对已知的训练...
  • jdbc
  • jdbc
  • 2016-01-26 11:09:52
  • 29085

文本数据的机器学习自动分类方法(下)

【编者按】:随着互联网技术的迅速发展与普及,如何对浩如烟海的数据进行分类、组织和管理,已经成为一个具有重要用途的研究课题。而在这些数据中,文本数据又是数量最大的一类。以统计理论为基础,利用机器学习算法...
  • jdbc
  • jdbc
  • 2016-01-26 11:11:43
  • 5002

python机器学习-----文本分类笔记

#1.数据准备 import pandas as pda import numpy as npy filename="" dataf=pda.read_csv(filename) x=dataf.il...
  • yyq675886993
  • yyq675886993
  • 2017-07-29 17:15:24
  • 367

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

机器学习的有概率分类器(probabilistic) ,贝叶斯推理网络(bayesian inference networks) , 决策树分类器(decision tree) ,决策规则分类器(...
  • zjxiaolu
  • zjxiaolu
  • 2015-04-29 11:24:31
  • 3269

【机器学习实验】使用朴素贝叶斯进行文本的分类

引言朴素贝叶斯由贝叶斯定理延伸而来的简单而强大的概率模型,它根据每个特征的概率确定一个对象属于某一类别的概率。该方法基于一个假设,所有特征需要相互独立,即任一特征的值和其他特征的值没有关联关系。 虽...
  • JasonDing1354
  • JasonDing1354
  • 2015-05-03 23:34:23
  • 6647

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

机器学习的大局观:使用神经网络和TensorFlow来对文本分类 https://medium.freecodecamp.com/big-picture-machine-learning-classi...
  • caimouse
  • caimouse
  • 2017-04-10 16:40:23
  • 4804

<em>文本分类</em>数据集合

数据挖掘或<em>机器学习</em>,<em>文本分类</em>,聚类完整数据集合数据挖掘或<em>机器学习</em>,<em>文本分类</em>,聚类完整数据集合数据挖掘或<em>机器学习</em>,<em>文本分类</em>,聚类完整数据集合数据挖掘或<em>机器学习</em>,文本...
  • 2018年04月14日 00:00

机器学习--python之学会如何从文件逐行读取数据

学会如何从文件逐行读取数据 在上代码之前先来分析一下学会从文件逐行读取数据对我们学习机器学习算法的时候有什么作用。在学习机器学习算法的时候,会用到大量的数据作为训练集,手动输入显然不能满足需求,而且...
  • songhaoaa
  • songhaoaa
  • 2015-08-21 11:12:43
  • 1137

python 中文文本分类

写这篇博文用了很多时间和精力,如果这篇博文对你有帮助,希望您可以打赏给博主相国大人。哪怕只捐1毛钱,也是一种心意。通过这样的方式,也可以培养整个行业的知识产权意识。我可以和您建立更多的联系,并且在相关...
  • github_36326955
  • github_36326955
  • 2017-02-06 11:31:21
  • 27248

中文文本情感分析:基于机器学习方法的思路

1.常用步骤 2.中文分词 1)这是相对于英文文本情感分析,中文独有的预处理。 2)常用方法:基于词典、基于规则、基于统计、基于字标注、基于人工智能。 3)常用工具:哈工大—语言云、东北大学Ni...
  • u013737526
  • u013737526
  • 2017-06-14 11:01:11
  • 4394
    作者
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 115万+
    积分: 1万+
    排名: 965
    博客专栏
    最新评论