Locally Linear Emding(LLE降维) 算法讲解及Python 实现
纪念一下我的第一篇技术贴
#coding=UTF-8 from numpy import * import scipy.io as sio import os import matplotlib.pyplot as pltdef lle(data, K, d):N = data.shape[0] #求数组的行数 D = data.shape[1] #求数组的列数 X = mat(data).T #mat()方法使data数据转换为矩阵。.T 是求转置 X_2 = sum(data**2, axis=1) #矩阵X中每列元素平方后相加 #行方向吧X2 复制N份,列方向上复制1份 dis = tile(X_2, (N, 1)) - tile(array([X_2]).T, (1, N)) - 2*dot(data, data.T)index = argsort(dis) #从小到大排序返回索引值 neighbour = index[:, 1:K+1] #每个点未排序前的位置序号 #step2:计算重构权值 if K > D:tol = 1e-3 else:tol = 0 W = mat(zeros((K, N)))for ii in range(N):Q= X[:, neighbour[ii]]-tile(X[:, ii], (1, K)) #Q=[Xi-Zi1,....] C = Q.T*Q #本地协方差 C = C + eye(K) * tol * trace(C) #(K>D时要正则化)C+的部分迭代终止误差限,防止C过小,对数据正则化,为了数据的统一 W[:, ii] = linalg.inv(C)*mat(ones((K, 1))) # W[:, ii] = W[:, ii] / sum(W[:, ii]) #归一化,计算权重矩阵 #计算矩阵M=(I-W_).T*(I-W_)的最小d个非零特征值对应的特征向量 W_ = zeros((N,N))for i in range(N):W_[i][neighbour[i]] = array(W[:, i].T)[0]W_ = mat(W_)I = mat(eye(N))M = (I-W_).T*(I-W_)eig, vec = linalg.eig(mat(M))order = argsort(eig)vec = vec[:, order]Y = vec[:, 1:d+1]return array(Y)if __name__=="__main__":path = './synthetic_data' data_name = 'Gaussian_1000.mat' save_path = './synthetic_result' data_path = path + './' + data_nameMAT = sio.loadmat(data_path)d = 2 data = MAT['X']c = MAT['ColorVector']K = 10 Y = lle(data, K, d)if not os.path.exists(save_path):os.mkdir(save_path)sio.savemat(save_path + r"/" + str(d) + 'D' + data_name, {'Y': Y})fig = plt.figure(1)plt.scatter(Y[:, 0], Y[:, 1], c=c, cmap=plt.cm.jet)plt.show()print 'complete'
Locally Linear Emding(LLE降维) 算法讲解及Python 实现相关推荐
- 【Python机器学习】PCA降维算法讲解及二维、高维数据可视化降维实战(附源码 超详细)
需要全部代码请点赞关注收藏后评论区留言私信~~~ 维数灾难 维数灾难是指在涉及到向量计算的问题中,当维数增加时,空间的体积增长得很快,使得可用的数据在空间中的分布变得稀疏,向量的计算量呈指数倍增长的一 ...
- 局部线性嵌入(Locally Linear Embedding, LLE)
主要思想 LLE将 D D D维特征 X = [ x 1 , x 2 , ⋯ , x N ] ∈ R D × N \mathbf{X}=[\mathbf{x}_1, \mathbf{x}_2, \cd ...
- K近邻算法讲解与python实现(附源码demo下载链接)
k近邻算法概述 对应demo源码及数据:传送门 K近邻(k-Nearest Neighbor,简称kNN)算法,是一种应用很广泛的监督学习算法.它非常有效且易于掌握,其工作机制也很简单:给定测试样本, ...
- 10 降维算法(PCA降维/LDA分类/NMF非负矩阵)
数据降维简介 降维就是一种对高维度特征数据预处理方法.降维是将高维度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的. 降维具有如下一些优点: 减少所需的存储空间. ...
- 机器学习降维算法三:LLE (Locally Linear Embedding) 局部线性嵌入
LLE Locally linear embedding(LLE)[1] 是一种非线性降维算法,它能够使降维后的数据较好地保持原有流形结构.LLE可以说是流形学习方法最经典的工作之一.很多后续的流形学 ...
- 四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps
四大机器学习降维算法:PCA.LDA.LLE.Laplacian Eigenmaps 引言 机器学习领域中所谓的降维就是指采用某种映射方法,将原高维空间中的数据点映射到低维度的空间中.降维的本质是学习 ...
- 第五章 LLE——Locally Linear Embedding
[IOC] 概念 Locally Linear Embedding LLE LLE是一种非线性的降维方法,数据是局部线性的,也就是在小范围内,数据是线性的,那每个数据点就可以用k邻近的数据点的线性组合 ...
- PCA、LDA、MDS、LLE、TSNE等降维算法的Python实现
整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) [导读]网上关于各种降维算法的资料参差不齐,但大部分不提供源代码.近日,有人在 GitHub 上整理了一些经典降维算法的 Demo ...
- python用tsne降维_哈工大硕士实现了 11 种经典数据降维算法,源代码库已开放
网上关于各种降维算法的资料参差不齐,同时大部分不提供源代码.这里有个 GitHub 项目整理了使用 Python 实现了 11 种经典的数据抽取(数据降维)算法,包括:PCA.LDA.MDS.LLE. ...
最新文章
- 还有多久才能用上2000元以下的5G手机?答案来了
- C++中的重载、覆盖、隐藏对比
- 《编写高质量Python代码的59个有效方法》——第10条:尽量用enumerate取代range
- 作业4(列表增加或者修改)
- spark官方文档_Apache Spark 文档传送门
- 如何实现一个优质的微服务框架:Apache ServiceComb 的开放性设计
- Unity2017.1官方UGUI文档翻译——Scrollbar
- 通俗易懂SpringMVC整体框架理解
- 假如购买的期房不小心烂尾了,那银行贷款是否可以不还了?
- 自动化测试中Python与C/C++的混合使用
- [Bugku][Web][CTF] 9-15 write up
- python 描述性分析_描述性分析-1对被解释变量进行描述
- bzoj 3379: [Usaco2004 Open]Turning in Homework 交作业(区间DP)
- 190623每日一句
- win10 把软件窗口背景设置成豆沙绿
- DaZeng:Vue全家桶实现小米商城(二)
- EXCEL中数字显示为E+18且尾数为0的解决方法
- 老树发新芽-前后端分离实践
- Titan数据库简介
- 在Spring MVC框架下利用RESTful API和MongoDB实现用户留言与邮件反馈