1. 程式人生 > 其它 >python機器學習 | PCA降維演算法介紹及實現

python機器學習 | PCA降維演算法介紹及實現

技術標籤:python機器學習

本篇文章學習:
通俗易懂的主成分分析法(PCA)詳解

這篇文章關於PCA介紹得非常詳細及清楚,數學解釋也相當通俗易懂,牆牆推~~

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()

在這裡插入圖片描述

"""
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()