sklearn降维算法:PCA、LDA、MDS、流形学习Isomap

一、PCA降维(主成分分析)

PCA是最常用的无监督降维算法

其原理是寻找方差最大维度,只是最大化类间样本的方差
例如,已知存在数据点如下图
sklearn降维算法:PCA、LDA、MDS、流形学习Isomap_第1张图片PCA算法寻找方差最大维度
sklearn降维算法:PCA、LDA、MDS、流形学习Isomap_第2张图片

PCA案例:iris降维

%matplotlib inline

import matplotlib.pyplot as plt
from sklearn import decomposition
from sklearn import datasets

iris = datasets.load_iris()  # 加载数据集
X = iris.data  # 获取特征数据集
y = iris.target  # 获取标签数据集

pca = decomposition.PCA(n_components=2) # n_components:目标维度,需要降维成n_components个特征
pca.fit(X)
new_X = pca.transform(X)  # 生成降维后的新数据
# 也可以写成
# new_X = pca.fit_transform(X)
plt.scatter(new_X[:,0], new_X[:,1], c=y)
plt.show()

sklearn降维算法:PCA、LDA、MDS、流形学习Isomap_第3张图片

二、LDA降维(线性判别分析)

是有监督的线性分类器,需要 fit(X, y)
LDA与PCA最大区别:LDA不仅最大化类间样本的方差,同时最小化类内样本的方差

LDA案例:iris降维

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA  # 与PCA进行比较 
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

iris = datasets.load_iris()
X = iris.data
y = iris.target

plt.subplot(121)
pca = PCA(n_components=2)
pca.fit(X)
new_X_pca = pca.transform(X)
plt.scatter(new_X_pca [:,0], new_X_pca [:,1], c=y)

plt.subplot(122)
lda = LDA( n_components=2).fit(X, y)
new_X_lda = lda.transform(X)
plt.scatter(new_X_lda [:,0], new_X_lda [:,1], c=y)

sklearn降维算法:PCA、LDA、MDS、流形学习Isomap_第4张图片

三、MDS降维(多维标度法)

MDS的原理就是保持新空间与原空间的相对位置关系不变
常用于市场调研、心理学数据分析

MDS案例:iris降维

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA   # 与MDS进行对比
from sklearn.manifold import MDS
    
ris = datasets.load_iris()
X = iris.data
y = iris.target

plt.subplot(121)
pca = PCA(n_components=2)
pca.fit(X)
new_X_pca = pca.transform(X)
plt.scatter(new_X_pca [:,0], new_X_pca [:,1], c=y)

plt.subplot(122)
mds = MDS( n_components=2, metric=True)
new_X_mds = mds.fit_transform(X)
plt.scatter(new_X_mds [:,0], new_X_mds [:,1], c=y)

sklearn降维算法:PCA、LDA、MDS、流形学习Isomap_第5张图片

四、流形学习Isomap

流形学习是非线性降维的主要方法,如手写数字集的降维
是MDS在流形学习上的扩展
原理:将非欧几里德空间转换从欧几里德空间,将非欧几里得空间拆解成一个一个的欧几里得空间
MDS和Isomap都是保留全局特征的非线性数据降维算法,且出发点都是基于距离保持。不同的是MDS是基于欧式距离,Isomap则是测地线距离
测地线距离:地球两个城市的距离无法使用两点之间直线最短的距离,只能依附地球表面的弧形来计算距离
根据邻近的点计算,超参数n_neighbors来设置邻近点的个数

Isomap案例:iris

import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.manifold import Isomap

iris = datasets.load_iris()
X = iris.data
y = iris.target

fig, ax = plt.subplots(1,3,figsize=(15, 5)) 

for idx, neighbor in enumerate([2, 20, 100]): 
    isomap = Isomap( n_components=2, n_neighbors=neighbor)
    new_X_isomap = isomap.fit_transform(X)

    ax[idx].scatter(new_X_isomap[:,0], new_X_isomap[:,1], c=y)
    ax[idx].set_title("Isomap (n_neighbors=%d)"%neighbor)

plt.show()

sklearn降维算法:PCA、LDA、MDS、流形学习Isomap_第6张图片可见,当n_neighbors=100时,效果最好。

你可能感兴趣的:(sklearn降维算法:PCA、LDA、MDS、流形学习Isomap)