Liz's Blog

Python學習筆記#18:機器學習之Principle Component Analysis實作篇

| Comments

Principle Component Analysis (PCA)並不是一個完整的機器學習演算法,只能算是未監督式學習的演算法,並且它只能算是一個轉型的過程,幫助我們找到資料中最相關的變數。

Udemy
課程名稱:Python for Data Science and Machine Learning Bootcamp
講師:Jose Portilla

迴歸分析是從資料集中找到最適合的一條線,因子分析(factor analysis)則是從中找出最適合的直角線。隨著變數增加,實際上維度也隨之上升,但透過每次都畫出一條垂直線,越能解析出越不相關的成份,所以適合用在變數非常多的資料集。

1.載入套件

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import seaborn as sns
%matplotlib inline

2.載入scikit learn內建的乳癌資料集(和學習SVM練習時相同)

from sklearn.datasets import load_breast_cancer
cancer = load_breast_cancer()

#這個資料集是以dictionary存在
cancer.keys()

#取得乳癌資料集的描述資料,記得要用print印出,不然只輸入'cancer['DESCR']',閱讀時可能會看到'\n'等分行符號
print(cancer['DESCR'])

#將資料集轉成data frame
df = pd.DataFrame(cancer['data'],columns=cancer['feature_names'])
df.head()

#資料集中的target則是是否得到惡性腫瘤或良性腫瘤的結果
cancer['target']

3.預處理:先將資料轉成一樣的比例尺(在KNN練習時也有做過)

from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(df)
scaled_data = scaler.transform(df)

4.載入PCA套件

from sklearn.decomposition import PCA

#輸入有多少成份我們想要留住分解
pca = PCA(n_components=2)

#將資料轉成兩個主成份
pca.fit(scaled_data)
x_pca = pca.transform(scaled_data)

#原本有30種維度
scaled_data.shape

#轉型後變成只有兩種維度
x_pca.shape

5.製作畫出剛剛兩個篩選出的主成份

plt.figure(figsize=(8,6))
plt.scatter(x_pca[:,0],x_pca[:,1],c=cancer['target'])
plt.xlabel('First Principle Component')
plt.ylabel('Second Principle Component')

6.解義成份

#最後取得的成份會和原始變數相關,但轉變後的成份也會儲存在調整過的PCA變數中
pca.components_

7.上面的numpy矩陣陣列中,每橫排代表一個主成份,而每行則代表和原始變數的相關度

df_comp = pd.DataFrame(pca.components_,columns=cancer['feature_names'])

8.利用heatmap把相關性給畫出

plt.figure(figsize=(12,6))
sns.heatmap(df_comp,cmap='plasma')

Comments

comments powered by Disqus