# 這裡我們使用的是鳶尾花資料集(iris)
data
(iris)
head
(iris)
sepal.length
sepal.width
petal.length
petal.width
species
15.1
3.51.4
0.2setosa
24.9
3.01.4
0.2setosa
34.7
3.21.3
0.2setosa
44.6
3.11.5
0.2setosa
55.0
3.61.4
0.2setosa
65.4
3.91.7
0.4setosa
library
(dplyr)
library
(sqldf)
# 為資料集增加序號列(id)
iris$id
(1:nrow
(iris)
)# 將鳶尾花資料集中70%的資料劃分為訓練集
iris_train <
-sample_frac
(iris,
0.7, replace =
true
)# 使用sql語句將剩下的30%花費為測試集
iris_test <
-sqldf
(" select *
from iris
where id notin(
select id
from iris_train)")
# 去除序號列(id)
iris_train <
- iris_train[,-
6]iris_test <
- iris_test[,-
6]
【注】:這裡使用到sqldf包的函式sqldf函式來時間在r語言中使用sql語句
# 對鳶尾花資料集的前4列進行主成分分析
iris_train_pca <
-princomp
(iris_train[,1
:4])
# 繪製碎石圖
【注】:碎石圖的分析方法主要是根據縱座標的值,縱座標值越大就表示表示該主成分能夠解釋的方差的比例越大,因此一般情況下我們會選擇縱座標值較大的幾個主成分。
# 第一行是特徵值(standard deviation),
# 第二列是方差的貢獻率(proportion of variance)
# 第三列是累計方差的貢獻率(cumulative proportion)
# 方差的貢獻率: 標準化後的特徵值,全部相加等於100%
# 累計方差的貢獻率:累加後的方差的貢獻率
【注】:特徵值越大,它所對應的主成分變數包含的資訊就越多
從輸出的結果我們可以得知,在輸出的4個主成分中,前兩個主成分就包含了原來4個指標98.20%的資訊,也就是能夠解釋98.20%的方差。因此,將前兩個作為鳶尾花資料集的主成分。
# loadings代表每乙個成分中之前特徵係數
loadings顯示的是載荷的內容,這個值實際上是主成分對於原始變數sepal.length,sepal.width ,petal.length ,petal.width的係數。也是特徵值對應的特徵向量,它們是線性無關的單位向量。第1列表示主成分一的得分係數,依次類推。據此可以寫出由標準化變數所表達的主成分的關係式,即:
c om
p.1=
0.366×s
epal
.len
gth+
0.857×p
etal
.len
gth+
0.351×p
etal
.wid
thcomp.1 = 0.366 × sepal.length + 0.857 × petal.length + 0.351 × petal.width
comp.1
=0.3
66×s
epal
.len
gth+
0.85
7×pe
tal.
leng
th+0
.351
×pet
al.w
idth
c om
p.2=
0.676×s
epal
.len
gth+
0.709×s
epal
.wid
th−0.194×p
etal
.len
gthcomp.2 = 0.676 × sepal.length + 0.709 × sepal.width - 0.194 × petal.length
comp.2
=0.6
76×s
epal
.len
gth+
0.70
9×se
pal.
widt
h−0.
194×
peta
l.le
ngth
# 使用之間建好的公式對測試集進行降維處理
# new_test
# 用上面這種方法進行計算可能會出現問題,建議使用下面這種
new_test <
-predict
(iris_train_pca, iris_test[,-
5])# 轉化為資料框
new_test <
- as.data.
frame
(new_test)
【注】:iris_train_pca$loadings[,1:2] 之所以這裡取前兩個數是因為之前主成分分析確定的。
這樣就達到了對資料進行降維的作用,同時可以將降維後的資料用與機器學習以降低維度過多,而造成的計算時間過長等問題。
需要注意的是,這裡的訓練集和測試集維度必須完全相同,也就是說如果之前有與預先對訓練集進行其他影響維度的操作,那麼後續也需要對測試集進行相應的操作,才能保證降維的成功
主成分分析 降維
import pandas as pd 引數初始化 inputfile data principal component.xls outputfile tmp dimention reducted.xls 降維後的資料 data pd.read excel inputfile,header none...
資料降維 主成分分析(PCA)
主成分分析 pca 是一種比較經典的降維方法,它的思想主要是將資料對映到低維空間時使得資料在低維空間的方差最大。演算法如下 python 如下,我主要使用了兩種方法特徵值分解和奇異值分解。import numpy as np import matplotlib.pyplot as plt from ...
scikit learn 主成分分析 資料降維
筆記 import matplotlib.pyplot as plt from sklearn.datasets import load iris from sklearn.decomposition import pca iris load iris y iris.target x iris.da...