日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

主成分分析(PCA)算法实现iris数据集降维

發布時間:2023/12/20 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 主成分分析(PCA)算法实现iris数据集降维 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主成分分析(PCA)算法

1.PCA簡介:
PCA(Principal Component Analysis),主成分分析,是一種常用的數據降維算法。數據降維是指對高維度特征數據進行處理,保留重要的特征,去除噪聲和不必要的特征,以達到提升 數據處理速度的目的。
PCA的主要思想是將原有數據的n維特征映射到k維上(k<n),這k維是全新的正交特征,也被稱作主成分。PCA的工作是從原空間中找出一組相互正交的新坐標軸。新坐標軸的選擇按照方差最大來進行選擇。第一個坐標軸為原始數據中方差最大的方向,第二個坐標軸為與第一個坐標軸平面正交的方差最大的方向,第三個坐標軸為與一、二兩個坐標軸平面正交的方差最大的方向,以此類推。可以發現,方差最大的基本包含在前k個坐標軸中,后面的基本方差為0,故我們保留前k個特征維度,以實現數據的降維。

2.方差、協方差、協方差矩陣

樣本方差:

每個樣本值與全體樣本值的平均數之差的平方值的平均數,代表著樣本數據的偏離程度。

樣本X和樣本Y的協方差:

協方差是用于衡量兩個變量的總體誤差。如果兩個變量的變化趨勢一致,如X大于自身期望值,Y也大于自身期望值,說明X和Y是正相關關系,則協方差大于0,反之,X和Y是負相關關系,協方差小于0。若協方差等于0,則說明X和Y相互獨立。,方差是協方差的特殊情況,Cov(X,X)就是X的方差。
方差和協方差的除數是n-1,是為了得到方差和協方差的無偏估計。

協方差矩陣:
當樣本為n維數據時,它的協方差實際就位協方差矩陣(對稱方陣)。例如對于三維數據(X,Y,Z),它的協方差就是:

3.PCA算法的兩種實現方法:
(1)基于特征值分解協方差矩陣實現PCA算法
輸入:數據集X(n維),需要降到k維
1.原始數據進行標準化,均值為0,方差為1
2.計算協方差矩陣Cov
3.計算協方差矩陣的特征值和對應的特征向量
4.對特征值按大小進行排序,選擇其中最大的k個。然后將其對應的特征向量分別作為行向量組成特征向量矩陣P
5.將數據轉換到由k個特征向量構成的新空間中,即Y=PX
(2)基于SVD分解協方差矩陣實現PCA算法
輸入:數據集X(n維),需要降到k維
1.去平均值,每一位特征減去自己的平均值
2.計算協方差矩陣Cov
3.通過SVD(奇異值分解)計算協方差矩陣的特征值和對應的特征向量
4.對特征值按大小進行排序,選擇其中最大的k個。然后將其對應的特征向量分別作為列向量組成特征向量矩陣P
5.將數據轉換到由k個特征向量構成的新空間中,即Y=PX

4.最大方差理論與最小平方誤差理論
對于二維樣本點,我們的目標是是求一條直線,并且盡可能使這條直線盡可能更好。
(1)最大方差理論
在信號處理中認為信號具有較大的方差,噪聲有較小的方差,信噪比就是信號與噪聲的方差比,越大越好。因此我們認為,最好的k維特征是將n維樣本點變換為k維后,每一維上的樣本方差都盡可能的大,也就是讓數據在主軸上投影的方差最大(在我們假設中方差最大的有用信號最大化減少了噪聲的影響)。
(2)最小平方誤差理論
我們可以使用點到直線的距離d′來度量直線的好壞。
現在有m個樣本點x(1),…,x(m),每個樣本點為n維。將樣本點x(i)在直線上的投影記為x(1)′,那么我們就是要最小化

這個公式稱作最小平方誤差(Least Squared Error),這樣的話使點都盡可能聚集在新的坐標軸周圍。

5.PCA算法實現iris數據集降維實例:

from sklearn.neural_network import MLPClassifier from sklearn.datasets import load_digits from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import classification_report, confusion_matrix import numpy as np import matplotlib.pyplot as pltiris = load_iris() x_data = iris.data y_data = iris.targetdef zeroMean(dataMat):meanVal = np.mean(dataMat, axis= 0)newData = dataMat - meanValreturn newData, meanValdef PCA(dataMat, top):#數據中心化newData, meanVal = zeroMean(dataMat)#cov用于求協方差矩陣,參數rowvar = 0說明數據一行代表一個樣本covMat = np.cov(newData, rowvar=0)#np.linalg.eig用于求矩陣的特征值和特征向量eigVals, eigVects = np.linalg.eig(np.mat(covMat))#對特征值從小到大排列eigValIndice = np.argsort(eigVals)#得到最大的n個特征值的下標n_eigValIndice = eigValIndice[-1:-(top + 1): -1]#得到下標對應的特征向量n_eigVects = eigVects[:, n_eigValIndice]#低維特征空間的數據lowDDataMat = newData * n_eigVects# print(newData)print(n_eigVects)# print(lowDDataMat)#利用低維度數據來重構數據reconMat = (lowDDataMat * n_eigVects.T) + meanValreturn lowDDataMat, reconMat#將數據降至2維 lowDDataMat, reconMat = PCA(x_data, 2)x = np.array(lowDDataMat)[:, 0] y = np.array(lowDDataMat)[:, 1] plt.scatter(x, y, c = y_data) plt.show()

降維后并可視化的結果為:

總結

以上是生活随笔為你收集整理的主成分分析(PCA)算法实现iris数据集降维的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。