Iris数据集使用PCA/LDA/KPCA降维的结果比较

该博客探讨了在Iris数据集上使用PCA、LDA和KPCA进行降维的效果。PCA是无监督降维方法,力求最大化投影后数据的方差;LDA是有监督降维,注重类别间的方差和组内的方差。KPCA作为PCA的非线性版本,通过非线性映射增强分类能力。通过可视化工具,作者比较了三种方法的降维结果,并指出在有标签数据时,LDA能提供更好的分类性能。

一、实验描述
分别使用PCA、LDA和KPCA方法对Iris数据集进行降维,利用可视化工具比较降维的效果。

二、分析及设计
Principal component analysis(PCA) 算法简介
PCA的思想就是将n维特征映射到k维上(k<n),这k维是重新构造出来的全新维度特征,而不是简单的从n维特征去除n-k维特征,这k维就是主成分。

对数据中心化
求特征的协方差矩阵
求协方差矩阵的特征值和特征向量
取最大的k个特征值所对应的特征向量
将样本点投影到选取的特征向量上
Linear Discriminant Analysis(LDA) 算法简介
可以参考这篇教程

Kernel Principal component analysis(KPCA) 算法简介
KernelPCA是PCA的一个改进版,它将非线性可分的数据转换到一个适合对齐进行线性分类的新的低维子空间上,核PCA可以通过非线性映射将数据转换到一个高维空间中,在高维空间中使用PCA将其映射到另一个低维空间中,并通过线性分类器对样本进行划分。

核函数:通过两个向量点积来度量向量间相似度的函数。常用函数有:多项式核、双曲正切核、径向基和函数(RBF) (高斯核函数)等。

三、详细实现
导入需要的模块以及数据

from sklearn.datasets import load_iris
import numpy as np
from sklearn import decomposition
import matplotlib.pyplot as plt
def load_data():
    return load_iris()

def load_data_tag():
    iris = load_data()
    return iris.data, iris.target

1.PCA

def PCA(data, n):
    from sklearn.decomposition import PCA
    pca = PCA(n_components=n)
    pca_result = pca.fit_transform(data.data)
    return pca_result

2.LDA

def LDA(data, n):
    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
    lda = LDA(n_components=n)
    lda_result = lda.fit_transform(data.data, data.target)
    return lda_result

3.PCA和LDA的可视化

def plot(data, n):
    pca_result = PCA(data, n)
    lda_result = LDA(data, n)

    plt.subplot(1, 2, 1)
    plt.scatter(pca_result[data.target == 0, 0], pca_result[data.target == 0, 1], color='r')
    plt.scatter(pca_result[data.target == 1, 0], pca_result[data.target == 1, 1], color='g')
    plt.scatter(pca_result[data.target == 2, 0], pca_result[data.target == 2, 1], color='b')
    plt.title('PCA on iris')

    plt.subplot(1, 2, 2)
    plt.scatter(lda_result[data.target == 0, 0], lda_result[data.target == 0, 1], color='r')
    plt.scatter(lda_result[data.target == 1, 0], lda_result[data.target == 1, 1], color='g')
    plt.scatter(lda_result[data.target == 2, 0], lda_result[data.target == 2, 1], color='b')
    plt.title('LDA on iris')

    plt.show()

四、实验结果
在这里插入图片描述
五、心得体会
简单总结如下:

PCA为非监督降维,LDA为有监督降维。 PCA希望投影后的数据方差尽可能的大(最大可分性),因为其假设方差越多,则所包含的信息越多;而LDA则希望投影后相同类别的组内方差小,而组间方差大。LDA能合理运用标签信息,使得投影后的维度具有判别性,不同类别的数据尽可能的分开。

举个简单的例子,在语音识别领域,如果单纯用PCA降维,则可能功能仅仅是过滤掉了噪声,还是无法很好的区别人声,但如果有标签识别,用LDA进行降维,则降维后的数据会使得每个人的声音都具有可分性,同样的原理也适用于脸部特征识别。 所以,可以归纳总结为有标签就尽可能的利用标签的数据(LDA),而对于纯粹的非监督任务,则还是得用PCA进行数据降维
具体代码如下:

from sklearn.datasets import load_iris
import numpy as np
from sklearn import decomposition
import matplotlib.pyplot as plt


def load_data():
    return load_iris()


def load_data_tag():
    iris = load_data()
    return iris.data, iris.target


def PCA(data, n):
    from sklearn.decomposition import PCA
    pca = PCA(n_components=n)
    pca_result = pca.fit_transform(data.data)
    return pca_result


def LDA(data, n):
    from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA
    lda = LDA(n_components=n)
    lda_result = lda.fit_transform(data.data, data.target)
    return lda_result


def plot(data, n):
    pca_result = PCA(data, n)
    lda_result = LDA(data, n)

    plt.subplot(1, 2, 1)
    plt.scatter(pca_result[data.target == 0, 0], pca_result[data.target == 0, 1], color='r')
    plt.scatter(pca_result[data.target == 1, 0], pca_result[data.target == 1, 1], color='g')
    plt.scatter(pca_result[data.target == 2, 0], pca_result[data.target == 2, 1], color='b')
    plt.title('PCA on iris')

    plt.subplot(1, 2, 2)
    plt.scatter(lda_result[data.target == 0, 0], lda_result[data.target == 0, 1], color='r')
    plt.scatter(lda_result[data.target == 1, 0], lda_result[data.target == 1, 1], color='g')
    plt.scatter(lda_result[data.target == 2, 0], lda_result[data.target == 2, 1], color='b')
    plt.title('LDA on iris')

    plt.show()
if __name__ == '__main__':
    iris = load_data()
    X, y = load_data_tag()
    n_components = 2

    plot(iris, n_components)
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值