博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何用机器学习对文本分类
阅读量:6359 次
发布时间:2019-06-23

本文共 1686 字,大约阅读时间需要 5 分钟。

需求

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

样本清洗

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

分类词库

特征提取涉及到文本分词,由搜狗可以搜索各种类别的词汇,自己下载下来再整理,它的格式为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
svm = new SVM
(new LinearKernel(), 1.0, 12, SVM.Multiclass.ONE_VS_ALL);svm.learn(samples, labels);svm.finish();double[] test = 测试数据的特征集及权重数组svm.predict(x)

参数

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

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

鄙人的新书《Tomcat内核设计剖析》已经在京东预售了,有需要的朋友可以到 进行预定。感谢各位朋友。

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

欢迎关注:

这里写图片描述

你可能感兴趣的文章
C++形参中const char * 与 char * 的区别
查看>>
espresso 2.0.4 Apple Xcode 4.4.1 coteditor 价格
查看>>
Object-C中emoji与json的问题
查看>>
linux 命令
查看>>
灾后重建
查看>>
Nothing 和 Is
查看>>
第一个sprint冲刺第三天
查看>>
周末web前端练习
查看>>
hdu 5754 Life Winner Bo 博弈论
查看>>
Overlay network 覆盖网络
查看>>
Linux之编译需要的文件变化时刻
查看>>
IntelliJ IDEA中怎么查看方法说明?
查看>>
mvn常用命令
查看>>
redis zset 顺序问题
查看>>
C# 判断网站是不是discuz论坛
查看>>
asp.net 未能加载文件或程序集“WebApi”或它的某一个依赖项。试图加载格式不正确的程序。...
查看>>
jquery获取select选中的值
查看>>
linux nginx 启动脚本
查看>>
软件开发流程纲要及各个阶段产生的文档
查看>>
Problem1删数问题解题报告
查看>>