使用奇异值分解抽取特征

降为方法:

  • 将相关变量转换为一系列不相关的变量。这样,我们面对数据中解释相关性的维数就减少了,并且没有丢失信息
  • 发现主轴,其上记录了数据的大部分变化

奇异值分解(Singular Value Decomposition,SVD)是另一种矩阵分解技术,用来解决维度问题带来的麻烦,可以用较低的维数找到原始数据的最佳近似 和PCA不同的是,SVD直接作用于原始数据矩阵


In [1]:
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
import numpy as np
from sklearn.preprocessing import scale
from scipy.linalg import svd

In [2]:
# load data
data = load_iris()
x = data['data']
y = data['target']

In [4]:
# scale the x by mean of x
x_s =scale(x,with_mean=True,with_std=False,axis=0)

In [5]:
# svd技术分解
U,S,V = svd(x_s,full_matrices=False)

In [6]:
# top 2
x_t = U[:,:2]

In [7]:
# plot the figure
plt.close('all')
plt.figure(1)
plt.scatter(x_t[:,0],x_t[:,1],c=y)
plt.xlabel('componet 1')
plt.ylabel('componet 2')
plt.show()