机器学习pro哥的养成日记,第一节《中文文本分类》
Hi!先开个新坑,C++进阶课程最近在写一个大的,时间有点久,先来点别的东西垫垫肚子
基础的配置和知识储备我们先放一遍,我们先看看机器学习,是怎么个事儿?
机器学习 从数学的角度来看就是: 大量的数学计算,尤其是矩阵计算,然后根据计算结果处理数据,来高效解决问题的一种方式。
机器学习 从计算机的角度来看就是: 通过构建模拟神经元,再由神经元搭建神经网络,通过不断训练模型,修改参数,最后来达到一种近乎于智能的算法。
其应用多的数不过来的,最流行的有GPT人工智能,最简单的有分类数据,最前沿的有科学技术研发,各种各样的应用使得机器学习已经成为了无论什么专业,只要想要转码过来的或者需要进行设计的地方,都得接受机器学习的洗礼,尤其在学科交叉里只要涉及到“智能”两个字很难避免机器学习的学习,可谓是一代人有一代人的王炸组合技 和 新四六级。
废话就说到这里吧
本教程绝大多数内容都参考了邓捷老师的《机器学习 算法原理与编程实践》以及 周志华老师的西瓜书《机器学习》
一、本篇概括
本篇我们将会学习 TF-IDF、朴素贝叶斯、kNN邻近、jieba分词、scikit-learning,用它们来实现文本分类的实现(当然包括中文,毕竟我们也使用了jieba分词)
二、文本挖掘
在分类之前我们肯定得获得文本,处理文本,获得和处理的过程有很多,主要为以下七类:
- 搜索与信息检索(IR)
- 文本聚类
- 文本分类 (其中包括 基于模型的分类 和 分类模型)
- Web挖掘
- 信息处理 (IE)
- 自然语言处理(NLP)
- 概念提取
我们目前只考虑文本的分类
三、分类技术
(1)预处理
1. 选择处理的文本范围
对于一个实际的文本挖掘任务,文本的范围通常是很好确认的,比如邮件具有清晰的署名,正文,等等,如果我想设计一个快速判断邮件是否为垃圾邮件的程序,那么正文便是选择的文本范围。或者想要获取一个人的情感分析,节选对话和动作描写的文段可能比全文更加权威。
2. 建立分类文本语料库
1) 训练用语料库
指的是已经分类好的语料,分为分词和未分词,未分词训练预料又称作原始语料,让模型进行训练的素材
2) 测试用语料库
同理,指完全没有分类的语料,用于测试模型的训练效果
3. 文本格式转换
无论是PDF和Word文件都要转换为纯文本格式。还有一种常见情况就是HTML的标签清理
4. 检测句子边界
虽然说的很官方化,但是实际上想表达的意思就是,把那些明显的 “ 。” “ ?” “ !”句子边界标记出来,把长文转换成句子。
(2)中文分词
jieba库,如果大家有人考过或者备考计算机二级python的话,应该不会陌生,功能就是模仿一个小结巴把句子拆成一个个的词语,例如 我爱夜之城,拆完之后就是 我/爱/夜之城
有三种切分模式分别为默认切分、全切分、搜索引擎切分应用较广。
(3)向量空间
这个概念刚听会有一点点的抽象,但是其实它到现在仍是一个比较重要的数据结构,把每个文本看做是一个向量,这个向量的每个特征表示为文本中出现的词。每个不同的字符串作为一个维度
问题来了,维度如果太高怎么处理,首先这么设计出来维度肯定很高,但是我们也会筛除掉没有任何语气的词语,这些词语叫做停用词,它们可以比较有效地节省储存空间,停用词列表已经算是比较成熟了,网上直接搜索就有对应的下载链接
(4)权重策略 —— TF-IDF
TF(Term Frequency 词频)
一个词语在文章中出现的频率,公式是:
IDF(Inverse Document Frequency,逆向文件频率)
其中|D|:语料库中的文件总数
j:包含词语的文件数目。但是如果没这个词语,分母为0,然后就会报错,所以分母通常会采用1+|分母内容|
然后计算 TF*IDF
TF*IDF的高权重词语保留,以达到保留重要的词语的目的
(5)分类器
1.朴素贝叶斯
大家在高中应该就学过贝叶斯的公式

而朴素贝叶斯的思想就是因为涉及的东西的内容,流程如下:
第一阶段: 从数据生成训练样本集:TF-IDF
第二阶段: 对每个类别计算P(yi),因为在训练集中每个数据y都可以统计词频x,P(x|yi)
第三阶段: 对每个特征属性计算所有划分的条件概率
第四阶段:对每个类别计算P(x|yi)*P(yi)
第五阶段: 以P(x|yi)*P(yi)的最大项作为x的所属类别
2.kNN邻近
如果你第一次听说kNN算法,我给你打个比方,一个社区里,有人体温偏高,有人体温偏低,但是你已知一条规则,这里的居民体温低的会住在一起,体温高的会住在一起,但是这个社区的房子通常并不是方方正正的线性排列的,那么如何给高低体温的分类呢?一个个去测量记录肯定太慢了,先随便找一个人(一般找边界点),然后找这个人最近的k个邻居,让他们相拥,如果两两双方没什么体温上的感觉,则标记为统一特征,反之则根据详细数据确定对应的类别,即最相似的(最邻近的)人,
怎么定义最邻近?如果是文本则按照余弦定理,如果是数值具体分析后选择一种距离公式来适配,有六大主流的距离:闵可夫斯基距离、欧式距离、曼哈顿距离、切比雪夫距离、汉明距离、借卡的相似系数、余弦定理
(6)评价分类结果
(1)R 召回率(Recall):搜索到的相关文件/所有相关文件
(2)P 准确率(Precision):搜索到的相关文件/所有搜索到的文件
召回率简而言之就是找的全不全
准确率简而言之就是找到对不对
如果有100个人,其中10人患病,一次检查了20人其中7人患病
召回率 = 7/10 (一共就10人患病,找到7个人,说明找的比较全)
准确率 = 7/20 (一共找了20人,只有7个人患病,说明这个方法找的不太准)
我们发现,如果只看P、R的话如果一方很大另一方可能很小但是这很难评价这个模型是否是好的所以我们用调和平均数和一个系数来加权。
F-score:
F-score是有系数β的,如果β为1则是比较知名的F1-Measure

四、朴素贝叶斯算法实现(先挖个坑)
五、kNN算法实现(先挖个坑)
更多推荐
所有评论(0)