分类是机器学习最常见的任务。
定义:给定一个对象 X,将其划分到预定义好的某一个类别 yi中
–输入 X
–输出Y (取值于有限集 {y1,y 2,…yn })
应用:
–人群,新闻分类,Query分类,商品分类,网页分类,垃圾邮件过滤,网页排序
不同类型的分类
类别数量:
-
二値分类:Y 的取值只有两种,如:email 是否垃圾邮件
-
多值分类:Y 的取值大于两种,如:网页分类{政治,经济,体育}
类别关系
-
水平分类:类别之间无包含关系
-
层级分类:类别形成等级关系
分类器的分类:
-
概率分类器:Naive Bayes(NB,朴素贝叶斯) ,EM(Expectation–Maximization)最大化期望
-
-
计算待分类对象属于每个类别的概率,选择概率最大的类别作为最终输出
-
-
空间:Perceptron(感知机), SVM( Support Vector Machine 支持向量机)
-
其他:KNN
以新闻分类为例子说明机器学习的流程。
-
特征表示:x={昨日,是,国内,投资,市场...}
-
特征选择:x={国内,投资,市场...}
-
模型选择:朴素贝叶斯分类器
-
训练数据:(x,y)1,(x,y)2,(x,y)3,...
-
模型训练:learn.exe trainingDataFile model
-
测试(分类):classify.exe model newDataFile
-
评测:Accuracy:90%
其中选择朴素贝叶斯分类器的原因:
-
数据量大
-
需要快速,高效
-
可以分布式
朴素贝叶斯分类(Naive Bayes,NB)
基于贝叶斯原理
-
P(X):待分类对象自身的概率,可忽略(我们主要是比较同一个对象分别属于不同分类的概率大小关系,没必要求出概率的具体值)
-
:每个类别的先验概率,如P(军事)
-
:每个类别产生该对象的概率
-
:每个类别产生该特征的概率,如P(苹果|科技)
注意 X 属于yi概率,我将其表示表示每个单词的联合概率,单词联合概率不好求,所以我们假设文档中每个词是独立,由联合概率的独立性推出第三个式子。
随机变量X,Y是相互独立。
注意:
由于每个单词的乘积,如果某个词在某个类型出现零次,那么就会造成概率为0的情况,这样造成文章属于该分类的概率为0.我们要进行平滑处理(打土豪分田地),这里就用加一平滑(拉普拉斯平滑),就是给每一个单词加一个默认个数:可以是0.1或者其他数据,这要需要给单词总数添加一个词表的个数。这个平滑是加在训练阶段,在分类时,如果新数据出现整个训练词表中都没有出现的词,我目前做法是丢弃。
数据稀疏:是机器学习中很大的问题,比拉普拉斯平滑更好的解决数据稀疏的方法是:通过聚类将未出现的词找出系统相关词,根据相关词的概率求一个平均值。如果:系统有“苹果”,“葡萄”等词,但是没有“榴莲”,我们可以根据“苹果”,“葡萄”等平均值作为“榴莲”的概率,这样跟合理。
在计算机中运算,概率为(0,1)之间的小数,连续乘积容易造成溢出。又因为我们是比较文章与分类概率大小,所以我们可以log(xy)=log(x)+log(y) 将连乘改成连加。log 函数单调递增。如果 x>y 则 log(x)>log(y)
参数估计
也就如何求各个概率。
策略:最大似然估计(maximum likelihoodestimation,MLE)
先验概率:
Count(yi):类别为yi 的对象在训练数据中出现的次数。
:所有文档数
Count(xj,yi):特征 xj 和类别 yi 在训练数据中同时出现的次数
Count(yi):类别 yi 总词数。
预测
给定 x,计算所有的p(yi|x),选择概率值最大的yi 作为输出。
评测
-
准确度 Accuracy:(C11+C22)/(C11+C12+C21+C22)
-
精确率Precision(y1):C11/(C11+C21)
-
召回率Recall(y1):C11/(C11+C12)
准确度只能从整体上评测分类器。
如果想知道某个分别上的分类精准情况,可以用精准率。
精准率:是分类器认为某一类中,实际是这一类的比例。
召回率对于某些情况很重要。像垃圾邮件分类器。如果我们将一份正常邮件分成垃圾邮件,和将垃圾邮件分成正常邮件,哪个危害大?当然是将正常邮件分成垃圾邮件,因为一旦误分成垃圾邮件,客户就丢失这封邮件的信息,但是将垃圾邮件误分成正常邮件,只不过浪费客服几秒种,删除就行了。所以这是正常召回率就相当重要,我们要看有多少正常邮件被召回,我们尽量要让正常邮件的召回率为100%。
朴素贝叶斯分类特点
优点
-
简单有效
-
结果是概率(软性分类),对二值和多值同样适用。
-
数据量大、
-
需要快速,高效
-
可以分布式
缺点
-
独立性假设有时不合理。(如果需要不假设独立性,可以用最大熵分类)