1. 程式人生 > 程式設計 >Python sklearn庫實現PCA教程(以鳶尾花分類為例)

Python sklearn庫實現PCA教程(以鳶尾花分類為例)

PCA簡介

主成分分析(Principal Component Analysis,PCA)是最常用的一種降維方法,通常用於高維資料集的探索與視覺化,還可以用作資料壓縮和預處理等。矩陣的主成分就是其協方差矩陣對應的特徵向量,按照對應的特徵值大小進行排序,最大的特徵值就是第一主成分,其次是第二主成分,以此類推。

基本步驟:

Python sklearn庫實現PCA教程(以鳶尾花分類為例)

具體實現

我們通過Python的sklearn庫來實現鳶尾花資料進行降維,資料本身是4維的降維後變成2維,可以在平面中畫出樣本點的分佈。樣本資料結構如下圖:

Python sklearn庫實現PCA教程(以鳶尾花分類為例)

其中樣本總數為150,鳶尾花的類別有三種,分別標記為0,1,2

程式碼

import matplotlib.pyplot as plt     #載入matplotlib用於資料的視覺化
from sklearn.decomposition import PCA   #載入PCA演算法包
from sklearn.datasets import load_iris


data=load_iris()
y=data.target
x=data.data
pca=PCA(n_components=2)  #載入PCA演算法,設定降維後主成分數目為2
reduced_x=pca.fit_transform(x)#對樣本進行降維

red_x,red_y=[],[]
blue_x,blue_y=[],[]
green_x,green_y=[],[]


for i in range(len(reduced_x)):
 if y[i] ==0:
  red_x.append(reduced_x[i][0])
  red_y.append(reduced_x[i][1])

 elif y[i]==1:
  blue_x.append(reduced_x[i][0])
  blue_y.append(reduced_x[i][1])

 else:
  green_x.append(reduced_x[i][0])
  green_y.append(reduced_x[i][1])

#視覺化
plt.scatter(red_x,red_y,c='r',marker='x')
plt.scatter(blue_x,blue_y,c='b',marker='D')
plt.scatter(green_x,green_y,c='g',marker='.')
plt.show()

結果圖

Python sklearn庫實現PCA教程(以鳶尾花分類為例)

知識拓展:python sklearn PCA 例項程式碼-主成分分析

python sklearn decomposition PCA 主成分分析

主成分分析(PCA)

1、主成分分析(Principal Component Analysis,PCA)是最常用的一種降維方法,

通常用於高維資料集的探索與視覺化,還可以用作資料壓縮和預處理

2、PCA可以把具有相關性的高維變數合成為線性無關的低維變數,稱為主成分。

主成分能夠儘可能保留原始資料的資訊

3、概念

方差:用來度量一組資料的分散程度

協方差:用來度量兩個變數之間的線性相關性程度,若兩個變數的協議差為0,二者線性無關

協方差矩陣:矩陣的特徵向量是描述資料集結構的非零向量,?? ⃗=?? ⃗

特徵向量和特徵值:? ⃗ 特徵向量,?是特徵值

4、提取:

矩陣的主成分是其協方差矩陣對應的特徵向量,按照對應的特徵值大小進行排序,最大的特徵值就是第一主成分,其次是第二主成分

5、原理:

1、對所有樣本進行中心化:xi-(x1+x2…xm)/m
2、計算樣本的協方差矩陣X(X.T)
3、對協方差矩陣X(X.T)做特徵值分解
4、取最大的d個特徵值所對應的特徵向量w1,w2…wd

輸出投影矩陣W=(w1,w2,…,wd)

6、引數說明

sklearn.decomposition.PCA(n_components=None,copy=True,whithen=False,svd_solver=‘auto',tol=0.0,

iterated_power=‘auto',random_state=None)

n_components:指定主成分的個數,即降維後資料的維度

svd_slover:設定特徵值分解的方法:‘full',‘arpack',‘randomized'

PCA實現高維度資料視覺化 例項

目標:

已知鳶尾花資料是4維的,共三類樣本,使用PCA實現對鳶尾花資料進行降維,實現在二維平面上的視覺化

例項程式編寫

import matplotlib.pyplot as plt
import sklearn.decomposition as dp
from sklearn.datasets.base import load_iris

x,y=load_iris(return_X_y=True) #載入資料,x表示資料集中的屬性資料,y表示資料標籤
pca=dp.PCA(n_components=2) #載入pca演算法,設定降維後主成分數目為2
reduced_x=pca.fit_transform(x) #對原始資料進行降維,儲存在reduced_x中
red_x,[]
for i in range(len(reduced_x)): #按鳶尾花的類別將降維後的資料點儲存在不同的表表中
 if y[i]==0:
  red_x.append(reduced_x[i][0])
  red_y.append(reduced_x[i][1])
 elif y[i]==1:
  blue_x.append(reduced_x[i][0])
  blue_y.append(reduced_x[i][1])
 else:
  green_x.append(reduced_x[i][0])
  green_y.append(reduced_x[i][1])
plt.scatter(red_x,marker='.')
plt.show()

以上這篇Python sklearn庫實現PCA教程(以鳶尾花分類為例)就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。