机器学习第十章——降维与度量学习

一、k近邻学习

k近邻(k-Nearest Neighbor,简称kNN)学习是一种常用的监督学习方法,给定测试样本,基于某种距离度量找出训练集中与其最靠近的k个训练样本,然后基于这k个“邻居”的信息来进行预测.
k近邻学习没有显式的训练过程!是“懒惰学习”(lazy learning)的著名代表,

懒惰学习”(lazy learning)在训练阶段仅仅是把样本保存起来,训练时间开销为零,待收到测试样本后再进行处理;

急切学习”(eager learning)在训练阶段就对样本进行学习处理的方法。

k近邻算法:

from numpy import *
import operator

def createDataSet () :
    group = array ([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
    labels = ['A','A','B','B']
    return group, labels

group,labels = createDataSet()

print(group,'\n',labels)

def classify0 (inX,dataSet, labels, k) :
    datasetsize = dataSet.shape[0]
    diffMat = tile(inX, (datasetsize, 1)) - dataSet
    sqDiffMat = diffMat**2
    sqDistances = sqDiffMat .sum(axis=1)
    distances = sqDistances**0.5
    sortedDistIndicies = distances. argsort()
    classCount={ }
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    return sortedClassCount[0][0]

print(classify0 ([0, 0], group,labels,3))


def file2matrix (filename) :
    fr = open (filename)
    arrayOLines = fr.readlines ()
    numberOfLines = len (arrayOLines)
    returnMat = zeros((numberOfLines , 3 ))
    classLabelvector = []
    index= 0
    for line in arrayOLines:
        line = line .strip ()
        listFromLine = line. split ('\t')
        returnMat [index, : ] = listFromLine [0:3]
        classLabelvector.append(int(listFromLine[-1]))
        index += 1
    return returnMat ,classLabelvector




datingDataMat ,datingLabels = file2matrix ('datingTestset2.txt ')


import matplotlib
import matplotlib.pyplot as plt
fig = plt.figure ()
ax = fig.add_subplot ( 111)
# ax.scatter(datingDataMat[:, 1], datingDataMat[:, 2])
ax.scatter(datingDataMat[:, 1], datingDataMat[:, 2],15.0*array(datingLabels), 15.0*array(datingLabels))
plt.show()

运算结果:

二、低维嵌入

维数灾难”(curse ofdimensionality ):在高维情形下出现的数据样本稀疏、距离计算困难等问题,是所有机器学习方法共同面临的严重障碍。
缓解维数灾难的一个重要途径是降维(dimension reduction),亦称“维数约简”,即通过某种数学变换将原始高维属性空间转变为一个低维“子空间”(subspace)。

很多时候,人们观测或收集到的数据样本虽是高维的,但与学习任务密切相关的也许仅是某个低维分布,即高维空间中的一个低维“嵌入”(embedding).

多维缩放”(Multiple Dimensional Scaling,简称MDS):原始空间中样本之间的距离在低维空间中得以保持(如上图)。

首先令B=Z^TZ\in{R^{m\times m}}其中B为降维后样本的内积矩阵,b_{ij}=z_{i}^Tz_j 有

dist_{ij}^2=||z_i||^2+||z_j||^2-2z_{i}^Tz_j\\=b_{ii}+b_{jj}-2b_{ij} .

再令降维后的样本Z被中心化,使得每列的求和以及每行的求和都为0,即\sum{_{i=1}^m}b_{ij}=\sum{_{j=1}^m}b_{ij}=0

\sum_{i=1}^{m}{dist_{ij}^2=tr(B)+mb_{jj}},\\\sum_{j=1}^{m}{dist_{ij}^2=tr(B)+mb_{ii}},\\\sum_{i=1}^m\sum_{j=1}^{m}{dist_{ij}^2=2mtr(B)}

现在我们需要把b_{ij} 表示出来用于组成B矩阵,根据第上面的式子则有:

b_{ii}=\frac{\sum_{j=1}^{m}{dist_{ij}^2}-tr(B)}{m},\\b_{jj}=\frac{\sum_{i=1}^{m}{dist_{ij}^2}-tr(B)}{m}

且其中

dist_{i·}^2=\frac{1}{m}\sum_{j=1}^mdist_{ij}^2,\\dist_{·j}^2=\frac{1}{m}\sum_{i=1}^mdist_{ij}^2,\\dist_{··}^2=\frac{1}{m^2}\sum_{i=1}^m\sum_{j=1}^mdist_{ij}^2

上面三个式子分别表示dist距离矩阵第i行的均值,第j列的均值,以及整个矩阵的均值。用第一个式子表示出b_{ij}:

b_{ij}=\frac{1}{2}(b_{ii}+b_{jj}-dist_{ij}^2)

依照西瓜书上的习惯我们把负号提出来

b_{ij}=-\frac{1}{2}(dist_{ij}^2-b_{ii}-b_{jj})

那么:

b_{ij}=-\frac{1}{2}(dist_{ij}^2-\frac{1}{m}\sum_{j=1}^mdist_{ij}^2+\frac{1}{m}tr(B)-\frac{1}{m}\sum_{i=1}^mdist_{ij}^2+\frac{1}{m}tr(B)),\\b_{ij}=-\frac{1}{2}(dist_{ij}^2-\frac{1}{m}\sum_{j=1}^mdist_{ij}^2+\frac{2}{m}tr(B)-\frac{1}{m}\sum_{i=1}^mdist_{ij}^2)

第四个式子中我们两边同时除以m^2,那么就会有

\frac{1}{m^2}\sum_{i=1}^m\sum_{j=1}^mdist_{ij}^2=\frac{2}{m}tr(B)

至此上面的b_{ij}表达式则可以全部由均值替代。

b_{ij}=-\frac{1}{2}(dist_{ij}^2-dist_{i·}^2-dist_{·j}^2+dist_{··}^2)

矩阵B算出来之后则需要对B进行分解使得B=V\Lambda V^T,其中Λ \LambdaΛ就是对角矩阵每个值对应一个特征向量,这些特征向量可以拼成V矩阵,可以找到几个比较小的或者说几乎接近于0的特征值对应的特征向量然后把特征值和特征向量去掉,重新组成新的特征向量矩阵 (V_{*} )和新的特征值对角阵(\Lambda_{*}),则Z可表达为Z=\Lambda_{*}^{1/2}V_{*}^T.

三、主成分分析

主成分分析(Principal Component Analysis,简称PCA):一种常用的降维方法

可以表达所有样本的超平面性质:

  • 最近重构性:样本点到这个超平面的距离都足够近;
  • 最大可分性:样本点在这个超平面上的投影能尽可能分开.

基于最近重构性:

考虑整个训练集,原样本点x_{i}与基于投影重构的样本点\hat{x_{i}}元之间的距离为

根据最近重构性,上式应被最小化,考虑到w_{j}是标准正交基,是协方差矩阵,有

基于最大可分性: 

投影后样本点的方差是,于是优化目标可写为

PCA算法: 

四、核化线性降维

例:三维空间中观察到的3000个样本点,是从本真二维空间中矩形区域采样后以S形曲面嵌入,此情形下线性降维会丢失低维结构.图中数据点的染色显示出低维空间的结构.

非线性降维的一种常用方法,是基于核技巧对线性降维方法进行“核化”(kernelized)。

核主成分分析(Kernelized PCA,间称KPCA):
假定我们将在高维特征空间中把数据投影到由W确定的超平面上,即PCA欲求解

其中z_{i}是样本点x_{i}在高维特征空间中的像.易知

其中.假定z_{i}是由原始属性空间中的样本点x_{i}通过映射\phi产生,即z_{i}= \phi (x_{i} ), i = 1,2,..., m.若\phi能被显式表达出来,则通过它将样本映射至高维特征空间,再在特征空间中实施PCA即可.则:

一般情形下,我们不清楚\phi的具体形式,于是引入核函数得:

其中K为k对应的核矩阵,.

五、流形学习

流形学习(manifold learning)是一类借鉴了拓扑流形概念的降维方法.

流形”在局部具有欧氏空间的性质,能用欧氏距离来进行距离计算.

  • 若低维流形嵌入到高维空间中,以容易地在局部建立降维映射关系,然后再设法将局部映射关系推广到全局.
  • 当维数被降至二维或三维时,能对数据进行可视化展示.

等度量映射

等度量映射(Isometric Mapping,简称Isomap)[Tenenbaum et al., 2000]的基本出发点,是认为低维流形嵌入到高维空间之后,直接在高维空间中计算直线距离具有误导性

利用流形在局部上与欧氏空间同胚这个性质,对每个点基于欧氏距离找出其近邻点,然后就能建立一个近邻连接图,图中近邻点之间存在连接,而非近邻点之间不存在连接,于是,计算两点之间测地线距离的问题,就转变为计算近邻连接图上两点之间的最短路径问题(Dijkstra算法Floyd算法)

Isomap算法描述:

对近邻图的构建通常有两种做法:

  • 一种是指定近邻点个数,例如欧氏距离最近的k个点为近邻点,这样得到的近邻图称为k近邻图;
  • 另一种是指定距离阈值\epsilon,距离小于\epsilon的点被认为是近邻点,这样得到的近邻图称为\epsilon近邻图.

近邻范围指定得较大,“短路”问题;

近邻范围指定得较小,“断路”问题.

局部线性嵌入

局部线性嵌入(Locally Linear Embedding,简称LLE)试图保持邻域内样本之间的线性关系.

如上图所示,假定样本点x_{i}的坐标能通过它的邻域样本x_{j},x_{k},x_{l}的坐标通过线性组合而重构出来,即

 LLE先为每个样本x_{i}找到其近邻下标集合Q_{i},然后计算出基于Q_{i}中的样本点对x_{i}进行线性重构的系数w_{i}:

其中x_{i}x_{j}均为已知,令w_{ij}有闭式解

LLE在低维空间中保持w_{i}不变,于是x_{i}对应的低维空间坐标z_{i}可通过下式求解:


LLE算法描述:

六、度量学习

欲对距离度量进行学习,必须有一个便于学习的距离度量表达形式.

平方欧氏距离:

引入属性权重w,得到

将W替换为一个普通的半正定对称矩阵M;于是就得到了马氏距离(Mahalanobis distance)

其中M亦称“度量矩阵”,而度量学习则是对M进行学习.注意到为了保持距离非负且对称,M必须是(半)正定对称矩阵,即必有正交基Р使得M能写为M = PP^{T}.


 

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值