文章目錄
-
- 序言
- 廢話不多說看代碼
-
- 導入相關子產品
- 資料提取
- 降維
-
- 降維後資料資訊展示
- 新的特征矩陣
- 可視化
-
- 關于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%的展現率,可以說畫出來的圖基本接近原始資料的分布的
新的特征矩陣
可視化
# 可視化
# 将第一個特征作為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()
這就是大名鼎鼎的鸢尾花資料集的分布了。可能有一點點的誤差,畢竟新的特征舉證隻能表現原資料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的真的很強大。當不知道資料分布的情況下,大可以通過降維畫出資料分布,然後再選擇比較适合的模型來進行資料的預測。
歡迎在評論區和我共同讨論