最近实验室成立了一个兴趣小组,每周给师弟师妹们。讲解一些算法,把讲解过程的PPT放在上面,供大家学习参考。
0、问题的提出
我们在实际生活中经常有一句话:“物以类聚,人以群分”我们总是以相近的事物去评价一个人,同时我们生活中经常有一句话叫做:“你的朋友决定了你的价值”,今天讲解的这个算法就是一这个理念来设计的一个算法,这个算法虽然简单,但是却在我们的生活中用处非常的大。
机器学习的一些基本的概念:
特征:最简单的例子就是把人去分类,我们可以根据年龄和体重去划分,这里的年龄和体重就是我们所说的特征;
归一化(又称标准化):还是根据上面的例子,将人的体重和身高转化为0-1的一般值,就是这里所说的归一化的概念。比较常用的归一化方法有:min-max标准化:
Z-score标准化:也叫标准差标准化,经过处理的数据符合标准的正态分布,计均值为零,标准差为1,其转化函数如下所示:
损失函数:(loss function)是用来估量你模型的预测值f(x)与真实值Y的不一致程度,它是一个非负实值函数,通常使用L(Y, f(x))来表示,损失函数越小,模型的鲁棒性就越好。损失函数是经验风险函数的核心部分,也是结构风险函数重要组成部分。
过拟合:如果一味的追求提高对于训练数据的预测的能力就会发生过拟合,过拟合是指在模型选择时所涉及的参数太多发生过拟合的现象。
交叉验证(Cross-Validation): 有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。
二、理论知识
KNN作为一种有监督分类算法,是最简单的机器学习算法之一,顾名思义,其算法主体思想就是根据距离相近的邻居类别,来判定自己的所属类别。算法的前提是需要有一个已被标记类别的训练数据集,具体的计算步骤分为一下三步:
1、计算测试对象与训练集中所有对象的距离,可以是欧式距离、余弦距离等,比较常用的是较为简单的欧式距离;
2、找出上步计算的距离中最近的K个对象,作为测试对象的邻居;
3、找出K个对象中出现频率最高的对象,其所属的类别就是该测试对象所属的类别。
注意的问题:
1、K值的设定
K值设置过小会降低分类精度;若设置过大,且测试样本属于训练集中包含数据较少的类,则会增加噪声,降低分类效果。
通常,K值的设定采用交叉检验的方式(以K=1为基准)
经验规则:K一般低于训练样本数的平方根。
2、优化问题
压缩训练样本,采用kd树;
确定最终的类别时,不是简单的采用投票法,而是进行加权投票,距离越近权重越高。
三、算法优化
Kd-树是一个二叉树,每个节点表示的是一个空间范围。表示的是Kd-树中每个节点中主要包含的数据结构。
Range域表示的是节点包含的空间范围。
Node-data域就是数据集中的某一个n维数据点。分割超面是通过数据点Node-Data并垂直于轴split的平面,分割超面将整个空间分割成两个子空间。
令split域的值为i,如果空间Range中某个数据点的第i维数据小于Node-Data[i],那么,它就属于该节点空间的左子空间,否则就属于右子空间。
Left,Right域分别表示由左子空间和右子空间空的数据点构成的Kd-树。
上面的资料是我整合网络资料和《统计学习方法》上的讲解知识的,在这里表示感谢。