python机器学习 | PCA降维算法介绍及实现

本篇文章学习:
通俗易懂的主成分分析法(PCA)详解

这篇文章关于PCA介绍得非常详细及清楚,数学解释也相当通俗易懂,墙墙推~~

PCA降维算法介绍及实现

  • 1 PCA降维算法介绍
    • 1.1 数据降维和PCA概念
    • 1.2 PCA降维推导过程
  • 2 PCA算法实现

1 PCA降维算法介绍

1.1 数据降维和PCA概念

  • 数据降维:降维实际上就是一种对高纬度特征数据预处理的方法。我们需要通过降维将高纬度的数据保留下最重要的一些特征,去除噪声和不重要的特征,从而实现提升数据处理速度的目的。

优点:避免过拟合、降低算法的计算开销、去除噪声

  • PCA概念:PCA(Principal Component Analysis),即主成分分析方法,是一种使用最广泛的数据降维算法。PCA的主要思想是将n维特征映射到k维上,这k维是全新的正交特征也被称为主成分,是在原有n维特征的基础上重新构造出来的k维特征。

1.2 PCA降维推导过程

通俗易懂的主成分分析法(PCA)详解

这篇博客讲得有趣又清楚~

2 PCA算法实现

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv("data.csv",header=None)

# 绘制两个特征散点图
x_data = data.iloc[:,0]
y_data = data.iloc[:,1]
plt.scatter(x_data,y_data)
plt.show()

python机器学习 | PCA降维算法介绍及实现_第1张图片

"""
1.数据去中心化
- 样本数据-均值
"""
def zeroMean(dataMat):
    # 求得每个特征(列)得均值
    meanVal = np.mean(dataMat)
    # 数据-均值
    newData = dataMat - meanVal
    return meanVal,newData
    
# 接收均值 以及 去中心化之后得数据
meanVal,newData = zeroMean(data)
"""
2.求解样本协方差矩阵
- 对角线:方差
- 非对角线:协方差
"""
# 求解协方差矩阵,指定参数rowvar=0说明数据一行为一个样本
covMat = np.cov(newData,rowvar=0)
covMat
"""
将协方差矩阵分解
- 特征值
- 特征向量
"""
# np.mat将ndarray对象 转为 matrix对象
eigVals,eigVects = np.linalg.eig(np.mat(covMat))
print("特征值:",eigVals)
print("特征向量:",eigVects)
"""
取得特征值最大得哪个特征
- 排序,argsort-->升序排序,升序之后得索引位置
"""
eigValIndice = np.argsort(eigVals)
eigValIndice
# top指定降维得维数
top = 1

# 如果你要降到n维,你就得获取前n最大得特征值的索引
# 升序的,
n_eigValIndice = eigValIndice[-1:-1-top:-1]
n_eigValIndice
"""
获取最大的 n个特征值 对应的 n个 特征向量
"""
n_eigVect = eigVects[:,n_eigValIndice]
n_eigVect
"""
高维转低维:newData*最大向量
"""
# 得到降维之后的数据
lowDataMat=newData.values*n_eigVect
lowDataMat
"""
降维之后的数据重构数据:
降维后的数据*最大的n个特征向量的转置+均值 
"""
reconMat = lowDataMat*n_eigVect.T+meanVal.values
reconMat
"""
可视化数据
"""
# 绘制原始数据的图
x_data = data.iloc[:,0]
y_data = data.iloc[:,1]
plt.scatter(x_data,y_data)

# 绘制重构后的数据的图
x_data = np.array(reconMat)[:,0]
y_data = np.array(reconMat)[:,1]
plt.scatter(x_data,y_data,c="r")
plt.show()

你可能感兴趣的:(python,机器学习)