R語言資料降維 主成分分析

2021-09-25 01:47:39 字數 3804 閱讀 1880

# 這裡我們使用的是鳶尾花資料集(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...