<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國際加速解決方案。 廣告
                # 用于機器學習的稀疏矩陣的溫和介紹 > 原文: [https://machinelearningmastery.com/sparse-matrices-for-machine-learning/](https://machinelearningmastery.com/sparse-matrices-for-machine-learning/) 主要包含零值的矩陣稱為稀疏矩陣,與大多數值非零的矩陣不同,稱為密集。 大型稀疏矩陣通常是常見的,尤其是在應用機器學習中,例如包含計數的數據,將類別映射到計數的數據編碼,甚至在機器學習的整個子字段中,例如自然語言處理。 表示和使用稀疏矩陣就好像它們是密集的一樣計算成本很高,并且通過使用專門處理矩陣稀疏性的表示和操作可以實現表現的大大改進。 在本教程中,您將發現稀疏矩陣,它們出現的問題以及如何直接在 Python 中使用它們。 完成本教程后,您將了解: * 稀疏矩陣主要包含零值,與密集矩陣不同。 * 無數區域中您可能會遇到數據,數據準備和機器學習子字段中的稀疏矩陣。 * 有許多有效的方法來存儲和使用稀疏矩陣,SciPy 提供了可以直接使用的實現。 讓我們開始吧。 ![A Gentle Introduction to Sparse Matrices for Machine Learning](img/f9be8453259dc1cacd2394113a4c6e5f.jpg) 機器學習稀疏矩陣的溫和介紹 攝影: [CAJC:在落基山脈](https://www.flickr.com/photos/carolannie/26617750821/),保留一些權利。 ## 教程概述 本教程分為 5 個部分;他們是: * 稀疏矩陣 * 稀疏性問題 * 機器學習中的稀疏矩陣 * 使用稀疏矩陣 * Python 中的稀疏矩陣 ## 稀疏矩陣 稀疏矩陣是主要由零值組成的矩陣。 稀疏矩陣不同于具有大多數非零值的矩陣,其被稱為密集矩陣。 > 如果矩陣的許多系數為零,則矩陣是稀疏的。對稀疏性的興趣之所以產生,是因為它的利用可以帶來巨大的計算節省,并且因為在實踐中出現的許多大矩陣問題都很少。 - 第 1 頁,[稀疏矩陣的直接方法](http://amzn.to/2DcsQVU),第二版,2017 年。 矩陣的稀疏度可以用分數量化,分數是矩陣中零值的數量除以矩陣中元素的總數。 ``` sparsity = count zero elements / total elements ``` 下面是一個小的 3 x 6 稀疏矩陣的示例。 ``` 1, 0, 0, 1, 0, 0 A = (0, 0, 2, 0, 0, 1) 0, 0, 0, 2, 0, 0 ``` 該示例具有矩陣中 18 個元素的 13 個零值,使該矩陣的稀疏度得分為 0.722 或約 72%。 ## 稀疏性問題 稀疏矩陣可能導致空間和時間復雜性方面的問題。 ### 空間復雜性 非常大的矩陣需要大量內存,而我們希望使用的一些非常大的矩陣是稀疏的。 > 在實踐中,大多數大型矩陣都是稀疏的 - 幾乎所有條目都是零。 - 第 465 頁,[線性代數簡介](http://amzn.to/2AZ7R8j),第五版,2016 年。 非常大的矩陣的一個例子是一個鏈接矩陣,它顯示從一個網站到另一個網站的鏈接。 較小的稀疏矩陣的示例可以是針對所有已知英語單詞的一本書中的單詞的單詞或術語出現矩陣。 在這兩種情況下,包含的矩陣都是稀疏的,其值比數據值多得多。將這些稀疏矩陣表示為密集矩陣的問題是需要存儲器,并且必須為矩陣中的每個 32 位或甚至 64 位零值分配存儲器。 這顯然是浪費內存資源,因為這些零值不包含任何信息。 ### 時間復雜性 假設一個非常大的稀疏矩陣可以適合內存,我們將希望對該矩陣執行操作。 簡單地說,如果矩陣主要包含零值,即沒有數據,則在該矩陣上執行操作可能花費很長時間,其中所執行的大部分計算將涉及將零值相加或相乘在一起。 > 在這些問題上使用線性代數的一般方法是浪費的,因為大多數用于求解方程組或反轉矩陣的 O(N ^ 3)算術運算涉及零操作數。 - 第 75 頁,[數字秘籍:科學計算的藝術](http://amzn.to/2CF5atj),第三版,2007 年。 這是矩陣運算的時間復雜度增加的問題,其隨著矩陣的大小而增加。 當我們考慮到即使是微不足道的機器學習方法可能需要對每行,每列甚至整個矩陣進行許多操作時,這個問題也變得復雜,導致執行時間大大延長。 ## 機器學習中的稀疏矩陣 稀疏矩陣在應用機器學習中出現了很多變化。 在本節中,我們將介紹一些常見示例,以激勵您了解稀疏性問題。 ### 數據 稀疏矩陣出現在某些特定類型的數據中,最顯著的是記錄活動發生或計數的觀察。 三個例子包括: * 用戶是否觀看了電影目錄中的電影。 * 用戶是否在產品目錄中購買了產品。 * 歌曲目錄中歌曲的聽眾數量。 ### 數據準備 稀疏矩陣出現在用于準備數據的編碼方案中。 三個常見的例子包括: * 單熱編碼,用于將分類數據表示為稀疏二進制向量。 * 計數編碼,用于表示文檔詞匯表中單詞的頻率 * TF-IDF 編碼,用于表示詞匯表中的歸一化詞頻分數。 ### 學習領域 機器學習中的一些研究領域必須開發專門的方法來直接解決稀疏性,因為輸入數據幾乎總是稀疏的。 Three examples include: * 處理文本文檔的自然語言處理。 * 用于在目錄中處理產品使用的推薦系統。 * 處理包含大量黑色像素的圖像時的計算機視覺。 > 如果語言模型中有 100,000 個單詞,則特征向量的長度為 100,000,但對于短消息,幾乎所有要素都將計為零。 - 第 22 頁,[人工智能:一種現代方法](http://amzn.to/2C4LhMW),第三版,2009 年。 ## 使用稀疏矩陣 表示和使用稀疏矩陣的解決方案是使用備用數據結構來表示稀疏數據。 可以忽略零值,并且僅需要存儲或操作稀疏矩陣中的數據或非零值。 有多種數據結構可用于有效地構造稀疏矩陣;下面列出了三個常見的例子。 * **鍵字典**。使用字典,其中行和列索引映射到值。 * **名單**。矩陣的每一行都存儲為一個列表,每個子列表包含列索引和值。 * **坐標列表**。每個元組都存儲一個元組列表,其中包含行索引,列索引和值。 還有一些數據結構更適合執行有效的操作;下面列出了兩個常用的例子。 * **壓縮稀疏行**。對于非零值,行的范圍和列索引,使用三個一維數組表示稀疏矩陣。 * **壓縮稀疏列**。與壓縮稀疏行方法相同,除了列索引被壓縮并在行索引之前首先讀取。 壓縮稀疏行(簡稱 CSR)通常用于表示機器學習中的稀疏矩陣,因為它支持高效的訪問和矩陣乘法。 ## Python 中的稀疏矩陣 SciPy 提供了使用多個數據結構創建稀疏矩陣的工具,以及將密集矩陣轉換為稀疏矩陣的工具。 在 NumPy 陣列上運行的許多線性代數 NumPy 和 SciPy 函數可以透明地在 SciPy 稀疏數組上運行。此外,使用 NumPy 數據結構的機器學習庫也可以在 SciPy 稀疏數組上透明地運行,例如用于一般機器學習的 scikit-learn 和用于深度學習的 Keras。 通過調用 _csr_matrix()_ 函數,可以使用 CSR 表示將存儲在 NumPy 數組中的密集矩陣轉換為稀疏矩陣。 在下面的示例中,我們將 3 x 6 稀疏矩陣定義為密集數組,將其轉換為 CSR 稀疏表示,然后通過調用 _todense()_ 函數將其轉換回密集數組。 ``` # dense to sparse from numpy import array from scipy.sparse import csr_matrix # create dense matrix A = array([[1, 0, 0, 1, 0, 0], [0, 0, 2, 0, 0, 1], [0, 0, 0, 2, 0, 0]]) print(A) # convert to sparse matrix (CSR method) S = csr_matrix(A) print(S) # reconstruct dense matrix B = S.todense() print(B) ``` 運行該示例首先打印定義的密集陣列,然后是 CSR 表示,然后是重建的密集矩陣。 ``` [[1 0 0 1 0 0] [0 0 2 0 0 1] [0 0 0 2 0 0]] (0, 0) 1 (0, 3) 1 (1, 2) 2 (1, 5) 1 (2, 3) 2 [[1 0 0 1 0 0] [0 0 2 0 0 1] [0 0 0 2 0 0]] ``` NumPy 不提供計算矩陣稀疏度的函數。 然而,我們可以通過首先找到矩陣的密度并從中減去矩陣來輕松地計算它。 NumPy 數組中的非零元素的數量可以由 _count_nonzero()_ 函數給出,并且數組中元素的總數可以由數組的 size 屬性給出。因此,可以將數組稀疏度計算為 ``` sparsity = 1.0 - count_nonzero(A) / A.size ``` 下面的示例演示了如何計算數組的稀疏性。 ``` # calculate sparsity from numpy import array from numpy import count_nonzero # create dense matrix A = array([[1, 0, 0, 1, 0, 0], [0, 0, 2, 0, 0, 1], [0, 0, 0, 2, 0, 0]]) print(A) # calculate sparsity sparsity = 1.0 - count_nonzero(A) / A.size print(sparsity) ``` 首先運行該示例打印定義的稀疏矩陣,然后是矩陣的稀疏性。 ``` [[1 0 0 1 0 0] [0 0 2 0 0 1] [0 0 0 2 0 0]] 0.7222222222222222 ``` ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * 開發自己的示例,將密集數組轉換為稀疏數組并計算稀疏性。 * 為 SciPy 支持的每個稀疏矩陣表示方法開發一個示例。 * 選擇一個稀疏表示方法并從頭開始自己實現。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 圖書 * [線性代數簡介](http://amzn.to/2AZ7R8j),第五版,2016 年。 * 2.7 節稀疏線性系統,[數值秘籍:科學計算的藝術](http://amzn.to/2CF5atj),第三版,2007。 * [人工智能:一種現代方法](http://amzn.to/2C4LhMW),第三版,2009 年。 * [稀疏矩陣的直接方法](http://amzn.to/2DcsQVU),第二版,2017 年。 ### API * [稀疏矩陣(scipy.sparse)API](https://docs.scipy.org/doc/scipy/reference/sparse.html) * [scipy.sparse.csr_matrix()API](https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.csr_matrix.html) * [numpy.count_nonzero()API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.count_nonzero.html) * [numpy.ndarray.size API](https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.ndarray.size.html) ### 用品 * [維基百科上的稀疏矩陣](https://en.wikipedia.org/wiki/Sparse_matrix) ## 摘要 在本教程中,您發現了稀疏矩陣,它們出現的問題以及如何直接在 Python 中使用它們。 具體來說,你學到了: * 稀疏矩陣主要包含零值,與密集矩陣不同。 * 無數區域中您可能會遇到數據,數據準備和機器學習子字段中的稀疏矩陣。 * 有許多有效的方法來存儲和使用稀疏矩陣,SciPy 提供了可以直接使用的實現。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <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>

                              哎呀哎呀视频在线观看