机器学习Python实战之PCA


PCA通常用来降维,降维目的:1.减少数据量,使训练加速;2.数据可视化。虽然PCA可以减少数据量,但是不能解决过拟合的情况。
PCA的步骤:
  1. 去均值
  2. 求协方差矩阵
  3. 求协方差矩阵的特征向量与特征值
  4. 找到特征值最大的对应的特征向量
  5. 将特征向量按对应特征值大小从上到下按行排列成矩阵
  6. 用需要降维的数据乘该矩阵即可
    下面给出简短示例:

import pandas as pd
import numpy as np
from sklearn.datasets import make_classification
data, label = make_classification(n_samples=1000, 
                                  n_features=2,
                                  n_informative=2,
                                  n_redundant=0,
                                  n_repeated=0, 
                                  n_classes=2, 
                                  random_state=0)
data = pd.DataFrame(data, columns=['f1', 'f2'])
data['label'] = label

去均值

data['f1'] = data['f1'] - np.mean(data['f1'])
data['f2'] = data['f2'] - np.mean(data['f2'])

求协方差矩阵

cov = np.cov(data[['f1', 'f2']].T)

协方差矩阵的特征值与特征向量

eig_value, eig_vec = np.linalg.eig(cov)

求特征值最大对应的特征向量

v_ = eig_vec[:, np.where(eig_value == np.max(eig_value))[0]]

降维

data['pca_rst'] = np.dot(data[['f1', 'f2']], v_)

sklearn中的PCA验证一下

from sklearn.decomposition import PCA
pca = PCA(n_components=1 ,random_state=0)
data['sk_pca'] = pca.fit_transform(X=data[['f1', 'f2']])
data[['pca_rst', 'sk_pca']].values.tolist()


pca.png
已邀请:

要回复问题请先登录注册

返回顶部