数据降维概述:数据降维是机器学习领域中重要的内容,所谓的降维就是采用某种映射方法,将高维空间中的数据点映射到低维的空间中。其本质是学习一个映射函数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)
运行后的对应结果如下:
鸢尾花数据使用PCA降到二维后的结果
由上述运行结果可知,这里运行后的个数据点分类0和1、2有明显的分辨出来,但是1和2则有部分数据重合。
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1823825.html