天天看點

降維算法PCA的應用----高維資料的可視化

文章目錄

    • 序言
    • 廢話不多說看代碼
      • 導入相關子產品
      • 資料提取
      • 降維
        • 降維後資料資訊展示
        • 新的特征矩陣
      • 可視化
        • 關于X_dim2[y==i, 0]的解釋
    • 總結

序言

當我們拿到一堆資料的時候,幾乎不可能通過我們的肉眼分辨出資料的分布情況,這時候就想要通過圖展示資料的分布,但是現實中資料往往次元很高,而我們人類能看到的最高次元就三維,這時我們就可以通過降維算法PCA将次元降低到三位之下,便于我們觀察資料的分布。注意點這裡講的方式隻适用于分類型标簽資料的可視化

廢話不多說看代碼

本次使用的資料是sklearn自帶的鸢尾花資料集

導入相關子產品

from sklearn.datasets import load_iris
from sklearn.decomposition import PCA
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline
           

資料提取

# 提取特征和标簽
iris = load_iris()
X = iris['data']
y = iris['target']
           

降維

# 執行個體化PCA,并實作資料降維
pca_2 = PCA(n_components=2)
X_dim2 = pca_2.fit_transform(X)
           

降維後資料資訊展示

# 通過explained_variance_s屬性檢視降維後的每個特征的可解釋性方差的大小
# 方差越大帶有的有效資訊越大
pca_2.explained_variance_
# array([4.22824171, 0.24267075])
           
# 通過explained_variance_ratio_屬性檢視降維後的每個特征所占資訊量占原始資訊量的比例
pca_2.explained_variance_ratio_
# array([0.92461872, 0.05306648])
           
# 檢視降維後的所有特征資訊量占原始資料的比例
pca_2.explained_variance_ratio_.sum()
# 0.9776852063187949
           

97%的展現率,可以說畫出來的圖基本接近原始資料的分布的

新的特征矩陣

降維算法PCA的應用----高維資料的可視化

可視化

# 可視化
# 将第一個特征作為x,第二個特征作為y

color = ['red', 'green', 'blue']

# 取出标簽中的所有類别
label = np.unique(y) # [0, 1, 2]

for i in label :
	# 這裡采用的是bool索引
    x = X_dim2[y==i, 0]
    y1 = X_dim2[y==i, 1]
    plt.scatter(x, y1, c=color[i])

plt.show()
           
降維算法PCA的應用----高維資料的可視化

這就是大名鼎鼎的鸢尾花資料集的分布了。可能有一點點的誤差,畢竟新的特征舉證隻能表現原資料97%的資訊。但是資料大緻的分布情況是沒錯的

關于X_dim2[y==i, 0]的解釋

這裡能這麼做的原因在于。我沒有對我的資料進行行方向上的變化,也就是說沒有交換過行的位置。

那麼最終的資料與标簽y依然是一一對應的關系。通過這個索引獲得的資料,依然符合原資料的分布。

# 以y == 0 為例
y == 0
'''
array([ True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True,  True,  True,  True,  True,
        True,  True,  True,  True,  True, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
       False, False, False, False, False, False, False, False, False,
'''
# 周遊y,隻要遇到為0的情況,相應位置則為true。
# 最終傳回一個bool矩陣
X_dim2[y==0, 0]
# 通過y==0傳回的bool索引,取出為true對應的行,在取第一列
           

總結

降維算法PCA的真的很強大。當不知道資料分布的情況下,大可以通過降維畫出資料分布,然後再選擇比較适合的模型來進行資料的預測。

歡迎在評論區和我共同讨論