数据预处理系列:(十一)用核PCA实现非线性降维
来源:互联网 发布:ubuntu查找已安装软件 编辑:程序博客网 时间:2024/06/13 19:39
声明:版权所有,转载请联系作者并注明出处 http://blog.csdn.net/u013719780
用核PCA实现非线性降维
由于大多数统计方法最开始都是线性的,所以,想解决非线性问题,就需要做一些调整。PCA也是一种线性变换。本主题将首先介绍它的非线性形式,然后介绍如何降维。
Getting ready
如果数据都是线性的,生活得多容易啊,可惜现实并非如此。核主成分分析(Kernel PCA)可以处理非线性问题。数据先通过核函数(kernel function)转换成一个新空间,然后再用PCA处理。
要理解核函数之前,建议先尝试如何生成一个能够通过核PCA里的核函数线性分割的数据集。下面我们用余弦核(cosine kernel)演示。这个主题比前面的主题多一些理论。
How to do it...
余弦核可以用来比例样本空间中两个样本向量的夹角。当向量的大小(magnitude)用传统的距离度量不合适的时候,余弦核就有用了。
向量夹角的余弦公式如下:
向量A和B夹角的余弦是两向量点积除以两个向量各自的L2范数。向量A和B的大小不会影响余弦值。
让我们生成一些数据来演示一下用法。首先,我们假设有两个不同的过程数据(process),称为A和B:
import numpy as npA1_mean = [1, 1]A1_cov = [[2, .99], [1, 1]]A1 = np.random.multivariate_normal(A1_mean, A1_cov, 50)A2_mean = [5, 5]A2_cov = [[2, .99], [1, 1]]A2 = np.random.multivariate_normal(A2_mean, A2_cov, 50)A = np.vstack((A1, A2))B_mean = [5, 0]B_cov = [[.5, -1], [.9, -.5]]B = np.random.multivariate_normal(B_mean, B_cov, 100)
import matplotlib.pyplot as plt%matplotlib inlinef = plt.figure(figsize=(10, 10))ax = f.add_subplot(111)ax.set_title("$A$ and $B$ processes")ax.scatter(A[:, 0], A[:, 1], color='r')ax.scatter(A2[:, 0], A2[:, 1], color='r')ax.scatter(B[:, 0], B[:, 1], color='b')
上图看起来明显是两个不同的过程数据,但是用一超平面分割它们很难。因此,我们用前面介绍带余弦核的核PCA来处理:
from sklearn.decomposition import KernelPCAkpca = KernelPCA(kernel='cosine', n_components=1)AB = np.vstack((A, B))AB_transformed = kpca.fit_transform(AB)
A_color = np.array(['r']*len(B))B_color = np.array(['b']*len(B))colors = np.hstack((A_color, B_color))f = plt.figure(figsize=(10, 4))ax = f.add_subplot(111)ax.set_title("Cosine KPCA 1 Dimension")ax.scatter(AB_transformed, np.zeros_like(AB_transformed), color=colors);
用带余弦核的核PCA处理后,数据集变成了一维。如果用PCA处理就是这样:
from sklearn.decomposition import PCApca = PCA(1)AB_transformed_Reg = pca.fit_transform(AB)f = plt.figure(figsize=(10, 4))ax = f.add_subplot(111)ax.set_title("PCA 1 Dimension")ax.scatter(AB_transformed_Reg, np.zeros_like(AB_transformed_Reg), color=colors)
很明显,核PCA降维效果更好。
How it works...
scikit-learn提供了几种像余弦核那样的核函数,也可以写自己的核函数。默认的函数有:
- 线性函数(linear)(默认值)
- 多项式函数(poly)
- 径向基函数(rbf,radial basis function)
- S形函数(sigmoid)
- 余弦函数(cosine)
- 用户自定义函数(precomputed)
还有一些因素会影响核函数的选择。例如,degree
参数可以设置poly
,rbf
和sigmoid
核函数的角度;而gamma
会影响rbf
和poly
核,更多详情请查看KernelPCA
文档。
后面关于支持向量机(SVM)的主题中将会进一步介绍rbf
核函数。
需要注意的是:核函数处理非线性分离效果很好,但是一不小心就可能导致拟合过度。
- 数据预处理系列:(十一)用核PCA实现非线性降维
- (Python实现)数据PCA降维白化和L2归一化-深度学习实践常用数据预处理
- 数据预处理之数据降维 PCA法
- 机器学习数据预处理:数据降维之PCA
- 机器学习数据预处理:数据降维之PCA
- 数据预处理系列:(九)用主成分分析(PCA)降维
- 数据预处理系列:(十)用因子分析降维
- 非线性PCA
- 数据预处理:PCA原理推导
- PCA数据降维
- 数据降维(pca)
- 数据降维PCA
- PCA降维实现
- 数据降维(基于PCA)
- 数据预处理系列:(十二)用截断奇异值分解降维
- 数据预处理--数据降维
- 数据预处理--数据降维
- PCA降维及其实现
- 阿里云分布式缓存OCS与DB之间的数据一致性
- 通信接口
- #121 – Being Notified When the Value of a Dependency Property Changes(属性值改变通知)
- 禁止DatePickerDialog弹出键盘
- safari打开的页面数字识别变为蓝色
- 数据预处理系列:(十一)用核PCA实现非线性降维
- 从git库中导出项目
- UIKit框架各个类的简要说明
- 安装hadoop2.5.2插件
- UITableView的style的区别与用法,以及分割线的显示与隐藏
- vmware workstation 12 序列号
- Servlet学习
- 51nod 1021 石子归并 dp
- Java获取路径方法&相对路径读取xml文件方法