稀疏矩陣 迷失密林 直觀了解機器學習的稀疏性

2021-10-12 21:34:30 字數 2954 閱讀 4759

全文共2096字,預計學習時長6分鐘

看看這個美麗的森林,現在,假設你有機會在其中進行資料分析。你的任務是找出森林中每個區域的熊貓數量與樹木數量的比。成功分析後,會發現樹木的密度高於熊貓密度。轉換為矩陣形式,差不多是這個樣子:

其中散落著一些可愛的大熊貓,但是矩陣的密度主要源於樹木。設樹木值=「0」,則熊貓值=任何非零值,表示為「1」。然後,該影象將變成由0和1組成的矩陣,這意味著整個矩陣的密度包括大量0和極少量1。

這種包括大量0和極少非0數值的矩陣就是稀疏矩陣。

我們在機器學習和深度學習中總會遇到很多稀疏問題。它們常出沒於資料計數及單詞編碼,並且大多發生在自然語言處理領域中用tf-idf,word2vec等概念對單詞進行向量化處理時。

那麼這是不是意味著,稀疏是個好東西?絕對不是!稀疏沒啥大用,甚至還會幫倒忙。接下來,我們就來說說它帶來的問題。

稀疏矩陣的問題

· 由於矩陣結構中存在大量的冗餘0,稀疏矩陣的計算代價極高。這麼多的0極大增加了空間的複雜性,讓問題解決變得難上加難。規模的增加以及可能導致的各種資源缺乏會令機器學習演算法效果大打折扣。

· 另乙個重要問題是縮短了計算矩陣的有效時長,降低機器學習演算法的計算處理速度。這會帶來重大問題——整體上糟糕的,甚至是十分可怕的時間複雜度。這是都是更長的計算過程時間造成的。

應對稀疏矩陣的方法

假設我們有乙個大且稀疏的矩x——這意味著與非零值相比,它有很多零,如下所示:

解決問題的主要思路是必須替代它們,因為零會增加時空的複雜性。得用各種代表非零值的鍵的字典(dok)或列表的列表(lil),過程如下:

上表展示了解決此問題的絕妙方法。由此可以形成乙個僅包含有用的非零數字的簡化方程。下面的兩種方法可以有效地表示稀疏矩陣:

· 壓縮稀疏行:這種轉換方法利用了上表的內容,即行和列的元組後面分別跟乙個非零值來表示稀疏矩陣。

· 壓縮稀疏列:這種轉換方法利用了上表的內容,即列和行的元組後面分別跟乙個非零值來表示稀疏矩陣。

壓縮稀疏行(csr)及壓縮稀疏列(csc)最能有效地表示稀疏矩陣。我更推薦csr矩陣,而非csc矩陣,因為我習慣用csr了,並且它最標準。我也會使用python中的scipy模組顯示csr和csc轉換的**,選擇適合自己的就好。

不多說理論了,擼起袖子直接編碼!

用稀疏矩陣編碼

開始吧!僅用numpy和scipy兩個機器學習庫就足矣計算上圖的矩陣。可以使用簡單的pip install命令安裝這些檔案。安裝完成後,根據需要對矩陣進行構架並將其分配給變數。

下面的**塊代表了庫的匯入以及稀疏矩陣的建立過程,還有各個輸出的影象。

下一步是將該稀疏矩陣轉換為壓縮稀疏行(csr)格式,輸出類似於先前的**,轉換的**塊如下所示。另外,注意到該圖中的(行,列)元組後跟都乙個非零數字。

這就能說明所有的稀疏核心概念了。這樣,我們就結束了關於稀疏性的討論。稀疏矩陣在機器學習中極為常見,我們必須了解它們可能引起什麼問題以及如何準確解決這些問題。

稀疏直覺必須有,要進行自然語言處理、計算機視覺專案、推薦系統以及任何資料中包含非零和零的資料的複雜任務時更應如此。這些不僅在機器學習中常見,在深度神經網路中也很常見。希望本文能幫你更好地了解稀疏和稀疏矩陣。

我們一起分享ai學習與發展的乾貨

特殊矩陣 稀疏矩陣

對於乙個m n的矩陣,設s為矩陣的元素總個數s m n,設t為矩陣中非零元素的個數,滿足t 稀疏矩陣的零元素非常多,且分布無規律,所以稀疏矩陣的壓縮儲存方法為 只儲存矩陣中的非零元素,按照三元組的形式儲存。三元組由非零元素,該元素行下標和該元素列下標三個資料構成,放在乙個列數為3的陣列中。儲存結構又...

稀疏陣列,稀疏矩陣概念

稀疏矩陣 矩陣中非零元素的個數遠遠小於矩陣元素的總數,並且非零元素的分布沒有規律,通常認為矩陣中非零元素的總數比上矩陣所有元素總數的值小於等於0.05時,則稱該矩陣為稀疏矩陣 sparse matrix 該比值稱為這個矩陣的稠密度。稀疏陣列 稀疏陣列可以看做是普通陣列的壓縮,但是這裡說的普通陣列是值...

稀疏矩陣運算

行邏輯鏈結的三元組順序表實現,加減乘和轉置運算,調的好累,這兩天少了點勁頭了,堅持住,試了好幾組資料應該沒問題了,但也可能還有漏洞 include include include using namespace std define ok 1 define error 0 define overfl...