高介分类:核方法与支持向量机(SVM)
数据模型:并不是简单地二维数据,多个维度或者对象的数据聚合起来
{
persion1's attr1:value1,...,persion1's attrN:valueN,persion2's attr1:value1,...,persion2's attrN:value1,whetherSuccess:value
}
同一个问题:不同的分类方法的类比
决策树:存在多个数值型输入,且这些数值所呈现的关系并不简单,决策树往往不是最有效的方法
简单的线性分类:它只能找出一条分界线来,如果找不到,或者实际存在多条直线时,分类器会得到错误的答案
算法思想:
核方法和SVM都是线性分类(类发现群组的聚类)的方法,不同的是在更高维度上计算两个向量间的点积,而简单的线性分类只是在二维空间里用点积来计算距离
核方法:
用新的函数来取代原来的点积函数,将数据映射到更高维度的坐标空间去,并返回高维度空间内的点积,实际中会采取少数几种变换方法,常用径向基函数(radial-basis function):
接受两个向量作为输入,返回一个标量值,和点积不同的是,其是非线性的
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107095750878-1003363889.png)
先用向量A和一个分类中的每个向量求距离,然后再求平均距离
SVM:
使用LibSVM
数据的线性化是重点:
1.是否问题:yes->1,no->0
2.兴趣类的:
单人的:可以用是否的方法处理成对的:则两人出现计数累加1次某些不同的兴趣爱好也是可能配对成功的,如滑雪与滑板;如果为每一个兴趣都建立一个变量,则分类器更加复杂;一种好的处理方法是将兴趣爱好按层级排列:第一级-第二级-第三级:滑雪和滑板都是雪地运动,雪地运行又是体育运动,如果两个人都对第三级的项目感兴趣,则分值为1,否则如果两个人都是对第二级的项目感兴趣,则分支为1,第一级的感兴趣,分值为0.5;即层级越高,赢取的分值越低
3.数据的缩放:对不同度量单位的数值进行衡量时,需要将数据缩放为统一尺度[0,1],做归一化处理,即m(x)=(x-min(X))/(max(X)-min(X));或者构建成本函数,获得每个属性的权重
1.数据的处理:
婚介数据集:
年龄、是否吸烟、是否要孩子、兴趣列表、家庭住址
每一行数据包含了一对男女的信息以及是否匹配成功的标志(0和1)
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107095831706-676843714.png)
数据集中的数据是相互作用和非线性的,所以先用年龄和是否配对成功来分析各种分类算法的使用场景
2.决策树
i.适用场景:
根据数值边界来对数据进行划分的
ii.处理过程:
使用年龄来最决策树
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107095855956-193540217.png)
决策树更加适合自动分类
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107095912331-1996110692.png)
iii.不使用场景:
存在多个数值型输入,且这些数值所呈现的关系并不简单,决策树往往不是最有效的方法
3.基本的线性分类:
i.思想:
寻找每个分类中所有数据的平均值,并构造一个代表该分类中心位置的点,根据和每个中心位置的距离远近来进行分类
ii.计算方法:
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107095923472-1145663044.png)
iii.分类结果图:
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107095944050-1696408670.png)
iv.距离的计算方法:
a.欧几里得距离
b.向量和点积
先计算两个分类的中心点
然后根据两个向量的点积的正负(夹角的大小)来判断属于哪个分类:
class="sign"((X-(M0+M1)/2)*(M0-M1))=sign(XM0-XM1+(M0*M0-M1*M1)/2)
v.优劣性:
它只能找出一条分界线来,如果找不到,或者实际存在多条直线时,分类器会得到错误的答案
4.数据的线性化:
数据有数值型,也有分类型,决策树不需对数据进行预处理,但是其他分类器只能处理数值型数据,所有需要进行数据的数值化:
i.是否问题:
yes --> 1
no --> 0
ii.兴趣列表:
单人的:可以用是否的方法处理
成对的:则两人出现计数累加1次
某些不同的兴趣爱好也是可能配对成功的,如滑雪与滑板;如果为每一个兴趣都建立一个变量,则分类器更加复杂;一种好的处理方法是将兴趣爱好按层级排列:第一级-第二级-第三级:滑雪和滑板都是雪地运动,雪地运行又是体育运动,如果两个人都对第三级的项目感兴趣,则分值为1,否则如果两个人都是对第二级的项目感兴趣,则分支为1,第一级的感兴趣,分值为0.5;即层级越高,赢取的分值越低
iii.地理位置的距离:
利用Yahoo Maps来根据地址为邮编得到经度和纬度,然后将两地的纬度差*69.1,经度差*53,求欧几里得距离
iv.对数据进行缩放:(也可用成本函数进行计算)
对不同度量单位的数值进行衡量时,需要将数据缩放为统一尺度[0,1],做归一化处理,即m(x)=(x-min(X))/(max(X)-min(X))
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100036144-1347567120.png)
5.核方法:(超越线性分类的方法,来解决寻找一条分界线额局限性)
i.通过对数据进行变换实现线性分类是有可能的
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100102456-998977414.png)
可以对x、y求平方,进行变化后,可以寻找一条分界线,或者数据的多维变换:a=x^2,b=x*y,c=y^2,在多维空间里寻找两个分类的分界线,但是将数据投影到很多维度上又不切实际
ii.核技法:
用新的函数来取代原来的点积函数,将数据映射到更高维度的坐标空间去,并返回高维度空间内的点积,实际中会采取少数几种变换方法,常用径向基函数(radial-basis function):
接受两个向量作为输入,返回一个标量值,和点积不同的是,其是非线性的
,
通过调整gamma来得到最佳的线性分离
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100137378-1438959346.png)
iii.坐标点与均值点间的距离:
先对一组向量求均值点,然后向量A与均值点的点积,与先用向量A和向量组中的每一个向量求点积,然后在求均值的效果一样,所有直接计算某个坐标点与分类中其余每个坐标点的点积或者径向基函数,然后再求均值
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100152566-521707384.png)
offset参数是偏移量,在转换后的空间中也会变化,因其计算过程费时,所以预先为某个数据集计算一次偏移量,然后调用的时候传入
6.支持向量机
i.数据集
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100214534-1675048449.png)
大多数的数据都是远离分界线的,所以判断坐标点的分类与是否位于直线的某一侧并没有太大的实际意义
ii.支持向量机:
广为认知的一组方法的统称,用来解决上述问题的分类器:尝试找出一条尽可能远离所有分类的线,这条线被称为最大间隔超平面(Maximun-Margin hyperplan)
iii.例子:
此处选择分界线的依据是:寻找两条分别经过各分类相应坐标点的平行线,使其与分界线的距离尽可能的远;而对于新数据点,通过观察位于分界线的哪一侧类判断其所属的分类;同时,只有位于间隔区边缘的坐标点才是确定分界线位置所必须的,因此可以去掉冗余的数据,而分界线处于相同的位置,将这条分解称为支持向量;而寻找支持向量,并利用其来寻找分界线的算法及时支持向量机
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100238222-693342172.png)
iv.应用:
面部表情分类
军事数据侦测入侵者
预测蛋白质结构
笔迹识别
确定地震期间的潜在危害
v.LIBSVM支持向量机的使用
a.从包含两个列表的元组中读取数据,一个列表含有分类数据,另一个函数输入数据
b.示例:
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100313597-148042512.png)
c.对于婚介数据集:
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100346050-738374709.png)
使用交叉验证来训练模型,接收一个参数n,将数据拆为n个子集,每次将一个子集作为测试集,利用其它子集对模型展开训练;将结果与最初的列表进行对比,answer与guesses差异数为116,即得到了500行数据中的384匹配项
![](https://images2015.cnblogs.com/blog/495370/201701/495370-20170107100404581-484074837.png)