国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python PCA(主成分分析法)降維的兩種實現(xiàn)

這篇具有很好參考價值的文章主要介紹了Python PCA(主成分分析法)降維的兩種實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

????????PCA降維,一般是用于數據分析和機器學習。它的作用是把一個高維的數據在保留最大信息量的前提下降低到一個低維的空間,從而使我們能夠提取數據的主要特征分量,從而得到對數據影響最大的主成分,便于我們對數據進行分析等后續(xù)操作。

????????例如,在機器學習中,當你想跟據一個數據集來進行預測工作時,往往要采用特征構建、不同特征相乘、相加等操作,來擴建特征,所以,當數據處理完畢后,每個樣本往往會有很多個特征,但是,如果把所有數據全部喂入模型,可能會導致糟糕的結果。在高維數據集中,往往只有部分特征有良好的預測能力,很多特征純粹是噪音(沒有預測能力),很多特征彼此之間也可能高度相關,這些因素會降低模型的預測精度,訓練模型的時間也更長。降低數據集的維度在某種程度上能解決這些問題,這時候就用到了PCA降維。

? ? ? ? 假設原始數據集的特征有500個,通過PCA降維,降到了400,那么我們就可以用降維后得到的這400個特征代替原始數據集的那500個,此時再喂給模型,那么模型的預測能力相比之前會有所提升。但要明白一點的是,降維后得到的這400個特征是新的特征,是原始數據集在高維空間某一平面上的投影,能夠反映原特征提供的大部分信息,并不是指在原來的500個中篩選400個特征。

PCA降維的一般步驟為:

1.將原始數據進行標準化(一般是去均值,如果特征在不同的數量級上,則還要將其除以標準差)

2.計算標準化數據集的協(xié)方差矩陣

3.計算協(xié)方差矩陣的特征值和特征向量

4.保留最重要(特征值最大)的前k個特征(k就表示降維后的維度)

5.找到這k個特征值對應的特征向量

6.將標準化數據集乘以該k個特征向量,得到降維后的結果

具體步驟如下:

1.去均值:

Python PCA(主成分分析法)降維的兩種實現(xiàn)

????????其中,Python PCA(主成分分析法)降維的兩種實現(xiàn)為標準化后的矩陣, Python PCA(主成分分析法)降維的兩種實現(xiàn)為矩陣A的均值。

2.求標準化數據集的協(xié)方差矩陣:

Python PCA(主成分分析法)降維的兩種實現(xiàn)

3.計算協(xié)方差矩陣的特征值和特征向量。設數λ和n維非0列向量x滿足下式:

Python PCA(主成分分析法)降維的兩種實現(xiàn)

????????則λ為C的特征值,x稱為C的對應于特征值λ的特征向量。C為數據集的協(xié)方差矩陣。

4.保留最重要的前k個特征。k即為你想降維到的維數。

5.找到這k個特征值對應的特征向量

6.將標準化數據集乘以這k個特征向量,得到降維后的結果

Python PCA(主成分分析法)降維的兩種實現(xiàn)

????????上式中,Python PCA(主成分分析法)降維的兩種實現(xiàn)表示上述的k個特征值分別對應的特征向量組成的矩陣。

實現(xiàn)PCA降維,一般有兩種方法:

首先先來解釋一下代碼中用到的數據集:

????????在這兩個代碼中,用的是sklean庫中自帶的iris(鳶尾花)數據集。iris數據集包含150個樣本,每個樣本包含四個屬性特征(花萼長度、花萼寬度、花瓣長度、花瓣寬度)和一個類別標簽(分別用0、1、2表示山鳶尾、變色鳶尾和維吉尼亞鳶尾)。

data = load_iris()
y = data.target
x = data.data

y就表示數據集中的類別標簽,x表示數據集中的屬性數據。因為鳶尾花類別分為三類,所以我們降維后,要跟據y的值,分別對這三類數據點進行繪圖。

第一種,就是依照上面PCA的步驟,通過矩陣運算,最終得到降維后的結果

import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt


def pca(dataMat, topNfeat):
    meanVals = np.mean(dataMat, axis=0)
    meanRemoved = dataMat - meanVals  # 標準化(去均值)
    covMat = np.cov(meanRemoved, rowvar=False)
    eigVals, eigVets = np.linalg.eig(np.mat(covMat))  # 計算矩陣的特征值和特征向量
    eigValInd = np.argsort(eigVals)  # 將特征值從小到大排序,返回的是特征值對應的數組里的下標
    eigValInd = eigValInd[:-(topNfeat + 1):-1]  # 保留最大的前K個特征值
    redEigVects = eigVets[:, eigValInd]  # 對應的特征向量
    lowDDatMat = meanRemoved * redEigVects  # 將數據轉換到低維新空間
    # reconMat = (lowDDatMat * redEigVects.T) + meanVals  # 還原原始數據
    return lowDDatMat


def plotPCA(lowMat):
    reconArr = np.array(lowMat)
    red_x, red_y = [], []
    blue_x, blue_y = [], []
    green_x, green_y = [], []
    for i in range(len(reconArr)):
        if y[i] == 0:
            red_x.append(reconArr[i][0])
            red_y.append(reconArr[i][1])
        elif y[i] == 1:
            blue_x.append(reconArr[i][0])
            blue_y.append(reconArr[i][1])
        else:
            green_x.append(reconArr[i][0])
            green_y.append(reconArr[i][1])
    plt.scatter(red_x, red_y, c='r', marker='x')
    plt.scatter(blue_x, blue_y, c='b', marker='D')
    plt.scatter(green_x, green_y, c='g', marker='.')
    plt.show()


if __name__ == '__main__':
    data = load_iris()
    y = data.target
    x = data.data
    matx = np.mat(x)
    lowDMat = pca(matx, 2)
    plotPCA(lowDMat)

第二種,是在sklearn庫中調用PCA算法來實現(xiàn):

import matplotlib.pyplot as plt
from sklearn.decomposition import PCA  # 加載PCA算法包
from sklearn.datasets import load_iris
import numpy as np

data = load_iris()
y = data.target
x = data.data
pca = PCA(n_components=2)  # 加載PCA算法,設置降維后主成分數目為2
reduced_x = pca.fit_transform(x)  # 對樣本進行降維
# reduced_x = np.dot(reduced_x, pca.components_) + pca.mean_  # 還原數據

red_x, red_y = [], []
blue_x, blue_y = [], []
green_x, green_y = [], []
# print(reduced_x)
for i in range(len(reduced_x)):
    if y[i] == 0:
        red_x.append(reduced_x[i][0])
        red_y.append(reduced_x[i][1])
    elif y[i] == 1:
        blue_x.append(reduced_x[i][0])
        blue_y.append(reduced_x[i][1])
    else:
        green_x.append(reduced_x[i][0])
        green_y.append(reduced_x[i][1])
plt.scatter(red_x, red_y, c='r', marker='x')
plt.scatter(blue_x, blue_y, c='b', marker='D')
plt.scatter(green_x, green_y, c='g', marker='.')
plt.show()

????????在第二個代碼中,值得一說的是fit_transform()這個函數,它其實就是fit()和transform()這兩個函數的結合,相當于先調用fit()再調用transform()。fit()和transform()這兩個函數在sklearn庫中經常出現(xiàn),fit()函數可以理解為求傳入的數據集的一些固有的屬性(如方差、均值等等),相當于一個訓練過程,而transform()函數,可以理解為對訓練后的數據集進行相應的操作(如歸一化、降維等等)。在不同的模塊中,這兩個函數的具體實現(xiàn)也不一樣,比如在PCA模塊里,fit()相當于去均值,transform()則相當于降維。

這兩種代碼運行后,生成的圖像如下(圖一為第一種代碼,圖二為第二種代碼):

Python PCA(主成分分析法)降維的兩種實現(xiàn)

圖一

Python PCA(主成分分析法)降維的兩種實現(xiàn)

圖二

????????可以看到,第一種代碼畫出的圖像與第二種代碼畫出的圖像關于y=0這條直線對稱,雖然不清楚這是什么原因(后續(xù)有空的話我會去找找原因),但是這并不影響降維的結果。

降維前的數據(部分)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

Python PCA(主成分分析法)降維的兩種實現(xiàn)

降維后的數據(部分)

?Python PCA(主成分分析法)降維的兩種實現(xiàn)

? ? ? ?

????????所以,此時我們使用降維后的二維數據集就可以用來表示降維前四維數據集的大部分信息。

? ? ? ? 降維后得到的數據可以通過逆操作來進行數據集的還原,具體原理就不過多解釋,具體操作代碼的話我已在代碼的注釋里面寫出,但是重建出來的數據會和原始數據有一定的誤差(如下圖)

Python PCA(主成分分析法)降維的兩種實現(xiàn)

????????原因的話你可以這樣理解:我們的原始數據為四維空間,現(xiàn)在用PCA降維到二維空間,則保留數據投影方差最大的兩個軸向,因此舍棄掉了另外兩個相對不重要的特征軸,從而造成了一定的信息丟失,所以會產生重構誤差。

最后,希望大家能指出我的錯誤或者不足,我一定及時改正。文章來源地址http://www.zghlxwxcb.cn/news/detail-416693.html

到了這里,關于Python PCA(主成分分析法)降維的兩種實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 主成分分析法(PCA)解析與MATLAB實踐

    主成分分析法(PCA)解析與MATLAB實踐

    PCA(Principal Components Analysis)即主成分分析,也稱主分量分析或主成分回歸分析法,是一種無監(jiān)督的數據降維方法,在機器學習中常用于特征降維提取主要特征以減少計算量。PCA主要原理是將高維原數據通過一個轉換矩陣,映射到另一組低維坐標系下,從而實現(xiàn)數據降維。舉個簡

    2023年04月08日
    瀏覽(22)
  • 數據分析案例-基于PCA主成分分析法對葡萄酒數據進行分析

    數據分析案例-基于PCA主成分分析法對葡萄酒數據進行分析

    ???♂? 個人主頁:@艾派森的個人主頁 ???作者簡介:Python學習者 ?? 希望大家多多支持,我們一起進步!?? 如果文章對你有幫助的話, 歡迎評論 ??點贊???? 收藏 ??加關注+ 目錄 1.項目背景 2.項目簡介 2.1分析目標 2.2數據集介紹 2.3技術工具 3.算法理論 4.實驗過程

    2024年02月03日
    瀏覽(27)
  • 數學建模:主成分分析法

    數學建模:主成分分析法

    ?? 文章首發(fā)于我的個人博客:歡迎大佬們來逛逛 構建原始數據矩陣 X X X ,其中矩陣的形狀為 x ? n x * n x ? n ,有 m m m 個對象, n n n 個評價指標。 然后進行矩陣的 歸一化處理 。 首先計算矩陣的指標之間的 相關系數矩陣 R R R 。使用matlab 的 corr 即可得到。 計算相關系數矩

    2024年02月10日
    瀏覽(19)
  • 結合PCA降維的DBSCAN聚類方法(附Python代碼)

    結合PCA降維的DBSCAN聚類方法(附Python代碼)

    ? 目錄 前言介紹: 1、PCA降維: (1)概念解釋: (2)實現(xiàn)步驟: (3)優(yōu)劣相關:? 2、DBSCAN聚類: (1)概念解釋: (2)算法原理: (3)優(yōu)劣相關: 代碼實現(xiàn): 0、數據準備: 1、PCA降維: 2、DBSCAN聚類: 3、代碼匯總: 實現(xiàn)效果: 1、降維效果: 2、聚類效果: 寫在最后

    2024年02月04日
    瀏覽(25)
  • 多元回歸預測 | Matlab主成分分析PCA降維,BP神經網絡回歸預測。PCA-BP回歸預測模型

    多元回歸預測 | Matlab主成分分析PCA降維,BP神經網絡回歸預測。PCA-BP回歸預測模型

    效果一覽 文章概述 多元回歸預測 | Matlab主成分分析PCA降維,BP神經網絡回歸預測。PCA-BP回歸預測模型 評價指標包括:MAE、RMSE和R2等,代碼質量極高,方便學習和替換數據。要求2018版本及以上。 部分源碼

    2024年02月13日
    瀏覽(18)
  • 【建模算法】層次分析法(Python實現(xiàn))

    【建模算法】層次分析法(Python實現(xiàn))

    在很多情況下,我們對事物評價,應該要多維度評價。多維度評價之后我們要如何把它們合并成一個指標用于比較事物的好壞呢,這時候需要對各個指標賦權, 層次分析法就是用來賦權重的了。 這個方法主觀性比較強,在數據集比較小,實在不好比較的時候可以用這個方法

    2024年01月22日
    瀏覽(23)
  • 灰色關聯(lián)分析法詳解及python實踐

    灰色關聯(lián)分析法詳解及python實踐

    灰色關聯(lián)分析是指對一個系統(tǒng)發(fā)展變化態(tài)勢的定量描述和比較的方法,其基本思想是通過確定參考數據列和若干個比較數據列的幾何形狀相似程度來判斷其聯(lián)系是否緊密,它反映了曲線間的關聯(lián)程度。 在系統(tǒng)發(fā)展過程中,若兩個因素變化的趨勢具有一致性,即同步變化程度較

    2024年02月01日
    瀏覽(18)
  • 數學建模(層次分析法 python代碼 案例)

    目錄 介紹:? 模板: 例題:從景色、花費、飲食,男女比例四個方面去選取目的地 ?準則重要性矩陣: ?每個準則的方案矩陣:? ?一致性檢驗: ?特征值法求權值: 完整代碼: 運行結果:

    2024年04月29日
    瀏覽(25)
  • python 算符優(yōu)先分析法的設計實現(xiàn) 編譯原理

    python 算符優(yōu)先分析法的設計實現(xiàn) 編譯原理

    1、給出文法如下: G[E] E-T|E+T; T-F|T*F; F-i|(E); 可以構造算符優(yōu)先表如下: + * ( ) i + * ( = ) i 2、計算機中表示上述優(yōu)先關系,優(yōu)先關系的機內存放方式有兩種1)直接存放,2)為優(yōu)先關系建立優(yōu)先函數,這里由學生自己選擇一種方式; 3、給出算符優(yōu)先分析算法如下: k:=1;S[k]:=\\\'#\\\'; REPE

    2024年02月07日
    瀏覽(24)
  • 數學建模--層次分析法(AHP)的Python實現(xiàn)

    目錄 1.算法流程簡介 2.算法核心代碼 3.算法效果展示 算術平均法求得的權重為: [0.07243906 0.30125047 0.62631047] 幾何平均法求得的權重為: [0.7374984 ?0.17727613 0.08522547] 特征值權重法法求得的權重為: [0.07239208 0.30116321 0.62644471]

    2024年02月10日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包