主成分分析PCA數據降維原理及python應用(葡萄酒案例分析)

文章推薦指數: 80 %
投票人數:10人

下面使用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作業系統 三星 豐田 華為 圖賞 小米 微信 微軟 新冠疫苗 新冠病毒 新冠肺炎 日本 顯示卡 智慧手機 比亞迪 汽車 遊戲 特斯拉 生科醫學 電動車 電影 演算法 美國 騰訊 晶片 蘋果 榮耀 . 简体中文 大陆简体 港澳繁體 马新简体 马来西亚简体 繁體中文



請為這篇文章評分?