<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # 如何從 Python 中的 Scratch 計算主成分分析(PCA) > 原文: [https://machinelearningmastery.com/calculate-principal-component-analysis-scratch-python/](https://machinelearningmastery.com/calculate-principal-component-analysis-scratch-python/) 降維的重要機器學習方法稱為主成分分析。 這是一種使用線性代數和統計學中的簡單矩陣運算來計算原始數據到相同數量或更少維度的投影的方法。 在本教程中,您將發現用于降低維數的主成分分析機器學習方法以及如何在 Python 中從頭開始實現它。 完成本教程后,您將了解: * 計算主成分分析的過程以及如何選擇主成分。 * 如何在 NumPy 中從頭開始計算主成分分析。 * 如何計算主成分分析,以便在 scikit-learn 中使用更多數據。 讓我們開始吧。 * **Update Apr / 2018** :修正了 sklearn PCA 屬性解釋中的拼寫錯誤。由于克里斯。 ![How to Calculate the Principal Component Analysis from Scratch in Python](img/c5e72b23e0130b0e1e4f7305b5f172ae.jpg) 如何在 Python 中從頭開始計算主成分分析 照片由 [mickey](https://www.flickr.com/photos/mc-pictures/7870255710/) ,保留一些權利。 ## 教程概述 本教程分為 3 個部分;他們是: 1. 主成分分析 2. 手動計算主成分分析 3. 可重復使用的主成分分析 ## 主成分分析 主成分分析(簡稱 PCA)是一種減少數據維數的方法。 它可以被認為是一種投影方法,其中具有 m 列(特征)的數據被投影到具有 m 個或更少列的子空間中,同時保留原始數據的本質。 可以使用線性代數工具來描述和實現 PCA 方法。 PCA 是應用于數據集的操作,由 n×m 矩陣 A 表示,其導致 A 的投影,我們將稱之為 B.讓我們逐步完成此操作的步驟。 ``` a11, a12 A = (a21, a22) a31, a32 B = PCA(A) ``` 第一步是計算每列的平均值。 ``` M = mean(A) ``` 要么 ``` (a11 + a21 + a31) / 3 M(m11, m12) = (a12 + a22 + a32) / 3 ``` 接下來,我們需要通過減去平均列值來使每列中的值居中。 ``` C = A - M ``` 下一步是計算居中矩陣 C 的協方差矩陣。 相關性是兩列一起變化的量和方向(正或負)的標準化度量。協方差是跨多列的相關的廣義和非標準化版本。協方差矩陣是給定矩陣的協方差的計算,每個列與每個其他列的協方差分數,包括其自身。 ``` V = cov(C) ``` 最后,我們計算協方差矩陣 V 的特征分解。這導致特征值列表和特征向量列表。 ``` values, vectors = eig(V) ``` 特征向量表示 B 的縮小子空間的方向或分量,而特征值表示方向的大小。 特征向量可以按特征值按降序排序,以提供 A 的新子空間的分量或軸的等級。 如果所有特征值都具有相似的值,那么我們就知道現有的表示可能已經被合理地壓縮或密集,并且投影可能提供的很少。如果存在接近零的特征值,則它們表示可以被丟棄的 B 的分量或軸。 必須選擇總共 m 個或更少的組件來組成所選擇的子空間。理想情況下,我們將選擇具有 k 個最大特征值的 k 個本征向量,稱為主成分。 ``` B = select(values, vectors) ``` 可以使用其他矩陣分解方法,例如奇異值分解或 SVD。因此,通常將這些值稱為奇異值,并將子空間的向量稱為主要分量。 一旦選擇,可以通過矩陣乘法將數據投影到子空間中。 ``` P = B^T . A ``` 其中 A 是我們希望投影的原始數據,B ^ T 是所選主成分的轉置,P 是 A 的投影。 這被稱為計算 PCA 的協方差方法,盡管有其他方法可以計算它。 ## 手動計算主成分分析 NumPy 中沒有 pca()函數,但我們可以使用 NumPy 函數輕松地逐步計算主成分分析。 下面的例子定義了一個小的 3×2 矩陣,將數據置于矩陣中心,計算中心數據的協方差矩陣,然后計算協方差矩陣的特征分解。特征向量和特征值作為主成分和奇異值,用于投影原始數據。 ``` from numpy import array from numpy import mean from numpy import cov from numpy.linalg import eig # define a matrix A = array([[1, 2], [3, 4], [5, 6]]) print(A) # calculate the mean of each column M = mean(A.T, axis=1) print(M) # center columns by subtracting column means C = A - M print(C) # calculate covariance matrix of centered matrix V = cov(C.T) print(V) # eigendecomposition of covariance matrix values, vectors = eig(V) print(vectors) print(values) # project data P = vectors.T.dot(C.T) print(P.T) ``` 運行該示例首先打印原始矩陣,然后打印中心協方差矩陣的特征向量和特征值,最后是原始矩陣的投影。 有趣的是,我們可以看到只需要第一個特征向量,這表明我們可以將 3×2 矩陣投影到 3×1 矩陣上而幾乎沒有損失。 ``` [[1 2] [3 4] [5 6]] [[ 0.70710678 -0.70710678] [ 0.70710678 0.70710678]] [ 8\. 0.] [[-2.82842712 0\. ] [ 0\. 0\. ] [ 2.82842712 0\. ]] ``` ## 可重復使用的主成分分析 我們可以使用 scikit-learn 庫中的 PCA()類計算數據集的主成分分析。這種方法的好處是,一旦計算出投影,它就可以很容易地一次又一次地應用于新數據。 創建類時,可以將組件數指定為參數。 首先通過調用 fit()函數將類放在數據集上,然后通過調用 transform()函數將原始數據集或其他數據投影到具有所選維數的子空間中。 一旦擬合,可以通過 _explain_variance__ 和 _components__ 屬性在 PCA 類上訪問特征值和主成分。 下面的示例演示了如何使用此類,首先創建一個實例,將其擬合到 3×2 矩陣上,訪問投影的值和向量,以及轉換原始數據。 ``` # Principal Component Analysis from numpy import array from sklearn.decomposition import PCA # define a matrix A = array([[1, 2], [3, 4], [5, 6]]) print(A) # create the PCA instance pca = PCA(2) # fit on data pca.fit(A) # access values and vectors print(pca.components_) print(pca.explained_variance_) # transform data B = pca.transform(A) print(B) ``` 運行該示例首先打印 3×2 數據矩陣,然后是主要分量和值,然后是原始矩陣的投影。 我們可以看到,通過一些非常小的浮點舍入,我們可以獲得與前一個示例中相同的主成分,奇異值和投影。 ``` [[1 2] [3 4] [5 6]] [[ 0.70710678 0.70710678] [ 0.70710678 -0.70710678]] [ 8.00000000e+00 2.25080839e-33] [[ -2.82842712e+00 2.22044605e-16] [ 0.00000000e+00 0.00000000e+00] [ 2.82842712e+00 -2.22044605e-16]] ``` ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * 使用您自己的小設計矩陣值重新運行示例。 * 加載數據集并計算其上的 PCA 并比較兩種方法的結果。 * 搜索并找到 PCA 用于機器學習論文的 10 個例子。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 圖書 * 第 7.3 節主成分分析(SVD 的 PCA),[線性代數導論](http://amzn.to/2CZgTTB),第 5 版,2016 年。 * 第 2.12 節示例:主成分分析,[深度學習](http://amzn.to/2B3MsuU),2016。 ### API * [numpy.mean()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.mean.html) * [numpy.cov()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.cov.html) * [numpy.linalg.eig()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.linalg.eig.html) * [sklearn.decomposition.PCA API](http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html) ### 用品 * [維基百科上的主成分分析](https://en.wikipedia.org/wiki/Principal_component_analysis) * [協方差矩陣](https://en.wikipedia.org/wiki/Covariance_matrix) ### 教程 * [主成分分析與 numpy](https://glowingpython.blogspot.com.au/2011/07/principal-component-analysis-with-numpy.html) ,2011。 * [PCA 和圖像壓縮與 numpy](https://glowingpython.blogspot.com.au/2011/07/pca-and-image-compression-with-numpy.html) ,2011。 * [實施主成分分析(PCA)](http://sebastianraschka.com/Articles/2014_pca_step_by_step.html),2014 年。 ## 摘要 在本教程中,您發現了降低維數的主成分分析機器學習方法。 具體來說,你學到了: * 計算主成分分析的過程以及如何選擇主成分。 * 如何在 NumPy 中從頭開始計算主成分分析。 * 如何計算主成分分析,以便在 scikit-learn 中使用更多數據。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看