主成分分析PCA數據降維原理及python應用(葡萄酒案例分析)
文章推薦指數: 80 %
下面使用python逐步完成葡萄酒的PCA案例。
2、提取主成分. 下載葡萄酒數據集wine.data到本地,或者到時在載入數據程式 ...
主成分分析PCA數據降維原理及python應用(葡萄酒案例分析)
2020年8月10日
筆記
機器學習/深度學習
目錄
主成分分析(PCA)——以葡萄酒數據集分類為例
1、認識PCA
(1)簡介
(2)方法步驟
2、提取主成分
3、主成分方差可視化
4、特徵變換
5、數據分類結果
6、完整程式碼
總結:
1、認識PCA
(1)簡介
數據降維的一種方法是通過特徵提取實現,主成分分析PCA就是一種無監督數據壓縮技術,廣泛應用於特徵提取和降維。
換言之,PCA技術就是在高維數據中尋找最大方差的方向,將這個方向投影到維度更小的新子空間。
例如,將原數據向量x,通過構建 維變換矩陣W,映射到新的k維子空間,通常()。
原數據d維向量空間 經過 ,得到新的k維向量空間 .
第一主成分有最大的方差,在PCA之前需要對特徵進行標準化,保證所有特徵在相同尺度下均衡。
(2)方法步驟
標準化d維數據集
構建協方差矩陣。
將協方差矩陣分解為特徵向量和特徵值。
對特徵值進行降序排列,相應的特徵向量作為整體降序。
選擇k個最大特徵值的特徵向量,。
根據提取的k個特徵向量構造投影矩陣。
d維數據經過變換獲得k維。
下面使用python逐步完成葡萄酒的PCA案例。
2、提取主成分
下載葡萄酒數據集wine.data到本地,或者到時在載入數據程式碼是從遠程伺服器獲取,為了避免載入超時推薦下載本地數據集。
來看看數據集長什麼樣子!一共有3類,標籤為1,2,3。
每一行為一組數據,由13個維度的值表示,我們將它看成一個向量。
開始載入數據集。
importpandasaspd
importnumpyasnp
fromsklearn.preprocessingimportStandardScaler
fromsklearn.model_selectionimporttrain_test_split
importmatplotlib.pyplotasplt
#loaddata
df_wine=pd.read_csv('D:\\PyCharm_Project\\maching_learning\\wine_data\\wine.data',header=None)#本地載入,路徑為本地數據集存放位置
#df_wine=pd.read_csv('//archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=None)#伺服器載入
下一步將數據按7:3劃分為training-data和testing-data,並進行標準化處理。
#splitthedata,train:test=7:3
x,y=df_wine.iloc[:,1:].values,df_wine.iloc[:,0].values
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,stratify=y,random_state=0)
#standardizethefeature標準化
sc=StandardScaler()
x_train_std=sc.fit_transform(x_train)
x_test_std=sc.fit_transform(x_test)
這個過程可以自行列印出數據進行觀察研究。
接下來構造協方差矩陣。
維協方差對稱矩陣,實際操作就是計算不同特徵列之間的協方差。
公式如下:
公式中,jk就是在矩陣中的行列下標,i表示第i行數據,分別為特徵列j,k的均值。
最後得到的協方差矩陣是13*13,這裡以3*3為例,如下:
下面使用numpy實現計算協方差並提取特徵值和特徵向量。
#構造協方差矩陣,得到特徵向量和特徵值
cov_matrix=np.cov(x_train_std.T)
eigen_val,eigen_vec=np.linalg.eig(cov_matrix)
#print("values\n",eigen_val,"\nvector\n",eigen_vec)#可以列印看看
3、主成分方差可視化
首先,計算主成分方差比率,每個特徵值方差與特徵值方差總和之比:
程式碼實現:
#解釋方差比
tot=sum(eigen_val)#總特徵值和
var_exp=[(i/tot)foriinsorted(eigen_val,reverse=True)]#計算解釋方差比,降序
#print(var_exp)
cum_var_exp=np.cumsum(var_exp)#累加方差比率
plt.rcParams['font.sans-serif']=['SimHei']#顯示中文
plt.bar(range(1,14),var_exp,alpha=0.5,align='center',label='獨立解釋方差')#柱狀Individual_explained_variance
plt.step(range(1,14),cum_var_exp,where='mid',label='累加解釋方差')#Cumulative_explained_variance
plt.ylabel("解釋方差率")
plt.xlabel("主成分索引")
plt.legend(loc='right')
plt.show()
可視化結果看出,第一二主成分佔據大部分方差,接近60%。
4、特徵變換
這一步需要構造之前講到的投影矩陣,從高維d變換到低維空間k。
先將提取的特徵對進行降序排列:
#特徵變換
eigen_pairs=[(np.abs(eigen_val[i]),eigen_vec[:,i])foriinrange(len(eigen_val))]
eigen_pairs.sort(key=lambdak:k[0],reverse=True)#(特徵值,特徵向量)降序排列
從上步驟可視化,選取第一二主成分作為最大特徵向量進行構造投影矩陣。
w=np.hstack((eigen_pairs[0][1][:,np.newaxis],eigen_pairs[1][1][:,np.newaxis]))#降維投影矩陣W
13*2維矩陣如下:
這時,將原數據矩陣與投影矩陣相乘,轉化為只有兩個最大的特徵主成分。
x_train_pca=x_train_std.dot(w)
5、數據分類結果
使用 matplotlib進行畫圖可視化,可見得,數據分布更多在x軸方向(第一主成分),這與之前方差佔比解釋一致,這時可以很直觀區別3種不同類別。
程式碼實現:
color=['r','g','b']
marker=['s','x','o']
forl,c,minzip(np.unique(y_train),color,marker):
plt.scatter(x_train_pca[y_train==l,0],
x_train_pca[y_train==l,1],
c=c,label=l,marker=m)
plt.title('Result')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.legend(loc='lowerleft')
plt.show()
本案例介紹PCA單個步驟和實現過程,一點很重要,PCA是無監督學習技術,它的分類沒有使用到樣本標籤,上面之所以看出3類不同標籤,是後來畫圖時候自行添加的類別區分標籤。
6、完整程式碼
importpandasaspd
importnumpyasnp
fromsklearn.preprocessingimportStandardScaler
fromsklearn.model_selectionimporttrain_test_split
importmatplotlib.pyplotasplt
defmain():
#loaddata
df_wine=pd.read_csv('D:\\PyCharm_Project\\maching_learning\\wine_data\\wine.data',header=None)#本地載入
#df_wine=pd.read_csv('//archive.ics.uci.edu/ml/machine-learning-databases/wine/wine.data',header=None)#伺服器載入
#splitthedata,train:test=7:3
x,y=df_wine.iloc[:,1:].values,df_wine.iloc[:,0].values
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,stratify=y,random_state=0)
#standardizethefeature標準化單位方差
sc=StandardScaler()
x_train_std=sc.fit_transform(x_train)
x_test_std=sc.fit_transform(x_test)
#print(x_train_std)
#構造協方差矩陣,得到特徵向量和特徵值
cov_matrix=np.cov(x_train_std.T)
eigen_val,eigen_vec=np.linalg.eig(cov_matrix)
#print("values\n",eigen_val,"\nvector\n",eigen_vec)
#解釋方差比
tot=sum(eigen_val)#總特徵值和
var_exp=[(i/tot)foriinsorted(eigen_val,reverse=True)]#計算解釋方差比,降序
#print(var_exp)
#cum_var_exp=np.cumsum(var_exp)#累加方差比率
#plt.rcParams['font.sans-serif']=['SimHei']#顯示中文
#plt.bar(range(1,14),var_exp,alpha=0.5,align='center',label='獨立解釋方差')#柱狀Individual_explained_variance
#plt.step(range(1,14),cum_var_exp,where='mid',label='累加解釋方差')#Cumulative_explained_variance
#plt.ylabel("解釋方差率")
#plt.xlabel("主成分索引")
#plt.legend(loc='right')
#plt.show()
#特徵變換
eigen_pairs=[(np.abs(eigen_val[i]),eigen_vec[:,i])foriinrange(len(eigen_val))]
eigen_pairs.sort(key=lambdak:k[0],reverse=True)#(特徵值,特徵向量)降序排列
#print(eigen_pairs)
w=np.hstack((eigen_pairs[0][1][:,np.newaxis],eigen_pairs[1][1][:,np.newaxis]))#降維投影矩陣W
#print(w)
x_train_pca=x_train_std.dot(w)
#print(x_train_pca)
color=['r','g','b']
marker=['s','x','o']
forl,c,minzip(np.unique(y_train),color,marker):
plt.scatter(x_train_pca[y_train==l,0],
x_train_pca[y_train==l,1],
c=c,label=l,marker=m)
plt.title('Result')
plt.xlabel('PC1')
plt.ylabel('PC2')
plt.legend(loc='lowerleft')
plt.show()
if__name__=='__main__':
main()
ViewCode
總結:
本案例介紹PCA步驟和實現過程,單步進行是我更理解PCA內部實行的過程,主成分分析PCA作為一種無監督數據壓縮技術,學習之後更好掌握數據特徵提取和降維的實現方法。
記錄學習過程,不僅能讓自己更好的理解知識,而且能與大家共勉,希望我們都能有所幫助!
我的部落格園://www.cnblogs.com/chenzhenhong/p/13472460.html
我的CSDN:原創 PCA數據降維原理及python應用(葡萄酒案例分析)
版權聲明:本文為部落客原創文章,遵循 CC4.0BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接://blog.csdn.net/Charzous/article/details/107883679
分享此文:分享到Twitter(在新視窗中開啟)按一下以分享至Facebook(在新視窗中開啟)按一下以分享到Telegram(在新視窗中開啟)分享到Pinterest(在新視窗中開啟)更多點這裡列印(在新視窗中開啟)分享到LinkedIn(在新視窗中開啟)分享到Reddit(在新視窗中開啟)分享到Tumblr(在新視窗中開啟)分享到Pocket(在新視窗中開啟)分享到WhatsApp(在新視窗中開啟)按一下即可分享至Skype(在新視窗中開啟)
Tags:機器學習/深度學習
RelatedPosts
2019年10月4日
Java經典問題
原文鏈接:www.jianshu.com九種基本類型及封裝類基本類型booleanbytecharsh..
2019年10月5日
sublimetext3漢化
版權聲明:本文為部落客原創文章,遵循CC4.0BY-SA版權協議,轉載請附上..
PreviouspostQuartz.Net的基礎使用方法,單任務執行
Nextpost技術人的成長
VirMach便宜VPS
BlackFridayFlashSale
(2021/9/14~)
1CoreCPU
1GBRam
20GBSSD
1年只要USD$5up!!!
Tips:Offer10分鐘更新一次
Newcustomers,75%offfor2months.
1CoreCPU
1GBRam
25GBSSD
每月只要USD$1.75!!!
VirMachVPSHosting
VPSGamersVPSHosting
VPSCraftVPSHosting
VPSharedVPSHosting
QNews
熱門文章
python多重繼承之拓撲排序
如何正確停止執行緒
微軟:2021年所有版本Windows都將徹底刪除AdobeFlashPlayer
目標檢測近年綜述(文末有下載論文包)
低清小電影一鍵變4K大片?這軟體神了:效果來感受下
從零開始打造專屬釘釘機器人
Netty源碼分析(一)—–NioEventLoopGroup
AtCoder從小白到大神的進階攻略
Micronaut微服務中使用Kafka
通過Prometheus函數offset計算同比環比數據
熱門搜尋.NET
.NETCore
5G
AMD
c#
CPU處理器
docker
Intel
iPhone12
iPhone手機
JAVA
javascript
linux
MySQL
NVIDIA
Python
Redmi
Windows10
Windows作業系統
三星
豐田
華為
圖賞
小米
微信
微軟
新冠疫苗
新冠病毒
新冠肺炎
日本
顯示卡
智慧手機
比亞迪
汽車
遊戲
特斯拉
生科醫學
電動車
電影
演算法
美國
騰訊
晶片
蘋果
榮耀
.
简体中文
大陆简体
港澳繁體
马新简体
马来西亚简体
繁體中文
延伸文章資訊
- 1世上最生動的PCA:直觀理解並應用主成分分析 - LeeMeng
你也將學會如何使用NumPy 和scikit-learn 等Python 函式庫自己實作PCA。 ... 主成分分析(Principal Component Analysis, 後簡稱為PCA)...
- 2python_主成分分析(PCA)降維- IT閱讀
python_主成分分析(PCA)降維 ... 主成分分析(principal component analysis)是一種常見的資料降維方法,其目的是在“資訊”損失較小的前提下,將高維的資料 ...
- 3主成分分析python, sklearn_天天向上的专栏 - CSDN博客
六月份似乎太忙,将近一个月没有写博客,于是挑一个多元统计分析中的方法写一篇python 操作实现的。主成分分析(Principle Component Analysis, ...
- 4主成分分析(PCA)原理詳解 - Medium
PCA(Principal Component Analysis),即主成分分析方法,是一種使用最廣泛的數據降維算法。PCA的主要思想是將n維特徵映射到k維上,這k維是全新的正交 ...
- 5主成分分析PCA數據降維原理及python應用(葡萄酒案例分析)
下面使用python逐步完成葡萄酒的PCA案例。 2、提取主成分. 下載葡萄酒數據集wine.data到本地,或者到時在載入數據程式 ...