成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

pcapython函數(shù) python中pca函數(shù)

PCA(主成分分析)python實(shí)現(xiàn)

回顧了下PCA的步驟,并用python實(shí)現(xiàn)。深刻的發(fā)現(xiàn)當(dāng)年學(xué)的特征值、特征向量好強(qiáng)大。

創(chuàng)新互聯(lián)建站提供成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)頁設(shè)計(jì),成都品牌網(wǎng)站建設(shè),1元廣告等致力于企業(yè)網(wǎng)站建設(shè)與公司網(wǎng)站制作,十余年的網(wǎng)站開發(fā)和建站經(jīng)驗(yàn),助力企業(yè)信息化建設(shè),成功案例突破1000+,是您實(shí)現(xiàn)網(wǎng)站建設(shè)的好選擇.

PCA是一種無監(jiān)督的學(xué)習(xí)方式,是一種很常用的降維方法。在數(shù)據(jù)信息損失最小的情況下,將數(shù)據(jù)的特征數(shù)量由n,通過映射到另一個(gè)空間的方式,變?yōu)閗(kn)。

這里用一個(gè)2維的數(shù)據(jù)來說明PCA,選擇2維的數(shù)據(jù)是因?yàn)?維的比較容易畫圖。

這是數(shù)據(jù):

畫個(gè)圖看看分布情況:

協(xié)方差的定義為:

假設(shè)n為數(shù)據(jù)的特征數(shù),那么協(xié)方差矩陣M, 為一個(gè)n n的矩陣,其中Mij為第i和第j個(gè)特征的協(xié)方差,對角線是各個(gè)特征的方差。

在我們的數(shù)據(jù)中,n=2,所以協(xié)方差矩陣是2 2的,

通過numpy我們可以很方便的得到:

得到cov的結(jié)果為:

array([[ 0.61655556, 0.61544444],

[ 0.61544444, 0.71655556]])

由于我們之前已經(jīng)做過normalization,因此對于我們來說,

這個(gè)矩陣就是 data*data的轉(zhuǎn)置矩陣。

得到結(jié)果:

matrix([[ 5.549, 5.539],

[ 5.539, 6.449]])

我們發(fā)現(xiàn),其實(shí)協(xié)方差矩陣和散度矩陣關(guān)系密切,散度矩陣 就是協(xié)方差矩陣乘以(總數(shù)據(jù)量-1)。因此他們的 特征根 和 特征向量 是一樣的。這里值得注意的一點(diǎn)就是,散度矩陣是 SVD奇異值分解 的一步,因此PCA和SVD是有很大聯(lián)系的,他們的關(guān)系這里就不詳細(xì)談了,以后有機(jī)會再寫下。

用numpy計(jì)算特征根和特征向量很簡單,

但是他們代表的意義非常有意思,讓我們將特征向量加到我們原來的圖里:

其中紅線就是特征向量。有幾點(diǎn)值得注意:

藍(lán)色的三角形就是經(jīng)過坐標(biāo)變換后得到的新點(diǎn),其實(shí)他就是紅色原點(diǎn)投影到紅線、藍(lán)線形成的。

得到特征值和特征向量之后,我們可以根據(jù) 特征值 的大小,從大到小的選擇K個(gè)特征值對應(yīng)的特征向量。

這個(gè)用python的實(shí)現(xiàn)也很簡單:

從eig_pairs選取前k個(gè)特征向量就行。這里,我們只有兩個(gè)特征向量,選一個(gè)最大的。

主要將原來的數(shù)據(jù)乘以經(jīng)過篩選的特征向量組成的特征矩陣之后,就可以得到新的數(shù)據(jù)了。

output:

數(shù)據(jù)果然變成了一維的數(shù)據(jù)。

最后我們通過畫圖來理解下數(shù)據(jù)經(jīng)過PCA到底發(fā)生了什么。

綠色的五角星是PCA處理過后得到的一維數(shù)據(jù),為了能跟以前的圖對比,將他們的高度定位1.2,其實(shí)就是紅色圓點(diǎn)投影到藍(lán)色線之后形成的點(diǎn)。這就是PCA,通過選擇特征根向量,形成新的坐標(biāo)系,然后數(shù)據(jù)投影到這個(gè)新的坐標(biāo)系,在盡可能少的丟失信息的基礎(chǔ)上實(shí)現(xiàn)降維。

通過上述幾步的處理,我們簡單的實(shí)現(xiàn)了PCA第一個(gè)2維數(shù)據(jù)的處理,但是原理就是這樣,我們可以很輕易的就依此實(shí)現(xiàn)多維的。

用sklearn的PCA與我們的pca做個(gè)比較:

得到結(jié)果:

用我們的pca試試

得到結(jié)果:

完全一致,完美~

值得一提的是,sklearn中PCA的實(shí)現(xiàn),用了部分SVD的結(jié)果,果然他們因緣匪淺。

python pca怎么得到主成份

一般步驟來實(shí)現(xiàn)PCA算法

(1)零均值化

假如原始數(shù)據(jù)集為矩陣dataMat,dataMat中每一行代表一個(gè)樣本,每一列代表同一個(gè)特征。零均值化就是求每一列的平均值,然后該列上的所有數(shù)都減去這個(gè)均值。也就是說,這里零均值化是對每一個(gè)特征而言的,零均值化都,每個(gè)特征的均值變成0。實(shí)現(xiàn)代碼如下:

[python]?view plain?copy

def?zeroMean(dataMat):

meanVal=np.mean(dataMat,axis=0)?????#按列求均值,即求各個(gè)特征的均值

newData=dataMat-meanVal

return?newData,meanVal

函數(shù)中用numpy中的mean方法來求均值,axis=0表示按列求均值。

該函數(shù)返回兩個(gè)變量,newData是零均值化后的數(shù)據(jù),meanVal是每個(gè)特征的均值,是給后面重構(gòu)數(shù)據(jù)用的。

(2)求協(xié)方差矩陣

[python]?view plain?copy

newData,meanVal=zeroMean(dataMat)

covMat=np.cov(newData,rowvar=0)

numpy中的cov函數(shù)用于求協(xié)方差矩陣,參數(shù)rowvar很重要!若rowvar=0,說明傳入的數(shù)據(jù)一行代表一個(gè)樣本,若非0,說明傳入的數(shù)據(jù)一列代表一個(gè)樣本。因?yàn)閚ewData每一行代表一個(gè)樣本,所以將rowvar設(shè)置為0。

covMat即所求的協(xié)方差矩陣。

(3)求特征值、特征矩陣

調(diào)用numpy中的線性代數(shù)模塊linalg中的eig函數(shù),可以直接由covMat求得特征值和特征向量:

[python]?view plain?copy

eigVals,eigVects=np.linalg.eig(np.mat(covMat))

eigVals存放特征值,行向量。

eigVects存放特征向量,每一列帶別一個(gè)特征向量。

特征值和特征向量是一一對應(yīng)的

(4)保留主要的成分[即保留值比較大的前n個(gè)特征]

第三步得到了特征值向量eigVals,假設(shè)里面有m個(gè)特征值,我們可以對其排序,排在前面的n個(gè)特征值所對應(yīng)的特征向量就是我們要保留的,它們組成了新的特征空間的一組基n_eigVect。將零均值化后的數(shù)據(jù)乘以n_eigVect就可以得到降維后的數(shù)據(jù)。代碼如下:

[python]?view plain?copy

eigValIndice=np.argsort(eigVals)????????????#對特征值從小到大排序

n_eigValIndice=eigValIndice[-1:-(n+1):-1]???#最大的n個(gè)特征值的下標(biāo)

n_eigVect=eigVects[:,n_eigValIndice]????????#最大的n個(gè)特征值對應(yīng)的特征向量

lowDDataMat=newData*n_eigVect???????????????#低維特征空間的數(shù)據(jù)

reconMat=(lowDDataMat*n_eigVect.T)+meanVal??#重構(gòu)數(shù)據(jù)

return?lowDDataMat,reconMat

代碼中有幾點(diǎn)要說明一下,首先argsort對特征值是從小到大排序的,那么最大的n個(gè)特征值就排在后面,所以eigValIndice[-1:-(n+1):-1]就取出這個(gè)n個(gè)特征值對應(yīng)的下標(biāo)。【python里面,list[a:b:c]代表從下標(biāo)a開始到b,步長為c?!?/p>

python3.5做分類時(shí),混淆矩陣加在哪一步

preface:做著最近的任務(wù),對數(shù)據(jù)處理,做些簡單的提特征,用機(jī)器學(xué)習(xí)算法跑下程序得出結(jié)果,看看哪些特征的組合較好,這一系列流程必然要用到很多函數(shù),故將自己常用函數(shù)記錄上。應(yīng)該說這些函數(shù)基本上都會用到,像是數(shù)據(jù)預(yù)處理,處理完了后特征提取、降維、訓(xùn)練預(yù)測、通過混淆矩陣看分類效果,得出報(bào)告。

1.輸入

從數(shù)據(jù)集開始,提取特征轉(zhuǎn)化為有標(biāo)簽的數(shù)據(jù)集,轉(zhuǎn)為向量。拆分成訓(xùn)練集和測試集,這里不多講,在上一篇博客中談到用StratifiedKFold()函數(shù)即可。在訓(xùn)練集中有data和target開始。

2.處理

[python]?view plain?copy

def?my_preprocessing(train_data):

from?sklearn?import?preprocessing

X_normalized?=?preprocessing.normalize(train_data?,norm?=?"l2",axis=0)#使用l2范式,對特征列進(jìn)行正則

return?X_normalized

def?my_feature_selection(data,?target):

from?sklearn.feature_selection?import?SelectKBest

from?sklearn.feature_selection?import?chi2

data_new?=?SelectKBest(chi2,?k=?50).fit_transform(data,target)

return?data_new

def?my_PCA(data):#data?without?target,?just?train?data,?withou?train?target.

from?sklearn?import?decomposition

pca_sklearn?=?decomposition.PCA()

pca_sklearn.fit(data)

main_var?=?pca_sklearn.explained_variance_

print?sum(main_var)*0.9

import?matplotlib.pyplot?as?plt

n?=?15

plt.plot(main_var[:n])

plt.show()

def?clf_train(data,target):

from?sklearn?import?svm

#from?sklearn.linear_model?import?LogisticRegression

clf?=?svm.SVC(C=100,kernel="rbf",gamma=0.001)

clf.fit(data,target)

#clf_LR?=?LogisticRegression()

#clf_LR.fit(x_train,?y_train)

#y_pred_LR?=?clf_LR.predict(x_test)

return?clf

def?my_confusion_matrix(y_true,?y_pred):

from?sklearn.metrics?import?confusion_matrix

labels?=?list(set(y_true))

conf_mat?=?confusion_matrix(y_true,?y_pred,?labels?=?labels)

print?"confusion_matrix(left?labels:?y_true,?up?labels:?y_pred):"

print?"labels\t",

for?i?in?range(len(labels)):

print?labels[i],"\t",

print

for?i?in?range(len(conf_mat)):

print?i,"\t",

for?j?in?range(len(conf_mat[i])):

print?conf_mat[i][j],'\t',

print

print

def?my_classification_report(y_true,?y_pred):

from?sklearn.metrics?import?classification_report

print?"classification_report(left:?labels):"

print?classification_report(y_true,?y_pred)

my_preprocess()函數(shù):

主要使用sklearn的preprocessing函數(shù)中的normalize()函數(shù),默認(rèn)參數(shù)為l2范式,對特征列進(jìn)行正則處理。即每一個(gè)樣例,處理標(biāo)簽,每行的平方和為1.

my_feature_selection()函數(shù):

使用sklearn的feature_selection函數(shù)中SelectKBest()函數(shù)和chi2()函數(shù),若是用詞袋提取了很多維的稀疏特征,有必要使用卡方選取前k個(gè)有效的特征。

my_PCA()函數(shù):

主要用來觀察前多少個(gè)特征是主要特征,并且畫圖??纯辞岸嗌賯€(gè)特征占據(jù)主要部分。

clf_train()函數(shù):

可用多種機(jī)器學(xué)習(xí)算法,如SVM, LR, RF, GBDT等等很多,其中像SVM需要調(diào)參數(shù)的,有專門調(diào)試參數(shù)的函數(shù)如StratifiedKFold()(見前幾篇博客)。以達(dá)到最優(yōu)。

my_confusion_matrix()函數(shù):

主要是針對預(yù)測出來的結(jié)果,和原來的結(jié)果對比,算出混淆矩陣,不必自己計(jì)算。其對每個(gè)類別的混淆矩陣都計(jì)算出來了,并且labels參數(shù)默認(rèn)是排序了的。

my_classification_report()函數(shù):

主要通過sklearn.metrics函數(shù)中的classification_report()函數(shù),針對每個(gè)類別給出詳細(xì)的準(zhǔn)確率、召回率和F-值這三個(gè)參數(shù)和宏平均值,用來評價(jià)算法好壞。另外ROC曲線的話,需要是對二分類才可以。多類別似乎不行。

主要參考sklearn官網(wǎng)

如何用python實(shí)現(xiàn)pca降維

首先2個(gè)包:

import?numpy?as?np

from?sklearn.decomposition?import?PCA

然后一個(gè)m x n 的矩陣,n為維度,這里設(shè)為x。

n_components = 12 是自己可以設(shè)的。

pca?=?PCA(n_components=12)

pca.fit(x)

PCA(copy=True,?iterated_power='auto',?n_components=12,?random_state=None,

svd_solver='auto',?tol=0.0,?whiten=False)

float_formatter?=?lambda?x:?"%.2f"?%?x

np.set_printoptions(formatter={'float_kind':float_formatter})

print?'explained?variance?ratio:'

print?pca.explained_variance_ratio_

print?'cumulative?sum:'

print?pca.explained_variance_ratio_.cumsum()

python培訓(xùn)入門教程?怎樣入門呢?

python作為一個(gè)編程語言,具有與其他編程語言同等的能力。冠冕堂皇地講,是所有語言都是圖靈等價(jià)的。不過python作為一門語言,尤其獨(dú)特的優(yōu)點(diǎn),簡單易學(xué),內(nèi)置了很多庫。也很容易擴(kuò)展。Python培訓(xùn)課程如何學(xué)?

可以選一本通俗易懂的書,找一個(gè)好的視頻資料,然后自己裝一個(gè)IDE工具開始邊學(xué)邊寫。下面我具體來講講:

1.找一本靠譜的書,難度一定要是入門級別,千萬不能太復(fù)雜,不要一下子陷進(jìn)去,會打亂節(jié)奏,學(xué)東西要循序漸進(jìn),不能一口吃個(gè)胖子.打個(gè)比方,學(xué)過java的同學(xué)都聽過大名鼎鼎的thinking in java,這邊書很厚很全,若一上來就學(xué),肯定會吃力,時(shí)間長了就會失去興趣,因此對初學(xué)者來說,一定要找一本通熟易懂的,簡單的書。入門的書非常關(guān)鍵。

入門的書很多,但是我個(gè)人強(qiáng)烈推薦《A Byte of Python》,這本書我讀了2遍,作者寫作思路非常清晰,對每個(gè)知識點(diǎn)講解很到位,不多不少。對初學(xué)者來說,力道剛剛好。而且是全英文,對提高自己的英語水平也很有幫助。

網(wǎng)上有人會推薦《笨辦法學(xué)Python》,我個(gè)人覺得這本書沒有《A Byte of Python》好 。一般有一些編程基本,我建議直接看《A Byte of Python》。這本書的銷量已經(jīng)破百萬了,而且在豆瓣上點(diǎn)評有8.8,可謂是入門級的神書.電子版大家可以在CSDN 搜一下就有,都是高清的。

2.找一個(gè)靠譜的師傅。Python編程是一個(gè)十分系統(tǒng)的技術(shù)體系,有時(shí)候光靠看書和網(wǎng)上的視頻,只能是一知半解,遇到問題,沒有人給你講解其中的原理和流程,那么對于整個(gè)技術(shù)點(diǎn)的理解就永遠(yuǎn)不會通透。況且,編程不只是知識,還涉及到做具體的項(xiàng)目,在做項(xiàng)目中,如果有人帶,進(jìn)步才是最神速的。

3.多編寫程序,這似乎是廢話,但是確實(shí)是一句實(shí)話。學(xué)編程一定要親身去編寫,沒有什么捷徑。一開始哪怕你把書里面的例子一字不落敲一遍,也好過你只是去看書,而不動手。

而且學(xué)python 最好是堅(jiān)持編,每天抽小半個(gè)小時(shí),學(xué)一些知識點(diǎn),不斷堅(jiān)持.快的話幾個(gè)星期基本就能入門了。

如何用pca做人臉識別 python實(shí)現(xiàn).帶客戶端的

基于特征臉(PCA)的人臉識別方法

特征臉方法是基于KL變換的人臉識別方法,KL變換是圖像壓縮的一種最優(yōu)正交變換。高維的圖像空間經(jīng)過KL變換后得到一組新的正交基,保留其中重要的正交基,由這些基可以張成低維線性空間。如果假設(shè)人臉在這些低維線性空間的投影具有可分性,就可以將這些投影用作識別的特征矢量,這就是特征臉方法的基本思想。這些方法需要較多的訓(xùn)練樣本,而且完全是基于圖像灰度的統(tǒng)計(jì)特性的。目前有一些改進(jìn)型的特征臉方法。

比如人臉灰度照片40x40=1600個(gè)像素點(diǎn),用每個(gè)像素的灰度值組成的矩陣代表這個(gè)人的人臉。那么這個(gè)人人臉就要1600 個(gè)特征。拿一堆這樣的樣本過來做pca,抽取得到的只是在統(tǒng)計(jì)意義下能代表某個(gè)樣本的幾個(gè)特征。

人臉識別可以采用神經(jīng)網(wǎng) 絡(luò)深度學(xué)習(xí)的思路,國內(nèi)的ColorReco在這邊有比較多的案例。

分享題目:pcapython函數(shù) python中pca函數(shù)
鏈接分享:http://jinyejixie.com/article40/hepsho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供軟件開發(fā)、云服務(wù)器、營銷型網(wǎng)站建設(shè)、微信小程序、服務(wù)器托管、ChatGPT

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
鄂托克旗| 镇康县| 衡水市| 邵阳市| 扎兰屯市| 融水| 兰州市| 大关县| 青州市| 房产| 乐至县| 曲阜市| 河南省| 抚松县| 罗甸县| 广丰县| 达孜县| 阳原县| 安阳市| 海南省| 佛学| 杭州市| 长宁县| 墨玉县| 凌源市| 莱西市| 夏津县| 嘉鱼县| 昌邑市| 嘉祥县| 分宜县| 邹城市| 阿拉善右旗| 嘉定区| 蚌埠市| 濮阳县| 依安县| 雅江县| 启东市| 云南省| 闵行区|