数据预处理系列:(十二)用截断奇异值分解降维
来源:互联网 发布:js encodeuri 解码 编辑:程序博客网 时间:2024/06/06 09:45
声明:版权所有,转载请联系作者并注明出处 http://blog.csdn.net/u013719780
用截断奇异值分解降维
截断奇异值分解(Truncated singular value decomposition,TSVD)是一种矩阵因式分解(factorization)技术,将矩阵
Getting ready
TSVD与一般SVD不同的是它可以产生一个指定维度的分解矩阵。例如,有一个
这里我们还用iris
数据集来演示TSVD:
from sklearn.datasets import load_irisiris = load_iris()iris_data = iris.data
How to do it...
TSVD对象的用法和其他对象类似。首先导入需要的类,初始化,然后拟合:
from sklearn.decomposition import TruncatedSVD
svd = TruncatedSVD(2)iris_transformed = svd.fit_transform(iris_data)iris_data[:5]
iris_transformed[:5]
最终结果如下图所示:
%matplotlib inlineimport matplotlib.pyplot as pltf = plt.figure(figsize=(5, 5))ax = f.add_subplot(111)ax.scatter(iris_transformed[:, 0], iris_transformed[:, 1], c=iris.target)ax.set_title("Truncated SVD, 2 Components")
How it works...
现在我们演示了scikit-learn的TruncatedSVD
模块,让我们看看只用scipy
学习一些细节。
首先,我们用scipy
的linalg
处理SVD:
import numpy as npfrom scipy.linalg import svdD = np.array([[1, 2], [1, 3], [1, 4]])D
U, S, V = svd(D, full_matrices=False)U.shape, S.shape, V.shape
我们可以根据SVD的定义,用
np.diag(S)
np.dot(U.dot(np.diag(S)), V)
TruncatedSVD
返回的矩阵是
new_S = S[0]new_U = U[:, 0]new_U.dot(new_S)
一般情况下,如果我们想要截断维度
There's more...
TruncatedSVD
还有一些细节需要注意。
符号翻转(Sign flipping)
TruncatedSVD
有个“陷阱”。随着随机数生成器状态的变化,TruncatedSVD
连续地拟合会改变输出的符合。为了避免这个问题,建议只用TruncatedSVD
拟合一次,然后用其他变换。这正是管线命令的另一个用处。
要避免这种情况,可以这样:
tsvd = TruncatedSVD(2)tsvd.fit(iris_data)tsvd.transform(iris_data)[:5]
稀疏矩阵
TruncatedSVD
相比PDA的一个优势是TruncatedSVD
可以操作PDA处理不了的矩阵。这是因为PCA必须计算协方差矩阵,需要在整个矩阵上操作,如果矩阵太大,计算资源可能会不够用。
- 数据预处理系列:(十二)用截断奇异值分解降维
- TSVD截断奇异值分解
- 机器学习_用SVD奇异值分解给数据降维
- 数据降维处理:PCA之奇异值分解(SVD)介绍
- 数据降维:特征值分解和奇异值分解的实战分析
- 【机器学习系列】SVD奇异值分解(python代码)
- 算法系列-----矩阵(九)-------------矩阵SVD---奇异值分解
- 【机器学习系列】特征值、奇异值以及奇异值分解
- 特征值分解 & 奇异值分解(SVD)
- 奇异值分解(SVD)
- svd(奇异值分解)
- 奇异值分解(SVD)
- 奇异值分解(SVD)
- 奇异值分解(SVD)
- 奇异值分解(SVD)
- 奇异值分解(SVD)
- PYTHON机器学习实战——SVD奇异值分解 数据降维
- 【简化数据】奇异值分解(SVD)
- thrift中required和optional的用处
- Retrofit+OKHttp实现缓存以及遇到的问题
- dubbo框架初始 以及个人归纳
- 不重复ip问题
- 正则表达式基本语法和正则表达式集
- 数据预处理系列:(十二)用截断奇异值分解降维
- qss 美化groupbox
- 代码性能优化
- mac系统如何显示和隐藏文件
- 剖析Disruptor:为什么会这么快?(三)揭秘内存屏障
- Android中 获取某控件X Y轴坐标值
- Fresco对Listview等快速滑动时停止加载
- Python学习历程
- JSON 和 List之互相转换