python图像压缩主成分分析实例_python机器学习API介绍13: 数据降维及主成分分析...

本文介绍了数据降维的重要性和主成分分析PCA在机器学习中的应用。PCA是一种常用的降维方法,通过scikit-learn库进行实现。文中展示了PCA的参数设置、模型属性和方法,并提供了鸢尾花数据集的降维实例,通过可视化展示降维效果,揭示了PCA如何帮助区分数据类别。
摘要由CSDN通过智能技术生成

数据降维概述:数据降维是机器学习领域中重要的内容,所谓的降维就是采用某种映射方法,将高维空间中的数据点映射到低维的空间中。其本质是学习一个映射函数f: x->y。其中x是原始数据点的表述,目前多使用向量表达式;y是数据点映射后的低维向量表达;通常y的维度小于x的维度。映射函数可能是显示的或者是隐式的,可能是线性的也可能是非线性的。

目前大部分降维算法是处理向量表达的数据,也有一些降维算法处理高阶张量表达式数据,之所以使用降维后的数据表示是因为在原始的高维空间中,包含冗余信息以及噪声信息,这些信息会对数据的预测产生误差,降低了准确率;通过降维,我们可以减少噪声或冗余数据带来的误差,提高预测精度,同时还可以通过该方法来寻找数据内部的本质结构。在很多算法中,降维算法成为了数据预处理的一部分,比如PCA算法(主成分分析)。

对于降维效果的评估,如果降维后性能有所提高,则说明降维起到了效果,如果将数据降维到二维或者三维,则可以通过可视化技术来直观地判断降维的效果。

主成分分析(PCA):主成分分析是一种常用的降维方法,其模型的原型为:

class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False)

参数说明:

n_components:一个整数,指定降维后的维度(如果为None,则选择它的值为min(n_samples, n_features)。如果为字符串‘mle’,则使用Minka's MLE算法来猜测降维后的维度。如果为大于0小于1的浮点数,则指定的是降维后的维数占原始维数的百分比)。

copy:一个布尔值,如果为False,则直接使用原始数据来训练,结果会覆盖原始数据所在的数组;如果为True,那么使用的是拷贝的数据来训练,结果不会覆盖原始数据所在的数组。

whiten:一个布尔值,如果为True,则会将特征向量除以n_samples倍的特征值,从而保证非相关输出的方差为1(该白化操作可能会丢失部分信息,但是有时候在接下来的机器学习阶段能够活的更好的性能)。

属性说明:

components_:主成分的数值

explained_variance_ratio_:一个数组,元素是每个主成分的explained variance的比例

mean_:一个数组,元素是每个特征的统计平均值

n_components_:一个整数,指示主成分有多少个元素

方法说明:

fit(x, y):训练模型。

transform(x):执行降维

fit_transform(x, [, y]):训练模型并降维

inverse_transform(x):逆向操作,执行升维,即将数据从低维空间逆向转化成原始空间。

注意:

decomposition.PCA是基于scipy.linalg来实现的SVD分解,因此他不能应用于稀疏矩阵,并且无法使用与大规模的数据集(因为他要求所有的数据一次加载进内存)。

实例说明

from sklearn.decomposition import PCA

import numpy as np

import matplotlib.pyplot as plt

from sklearn.datasets import load_iris

#使用scikit-learn自带的鸢尾花数据集

def load_data():

iris = load_iris()

return iris.data, iris.target

#注意:数据降维的话,其实没有一个好坏的标准,所以这里只给出降维的一些结果即可视化之后的数据处理

def test_PCA(*data):

x, y = data

pca = PCA(n_components=None)

pca.fit(x)

print("explained variance ratio:{}".format(pca.explained_variance_ratio_))

x, y = load_data()

test_PCA(x, y)

#将数据集降到2维

def plot_PCA(*data):

x, y = data

pca = PCA(n_components=2)

pca.fit(x)

x_pca = pca.transform(x)

fig = plt.figure()

ax = fig.add_subplot(1,1,1)

colors = ((1,0,0),(0,1,0),(0,0,1),(0.5,0.5,0),(0.5,1,0.5),(0.1,1,0.9))

for label, color in zip(np.unique(y), colors):

position = y == label

ax.scatter(x_pca[position, 0], x_pca[position, 1], label="target=%d"%label, color=color)

#绘图

ax.set_xlabel("x[0]")

ax.set_ylabel("y[0]")

ax.legend(loc="best")

ax.set_title("PCA decomposition")

plt.show()

x, y = load_data()

plot_PCA(x, y)

运行后的对应结果如下:

f63d9def982377e1a306a21764f599e1.png

鸢尾花数据使用PCA降到二维后的结果

由上述运行结果可知,这里运行后的个数据点分类0和1、2有明显的分辨出来,但是1和2则有部分数据重合。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值