机器学习(五)
作者:互联网
确定执行的优先级
建立一个垃圾邮件的分类器,垃圾邮件用y=1表示,非垃圾邮件用y=0表示,应用监督学习的方法,区分垃圾邮件和非垃圾邮件。
那么首先要想到的是如何表示邮件的特征向量x,通过特征向量x和分类标签y可以训练一个分类器,一种选择邮件特征向量的方法,提出一个可能含有100个单词的列表,通过这个列表来区分垃圾邮件或者非垃圾邮件(比如discout或者buy这样的可以认为是垃圾邮件),我们可以对邮件编码成如下的一个特征变量,将之前选定的100个单词按照字典序排序,检查这100个单词是否有的出现在邮件里,建立一个特征向量x与100个单词一一对应,如果这个单词出现在这个邮件里,那么这个单词对应的位置x[i]处的数值就为1,否则为0(注意单词出现多次也是为1)
如果做一个垃圾分类器那么一个很重要的问题是如何在有限的时间下,让垃圾邮件分类器具有高精确度和低错误率,可以通过收集更多的数据或者说建立一个关于邮件标题的更复杂的特征捕捉邮件的来源还可以设计更复杂的算法来检测单词中出现的故意出现的拼写错误(故意的拼写错误是为了逃避之前提到的检测垃圾邮件的方法,错误的单词就无法识别出来)
通过误差分析可以选择更加合适的方法
通过简单的算法来快速的实现一个系统;然后通过交叉验证测试数据,可以画出相应的学习曲线,通过曲线及检验误差,可以看出这个算法是否具有高偏差或者高方差或其他问题,根据这个决定是否使用更多的数据或者特征;之后对分类错误的垃圾邮件或者非垃圾邮件分析误差的原因查找共同的特征和规律,查看你的算法在哪一类垃圾邮件分类上有明显的不足;如果在改进算法的时候,如果算法能够返回一个数值评价指标来估计算法的执行效果会很有帮助
使用一个合适的误差度量值,有时会对于你的学习算法,造成非常微妙的影响,这是偏斜类的问题,当正样本的数量和负样本的数量比起来非常非常少时,我们把这类问题叫做偏斜类,当一直使y=0时,出现的误差的概率可能比一些算法得出的结果精确度更好,我们的代码准确度提高了不知道是因为改进的原因还是因为把代码改成了y=0这样的评估。因此当出现偏斜类问题的时候,用分类精确度并不能很好得衡量算法,所以希望有一个不同的误差度量值或者不同的评估度量值
其中一种评估度量值叫做查准率和召回率。如果我们正在用测试集来评估一个分类模型,对于测试集中的样本都会等于1或0,学习算法为每个测试值中的数据做出预测;如果预测的值和实际的值都为1,我们把这个样本叫做真阳性;如果预测的样本值和实际的样本值都为0,那么我们把它叫做真阴性;如果某个样本的预测为1实际为0,那么我们把它叫做假阳性;如果某个样本的预测值为0实际值为1,那么我们把它叫做假阴性。
查准率=真阳性/所有预测为阳性的数量=真阳性/(真阳性+假阳性)
召回率=真阳性的数量/所有实际为阳性的数量=真阳性/(真阳性+假阴性)
查准率和召回率都是越高越好
保障查准率和召回率的相对平衡
高查准率的话可能召回率就会低一些,将临界值设定的高一点,这样可以有更好的准确度。
选择一个评估度量值来权衡查准率和召回率,选着合适的算法,有非常高的查准率和非非常高高的召回率都不是一个很好的模型,有一种F1Score=2PR/(P+R)结合了召回率和查准率,对于F1Score很高的召回率和查准率都会很高
机器学习数据
在一定的条件下,得到大量的数据并在某类学习算法中进行训练可以是一种有效的方法来获得一个具有良好性能的学习算法
比如1:特征值x有充足的信息来确定y
2:有很多的参数有很大的训练集
监督学习算法
优化目标
对逻辑回归做一些改动使之可以支持向量机
下方的表达式代表每一个单独的训练样本,对逻辑回归的总体目标函数所做的贡献,当y=1时只有第一项起作用,当y=0时只有第二项起作用
z=θ^Tx,当z很大时函数对应的值会变得非常小,所以逻辑回归中遇到y=1时,会将θ^T*x设为很大的值。为了支持向量机,我们对这个函数修改,画的紫红色的线和原来的近似,但是两条直线拼接,斜率不重要,这样修改会使支持向量机拥有计算上的优势而且之后的优化问题变得简单,对函数进行重新命名,重命名的下标指得是y是0还是1时的新函数
对代价函数进行函数替换
在支持向量机和逻辑回归的操作中,遵循的惯例会略有不同,需要去掉1/m,但是去掉这个m参数并不会对最小化代价函数以及θ的取值有影响;第二个符号上的变化,J是由两大项组成的+入,用A+入B表示,我们需要去平衡这两项,选择合适的参数入的值来决定是更加的注重A项还是更加的注重B项,如果设定入的值很大表示B的权重是很大的;这样的话就引出了SVM,对应的式子是C*A+B,如果给C设置为一个非常小的值,那么就表示给予B一个比A大得多的权重,这里的C你可以把它看做是1/入,但是实际上是并不相等的,这样就得到了执行向量机的总体优化目标
支持向量机的优化目标与逻辑回归得到的结果不同,支持向量机的并不会输出概率,我们得到的是通过优化这个代价函数得到的θ,根据θ值确定h(x)的值
,如果我们把上式的C设的非常大,为了最小化这个式子我们需要做的就是使接近于0,当y(i)=1时只有前一小项,我们需要做的就是使cost1()接近于0也就是使θ^T*X>=1,当y(i)=0时为了接近0使θ^T*X<=-1,这样的话就相当于下面这个样子
c越大对异常点越明显(将v投影到u上,v在u上的长度为p,p是有方向的,如果是和u'一个方向为正,如果是相反的方向为负,那么u^T*v=p*||u||等于矩阵惩罚)
、超平面一般表示形式
在n维空间中,设任意点坐标为
x = [ x ( 1 ) , x ( 2 ) , . . . x ( n ) ] T ∈ R n
设超平面参数
w = [ w ( 1 ) , w ( 2 ) , . . . w ( n ) ] T ∈ R n
则超平面方程可表示为
w^ T* x + b = 0 (1)
2、超平面的法向量
超平面的法向量满足:超平面中任意向量都与该法向量垂直。设超平面上的两个点为x 1 和x 2
,分别满足:
w^T *x1+b=0
w^T *x2+b=0
两式相减,可得
w^T (x1-x2)=0
记 v = ( x 1 − x 2 )由于x 1和x2是任取的,故 v 表示超平面上的任意向量。这时我们可以发现,式( 4 )的含义恰好是:平面上任意一个向量都与 w 相互垂直,因此 w 就是超平面w^T x+b=0的一个法向量。
3.点到超平面的距离
SVM进行分类的步骤:
1)选取一个合适的数学函数作为核函数
2)使用核函数进行高维映射,将数据点由线性不可分变为线性可分
3)间隔最大化,最终找到能让间隔最大的超平面,分类就完成了
支持向量机(SVM)的三个重要概念:
~最大间隔:支持向量的一个重要概念叫做“间隔”:对于任意一个超平面,其两侧数据点都距离它有一个最小距离(垂直距离),这两个最小距离的和就是间隔。通过两侧的样本点划分间隔,这些样本点就是支持向量,间隔其实也是SVM的一种损失度量,间隔越大,损失越小。
硬间隔:两边的划分不允许有意外
软间隔:实际无法这么理想,允许有一些点不在规定的一边
y=1表示正类的分类结果 y=-1表示负类的分类结果,y=wx+b要么>=1要么<=-1,间隔是距离最近的两个数据点,所以间隔距离2/||w||(通过点到超平面的距离计算出来的),为了使间隔最大化,max1/||w||使得wx+b>=1也可以表示为min||w||^2/2使得wx+b>=1是一个求极值的问题,高数里面有有关求极值的理论,采用的是拉格朗日乘子法,但其条件是等式。所以,需要将不等式,转化为等式的形式。 方法就引入变量。
给每个点配上一个系数α,若是边界点,那么α就为大于0,否则就为0.
则 αi * yi * (W * xi + b) = 0.
从另一方面来讲,αi也可以看做是拉格朗日系数,采用拉格朗日乘子法,求极值。
由于αi也是未知的。所以,又需要求出αi。
~高维映射:让线性不可分变为线性可分,增加维度让在原维度不可分的在高纬度可分,让黑棋子在更高维度,白棋子在更低维度,这样的情况下可以增加一个线(平面)将其分开。(二维叫线,三维叫面,超过三维统一叫做超平面)通过映射的方法将其分开
~核函数:是一种映射,在SVM中完成高维映射,一旦选定了一种核函数就不会再进行修改。(核方法和核技巧也是SVM中设计的概念,这两个负责的是提出需求,而核函数做的是给出解答)核技巧是提高核方法计算效率(想要高纬度,最大间隔的计算量就越大导致运算效率低),输入原始向量可以通过核技巧直接得到正确结果,不需显式完成高维映射(这样同步进行,不会因为先进行高维映射导致最大间隔的运算量变大)
超平面:因为样本的特征很可能是高维的,此时样本空间的划分就不是一条线了
标签:机器,函数,学习,算法,垃圾邮件,超平面,向量,查准率 来源: https://www.cnblogs.com/xxsadd/p/16670832.html