《機器學習實戰》 第十三章 利用PCA來簡化資料

2021-09-29 16:25:29 字數 2244 閱讀 2573

乙個栗子

pca是一種線性變換,將資料變化到新的座標系統中,得到的資料投影的第一大方差在第乙個座標上,第二大方差在第二個座標上,依此類推。我們可以通過資料集的協方差得到這些值。

偽**如下:

1

.去除平均值

2.計算協方差矩陣

3.計算協方差矩陣的特徵值和特徵向量(呼叫linalg.eig())4

.特徵值從大到小排序

5.保留最上面的n個特徵向量

6.將資料轉換到上述n個特徵向量構建的新空間中

#coding:utf-8

from numpy import

*def

loaddataset

(filename, delim=

'\t'):

fr =

open

(filename)

stringarr =

[line.strip(

).split(delim)

for line in fr.readlines()]

datarr =

[map

(float

,line)

for line in stringarr]

return mat(datarr)

defpca

(datamat, topnfeat=

9999999):

meanvals = mean(datamat, axis=0)

meanremoved = datamat - meanvals #remove mean

covmat = cov(meanremoved, rowvar=0)

ei**als,ei**ects = linalg.eig(mat(covmat)

) ei**alind = argsort(ei**als)

#sort, sort goes smallest to largest

ei**alind = ei**alind[:-

(topnfeat+1)

:-1]

#cut off unwanted dimensions

redei**ects = ei**ects[

:,ei**alind]

#reorganize eig vects largest to smallest

lowddatamat = meanremoved * redei**ects#transform data into new dimensions

reconmat =

(lowddatamat * redei**ects.t)

+ meanvals

return lowddatamat, reconmat

defreplacenanwithmean()

: datmat = loaddataset(

'secom.data'

,' '

) numfeat = shape(datmat)[1

]for i in

range

(numfeat)

: meanval = mean(datmat[nonzero(

~isnan(datmat[

:,i]

.a))[0

],i]

)#values that are not nan (a number)

datmat[nonzero(isnan(datmat[

:,i]

.a))[0

],i]

= meanval #set nan values to mean

return datmat

datamat=replacenanwithmean(

)#替換為平均值

meanvals=mean(datamat,axis=0)

#計算平均值

meanremoved=datamat-meanvals

covmat=cov(meanremoved,rowvar=0)

#計算協方差

ei**als,ei**ects=linalg.eig(mat(covmat)

)#特徵值,特徵向量

print

(ei**als)

結果:

第十三章 學習 Shell Scripts

什麼是 shell scripts shell script 程式化指令碼 shell script 是針對 shell 所寫的 指令碼!shell script 是利用 shell 的功能所寫的乙個 程式 program 這個程式是使用純文字檔,將一些 shell 的語法與命令 含外部命令 寫在裡...

第十三章 併發

13.1 動機 13.2 基本執行緒 如果必須要控制現成的執行順序,最好是根本不用執行緒,而是自己編寫特定順序彼此控制的協作子程式。繼承thread類或者實現runnable介面。內部類實現。13.3 共享受限資源 1 如果要對類中的某個方法進行同步控制,最好同步所有方法。如果忽略了其中乙個,通常很...

第十三章 類

1.類簡單地說是乙個性的資料型別。類當中有資料成員,和成員函式。類的基本思想就是體現出資料的抽象和封裝。2.這裡只需要說明乙個問題即可 就是類成員函式的const型別 class screen public const int get const int i const int j const 這裡...