Introduction to Dimension Reduction
在現實生活中,一筆資料可能會有許多欄位,如交易資料會有交易日期,時間,數量等欄位,而天氣資料會有氣溫,氣壓,濕度等,視資料屬性而定還會有超高維度資料存在(如100x100大小的灰階圖片資料可以看成是10,000維的資料,若為RGB彩色圖片就是高達30,000維的高維資料)在處理這些高維資料時會需要耗費許多時間與空間進行處理資料,且時常會包含較不重要的維度資料在其中,並增加資料複雜度。因此在進行高維資料處理時,常使用被稱為**資料降維(Dimension Reduction)**的技術,將高維資料轉換為低維資料,以利後續的資料處理。
Introduction
為了處理因資料維度過高而產生的問題(Curse of dimension)所產生的降維技術,可大致上分為 Feature Selection 與 Feature Extraction兩種類型的方法。
-
Feature Selection(特徵選擇):直接從原始資料集中挑選適合的特徵維度進行分析,即直接捨棄部分原始資料維度。
-
Feature Extraction(特徵擷取):透過演算法將原始資料轉換為新資料,即將所有資料維度當成輸入,並透過演算法產生降維過的資料集。
兩個方法各有不同的應用領域,而往後的主題將主要集中在討論Feature Extraction的部分。
Concept
假設資料
$$X$$包含
$$n$$維資料,即
$$X=\{x_1, x_2, \ldots, x_n\}$$,我們希望將
$$X$$降維成
$$k$$維的資料
$$Z$$,即
$$Z=\{z_1, z_2, \ldots, z_k\}$$,
$$k \leq n$$,如
$$Z$$能保留高維資料
$$X$$的某些關係性,我們即可稱
$$Z$$為
$$X$$的降維資料。
降維後的
$$Z$$資料因資料維度低,且經過演算法分析去除影響力低,凸顯出更為本質的部分,對往後資料計算的負荷量,保存的空間大小,資料視覺化等都有相當程度的助益。
Example
在之後的範例將使用Iris flower data set (鳶尾花卉數據集),並用PCA演算法進行一個簡單的降維資料示範。由於使用的程式語言工具是Python以及相關套件做示範,未安裝人員可先參考以下網站簡介了解並安裝相關套件。
- Python:一套直譯式程式語言,有許多統計或機器學習的套件可使用。
- Sciki-learn:Python的一套機器學習套件,提供了許多函式庫可供使用。
- Matplotlib:Python上的繪圖函式庫。
Iris flower data set
Iris data set 是英國統計學家 Ronald Fisher 爵士在1936年時,對加斯帕半島上的鳶尾屬花朵所提取的Petal(花瓣)與Sepal(花萼)的長寬數據,類別分別為setosa(山鳶尾),versicolor(變色鳶尾)與virginica(維吉尼亞鳶尾)等三類共150筆的資料。資料內容如下表所示
Sepal Length | Sepal Width | Petal Length | Petal Width | Label | |
---|---|---|---|---|---|
5.1 | 3.5 | 1.4 | 0.2 | setosa | |
4.9 | 3.0 | 1.4 | 0.2 | setosa | |
7.0 | 3.2 | 4.7 | 1.4 | versicolor | |
6.4 | 3.2 | 4.5 | 1.5 | versicolor | |
6.3 | 3.3 | 6.0 | 2.5 | virginica | |
5.8 | 2.7 | 5.1 | 1.9 | virginica | |
… | … | … | … | … |
時至今日,該資料集以成為經典的數據資料並常作為為範例來使用。由於該資料集已包含在Sciki-learn的套件中,可直接由套件中讀取使用,也可自行下載原始資料集。
因 Iris dataset 為四維資料,無法直接進行資料視覺化,以下使用 PCA 將該資料降低至二維,並以 Matplotlib 繪製二維資料展示降維結果。
Code
執行下列Python Code進行PCA降維
# 匯入相關 Package
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.decomposition import PCA
# 取得 Iris data set
iris = datasets.load_iris()
iris_label = iris.target
# 設定 PCA Model參數並對 data set進行降維
pca_model = PCA(n_components=3)
pca_result = pca_model.fit_transform(iris.data)
# 繪製資料2D表示圖,並將不同類別加上顏色標示
for idx, label in enumerate(iris_label):
if label == 0:
color = 'ro'
elif label == 1:
color = 'go'
elif label == 2:
color = 'bo'
else:
continue
x = pca_result[idx, 0]
y = pca_result[idx, 1]
plt.plot(x, y, color)
Result
下圖為將 Iris dataset 以 PCA 降到二維資料後,將不同種類花朵以不同顏色顯示出來的結果。
其中紅色代表 setosa,綠色代表 versicolor,藍色為 virginica。 可以看出使用PCA轉換將原始資料從4維降低到2維後,不同種類的花朵仍有不同的分布區域。代表即使資料維度降低了但資料間關係性仍然存在,達到了資料降維的目的。
而除了 PCA 外,也有其他如 MDS,Isomap,LDA與LLE等,以及透過 Neural Network的Autoencode等相關技術。由於不同資料有著不同的特性,可使用多種方式互相比較,找出最適合該資料集的演算法。