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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【机器学习】降维代码练习

發布時間:2025/3/12 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【机器学习】降维代码练习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本課程是中國大學慕課《機器學習》的“降維”章節的課后代碼。

課程地址:

https://www.icourse163.org/course/WZU-1464096179

課程完整代碼:

https://github.com/fengdu78/WZU-machine-learning-course

代碼修改并注釋:黃海廣,haiguang2000@wzu.edu.cn

Principal component analysis(主成分分析)

PCA是在數據集中找到“主成分”或最大方差方向的線性變換。它可以用于降維。在本練習中,我們首先負責實現PCA并將其應用于一個簡單的二維數據集,以了解它是如何工作的。我們從加載和可視化數據集開始。

import?numpy?as?np import?pandas?as?pd import?matplotlib.pyplot?as?plt import?seaborn?as?sb from?scipy.io?import?loadmatdata?=?pd.read_csv('data/pcadata.csv') data.head()
X1X201234
3.3815633.389113
4.5278755.854178
2.6556824.411995
2.7652353.715414
2.8465604.175506
X?=?data.valuesfig,?ax?=?plt.subplots(figsize=(12,8)) ax.scatter(X[:,?0],?X[:,?1]) plt.show()

PCA的算法相當簡單。在確保數據被歸一化之后,輸出僅僅是原始數據的協方差矩陣的奇異值分解。

def?pca(X):#?normalize?the?featuresX?=?(X?-?X.mean())?/?X.std()#?compute?the?covariance?matrixX?=?np.matrix(X)cov?=?(X.T?*?X)?/?X.shape[0]#?perform?SVDU,?S,?V?=?np.linalg.svd(cov)return?U,?S,?VU,?S,?V?=?pca(X) U,?S,?V(matrix([[-0.79241747, -0.60997914],[-0.60997914, 0.79241747]]),array([1.43584536, 0.56415464]),matrix([[-0.79241747, -0.60997914],[-0.60997914, 0.79241747]]))

現在我們有主成分(矩陣U),我們可以用這些來將原始數據投影到一個較低維的空間中。對于這個任務,我們將實現一個計算投影并且僅選擇頂部K個分量的函數,有效地減少了維數。

def?project_data(X,?U,?k):U_reduced?=?U[:,:k]return?np.dot(X,?U_reduced)Z?=?project_data(X,?U,?1)

我們也可以通過反向轉換步驟來恢復原始數據。

def?recover_data(Z,?U,?k):U_reduced?=?U[:,:k]return?np.dot(Z,?U_reduced.T)X_recovered?=?recover_data(Z,?U,?1)fig,?ax?=?plt.subplots(figsize=(12,8)) ax.scatter(list(X_recovered[:,?0]),?list(X_recovered[:,?1])) plt.show()

請注意,第一主成分的投影軸基本上是數據集中的對角線。當我們將數據減少到一個維度時,我們失去了該對角線周圍的變化,所以在我們的再現中,一切都沿著該對角線。

我們在此練習中的最后一個任務是將PCA應用于臉部圖像。通過使用相同的降維技術,我們可以使用比原始圖像少得多的數據來捕獲圖像的“本質”。

faces?=?loadmat('data/ex7faces.mat') X?=?faces['X'] X.shape(5000, 1024)def?plot_n_image(X,?n):"""?plot?first?n?imagesn?has?to?be?a?square?number"""pic_size?=?int(np.sqrt(X.shape[1]))grid_size?=?int(np.sqrt(n))first_n_images?=?X[:n,?:]fig,?ax_array?=?plt.subplots(nrows=grid_size,ncols=grid_size,sharey=True,sharex=True,figsize=(8,?8))for?r?in?range(grid_size):for?c?in?range(grid_size):ax_array[r,?c].imshow(first_n_images[grid_size?*?r?+?c].reshape((pic_size,?pic_size)))plt.xticks(np.array([]))plt.yticks(np.array([]))

練習代碼包括一個將渲染數據集中的前100張臉的函數。而不是嘗試在這里重新生成,您可以在練習文本中查看他們的樣子。我們至少可以很容易地渲染一個圖像。

face?=?np.reshape(X[3,:],?(32,?32))plt.imshow(face) plt.show()

看起來很糟糕。這些只有32 x 32灰度的圖像(它也是側面渲染,但我們現在可以忽略)。我們的下一步是在面數據集上運行PCA,并取得前100個主要特征。

U,?S,?V?=?pca(X) Z?=?project_data(X,?U,?100)

現在我們可以嘗試恢復原來的結構并再次渲染。

X_recovered?=?recover_data(Z,?U,?100) face?=?np.reshape(X_recovered[3,:],?(32,?32)) plt.imshow(face) plt.show()

我們可以看到:數據維度減少,但細節并沒有怎么損失。

參考

  • Prof. Andrew Ng. Machine Learning. Stanford University

總結

以上是生活随笔為你收集整理的【机器学习】降维代码练习的全部內容,希望文章能夠幫你解決所遇到的問題。

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