什么是稀疏矩陣?
????大多數(shù)元素都是0的矩陣稱為稀疏矩陣究孕,否則稱為稠密矩陣啥酱。規(guī)模巨大的稀疏矩陣在應(yīng)用機器學(xué)習(xí)中很常見,尤其在自然語言處理領(lǐng)域中厨诸,例如獨熱編碼镶殷。稀疏矩陣的表示、計算會增加空間和時間復(fù)雜度微酬,因此描述稀疏矩陣的稀疏性需要進行特殊的表示绘趋,以提高存儲和計算性能。
????本文由淺入深地結(jié)合Python實例來剖析稀疏矩陣的很多存儲和計算方式颗管,比如SciPy庫在稀疏矩陣的計算上支持很好陷遮。文章內(nèi)容主要包含以下幾個部分。
稀疏矩陣的稀疏性
????矩陣的稀疏性可以用分數(shù)來量化垦江,等于矩陣中零值的個數(shù)除以矩陣中的元素總數(shù):
????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
? ? 該矩陣有13個零值元素,元素總數(shù)為18,因此該矩陣的稀疏性為:13/18=0.722.
機器學(xué)習(xí)中的稀疏矩陣
? ? ? 對于機器學(xué)習(xí)來說茬斧,稀疏矩陣很常見腰懂,比如用戶是否看過電影庫中的所有電影,用戶是否購買了產(chǎn)品目錄中的產(chǎn)品项秉,歌曲目錄中每首歌曲的收聽次數(shù)等绣溜。
? ? 稀疏矩陣的表示方法如下:
? ? 1)Coordinate Format (COO):是一種坐標(biāo)形式的稀疏矩陣。采用三個數(shù)組row娄蔼、col和data保存非零元素的信息怖喻,這三個數(shù)組的長度相同,row保存元素的行岁诉,col保存元素的列锚沸,data保存元素的值。存儲的主要優(yōu)點是靈活涕癣、簡單哗蜈,僅存儲非零元素以及每個非零元素的坐標(biāo)。但是COO不支持元素的存取和增刪坠韩,一旦創(chuàng)建之后距潘,除了將之轉(zhuǎn)換成其它格式的矩陣,幾乎無法對其做任何操作和矩陣運算只搁。
2)Diagonal Storage Format (DIA,對角線存儲格式):對角線矩陣音比,它由兩個數(shù)組進行存儲:values是一個二維數(shù)組,distance是一個一維數(shù)組氢惋,distance[i]表示對角線相對主對角線的偏移量洞翩。values[i][j]表示第i行,相對主對角線偏離distance[j]的那條對角線上的數(shù)值焰望。
3)Compressed Sparse Row Format (CSR):壓縮稀疏行矩陣骚亿,它由values、columns柿估、rows三個數(shù)組組成循未。values是一個一維數(shù)組陷猫,columns是一個和values等長的一維數(shù)組秫舌,表示values中每個元素所在的列。rows是一個一維數(shù)組绣檬,rows[i]表示第i行元素在columns和values中的起始位置足陨。rows數(shù)組的長度等于行數(shù)+1。