bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

pcapython函數 python中pca函數

PCA(主成分分析)python實現

回顧了下PCA的步驟,并用python實現。深刻的發現當年學的特征值、特征向量好強大。

創新互聯建站提供成都網站設計、成都做網站、網頁設計,成都品牌網站建設1元廣告等致力于企業網站建設與公司網站制作,十余年的網站開發和建站經驗,助力企業信息化建設,成功案例突破1000+,是您實現網站建設的好選擇.

PCA是一種無監督的學習方式,是一種很常用的降維方法。在數據信息損失最小的情況下,將數據的特征數量由n,通過映射到另一個空間的方式,變為k(kn)。

這里用一個2維的數據來說明PCA,選擇2維的數據是因為2維的比較容易畫圖。

這是數據:

畫個圖看看分布情況:

協方差的定義為:

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

在我們的數據中,n=2,所以協方差矩陣是2 2的,

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

得到cov的結果為:

array([[ 0.61655556, 0.61544444],

[ 0.61544444, 0.71655556]])

由于我們之前已經做過normalization,因此對于我們來說,

這個矩陣就是 data*data的轉置矩陣。

得到結果:

matrix([[ 5.549, 5.539],

[ 5.539, 6.449]])

我們發現,其實協方差矩陣和散度矩陣關系密切,散度矩陣 就是協方差矩陣乘以(總數據量-1)。因此他們的 特征根 和 特征向量 是一樣的。這里值得注意的一點就是,散度矩陣是 SVD奇異值分解 的一步,因此PCA和SVD是有很大聯系的,他們的關系這里就不詳細談了,以后有機會再寫下。

用numpy計算特征根和特征向量很簡單,

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

其中紅線就是特征向量。有幾點值得注意:

藍色的三角形就是經過坐標變換后得到的新點,其實他就是紅色原點投影到紅線、藍線形成的。

得到特征值和特征向量之后,我們可以根據 特征值 的大小,從大到小的選擇K個特征值對應的特征向量。

這個用python的實現也很簡單:

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

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

output:

數據果然變成了一維的數據。

最后我們通過畫圖來理解下數據經過PCA到底發生了什么。

綠色的五角星是PCA處理過后得到的一維數據,為了能跟以前的圖對比,將他們的高度定位1.2,其實就是紅色圓點投影到藍色線之后形成的點。這就是PCA,通過選擇特征根向量,形成新的坐標系,然后數據投影到這個新的坐標系,在盡可能少的丟失信息的基礎上實現降維。

通過上述幾步的處理,我們簡單的實現了PCA第一個2維數據的處理,但是原理就是這樣,我們可以很輕易的就依此實現多維的。

用sklearn的PCA與我們的pca做個比較:

得到結果:

用我們的pca試試

得到結果:

完全一致,完美~

值得一提的是,sklearn中PCA的實現,用了部分SVD的結果,果然他們因緣匪淺。

python pca怎么得到主成份

一般步驟來實現PCA算法

(1)零均值化

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

[python]?view plain?copy

def?zeroMean(dataMat):

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

newData=dataMat-meanVal

return?newData,meanVal

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

該函數返回兩個變量,newData是零均值化后的數據,meanVal是每個特征的均值,是給后面重構數據用的。

(2)求協方差矩陣

[python]?view plain?copy

newData,meanVal=zeroMean(dataMat)

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

numpy中的cov函數用于求協方差矩陣,參數rowvar很重要!若rowvar=0,說明傳入的數據一行代表一個樣本,若非0,說明傳入的數據一列代表一個樣本。因為newData每一行代表一個樣本,所以將rowvar設置為0。

covMat即所求的協方差矩陣。

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

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

[python]?view plain?copy

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

eigVals存放特征值,行向量。

eigVects存放特征向量,每一列帶別一個特征向量。

特征值和特征向量是一一對應的

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

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

[python]?view plain?copy

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

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

n_eigVect=eigVects[:,n_eigValIndice]????????#最大的n個特征值對應的特征向量

lowDDataMat=newData*n_eigVect???????????????#低維特征空間的數據

reconMat=(lowDDataMat*n_eigVect.T)+meanVal??#重構數據

return?lowDDataMat,reconMat

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

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

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

1.輸入

從數據集開始,提取特征轉化為有標簽的數據集,轉為向量。拆分成訓練集和測試集,這里不多講,在上一篇博客中談到用StratifiedKFold()函數即可。在訓練集中有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范式,對特征列進行正則

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()函數:

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

my_feature_selection()函數:

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

my_PCA()函數:

主要用來觀察前多少個特征是主要特征,并且畫圖。看看前多少個特征占據主要部分。

clf_train()函數:

可用多種機器學習算法,如SVM, LR, RF, GBDT等等很多,其中像SVM需要調參數的,有專門調試參數的函數如StratifiedKFold()(見前幾篇博客)。以達到最優。

my_confusion_matrix()函數:

主要是針對預測出來的結果,和原來的結果對比,算出混淆矩陣,不必自己計算。其對每個類別的混淆矩陣都計算出來了,并且labels參數默認是排序了的。

my_classification_report()函數:

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

主要參考sklearn官網

如何用python實現pca降維

首先2個包:

import?numpy?as?np

from?sklearn.decomposition?import?PCA

然后一個m x n 的矩陣,n為維度,這里設為x。

n_components = 12 是自己可以設的。

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培訓入門教程?怎樣入門呢?

python作為一個編程語言,具有與其他編程語言同等的能力。冠冕堂皇地講,是所有語言都是圖靈等價的。不過python作為一門語言,尤其獨特的優點,簡單易學,內置了很多庫。也很容易擴展。Python培訓課程如何學?

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

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

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

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

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

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

而且學python 最好是堅持編,每天抽小半個小時,學一些知識點,不斷堅持.快的話幾個星期基本就能入門了。

如何用pca做人臉識別 python實現.帶客戶端的

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

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

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

人臉識別可以采用神經網 絡深度學習的思路,國內的ColorReco在這邊有比較多的案例。

分享題目:pcapython函數 python中pca函數
鏈接分享:http://vcdvsql.cn/article40/hepsho.html

成都網站建設公司_創新互聯,為您提供軟件開發云服務器營銷型網站建設微信小程序服務器托管ChatGPT

廣告

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

h5響應式網站建設