12.03 不能錯過!有關 NumPy 和數據表達的可視化介紹

全文共3648字,預計學習時長

11分鐘

不能錯過!有關 NumPy 和數據表達的可視化介紹


在 Python 的生態環境中, NumPy 包是數據分析、機器學習和科學計算的主力軍。它大大簡化了向量和矩陣的操作及處理過程。一些領先的Python 包都依靠 NumPy 作為其基礎架構中最基本的部分(例如scikit-learn、SciPy、pandas 和 tensorflow)。除了對數值數據進行分片和分塊處理,在庫中處理和調試高級用例時,掌握 NumPy 操作也能展現其優勢。

不能錯過!有關 NumPy 和數據表達的可視化介紹


此文將介紹一些主要的 NumPy 使用方法,以及在機器學習模型中應用數據前,NumPy 顯示不同類別數據(表格、圖像、文本等)的方式。


不能錯過!有關 NumPy 和數據表達的可視化介紹


創建數組


通過向NumPy 傳遞Python列表並使用“ np.array()”,就可以創建一個NumPy 數組(又名:強大的 ndarray)。在此案例中,Python創建的數組如下所示:


不能錯過!有關 NumPy 和數據表達的可視化介紹


許多情況下,需要NumPy對數組的值進行初始化。NumPy為這些情況提供了 ones()、 zeros()、 random.random() 等方法。只需傳遞要讓NumPy生成的元素數量即可。


不能錯過!有關 NumPy 和數據表達的可視化介紹

創建完數組,就可以開始通過有趣的方式處理它們了。


數組的運算


建立兩個NumPy數組以展現其實用性。將其稱作“data”和“ones”:


不能錯過!有關 NumPy 和數據表達的可視化介紹

將每列的值相加,鍵入“ data + ones”:


不能錯過!有關 NumPy 和數據表達的可視化介紹

筆者在開始學這一工具時覺得精神振奮,因為這種抽象概念可以避免在循環中對此類計算進行編程。它能夠讓人在更高的層面上思考問題。


還有其他方式:


不能錯過!有關 NumPy 和數據表達的可視化介紹

許多情況下,要在一個數組和單個數字之間執行操作(也可稱作向量和標量之間的操作)。假設目前數組代表了以英里為單位的距離,現在要將單位轉換成公里。假設 data * 1.6:


不能錯過!有關 NumPy 和數據表達的可視化介紹


索引


通過所有能夠對Python列表切片(slice)的方式,能夠對NumPy數組進行索引和切片:


不能錯過!有關 NumPy 和數據表達的可視化介紹


聚合


NumPy的優勢還在於提供聚合函數:


不能錯過!有關 NumPy 和數據表達的可視化介紹


除了min、max和 sum這些函數,用mean可以計算平均值,用prod可以得到所有元素相乘的結果,用std可以得到標準差,以及其他函數等等。


更多維度


以上所有實例都是在一個維度中處理向量的。而NumPy的關鍵優勢之一就是它能夠將目前實例中的所有內容應用到任一數量的維度中。


創建矩陣


以下列形狀傳遞一系列Python列表,使NumPy創建矩陣對其進行表示:


不能錯過!有關 NumPy 和數據表達的可視化介紹


只要用一個元組描述所創建的矩陣的維度,就還是可以使用之前提及的方法(ones()、 zeros()和 random.random()):


不能錯過!有關 NumPy 和數據表達的可視化介紹


矩陣的運算


如果兩個矩陣大小相同,則可以使用運算符(+-*/)對矩陣進行相加或相乘。NumPy對每一矩陣進行相同的操作:


不能錯過!有關 NumPy 和數據表達的可視化介紹

只有當不同的維度為1時(例如,矩陣只有一行或一列),才能在不同大小的矩陣上進行運算。在這種情況下,NumPy會對這一操作使用其broadcast機制:


不能錯過!有關 NumPy 和數據表達的可視化介紹


點積


有關運算,在矩陣乘法情況下使用點積是矩陣關鍵區別。NumPy給每一個矩陣都提供了一個dot() 方法,因此可以用這個方法對其他矩陣執行點積操作:


不能錯過!有關 NumPy 和數據表達的可視化介紹


在該圖下方,筆者添加了矩陣維度,以強調兩個矩陣在其與對方匹配的一側必須具有相同維度。將操作可視化,就會如下所示:


不能錯過!有關 NumPy 和數據表達的可視化介紹

矩陣索引


在處理矩陣時,索引分片操作會更有用:

不能錯過!有關 NumPy 和數據表達的可視化介紹

矩陣聚合


聚合矩陣的方式跟聚合向量相同:


不能錯過!有關 NumPy 和數據表達的可視化介紹


不僅可以在矩陣中聚合所有值,還可以通過使用axis參數跨行跨列進行聚合:


不能錯過!有關 NumPy 和數據表達的可視化介紹


轉置與重塑


旋轉矩陣是處理矩陣的常見需求之一。情況常常是這樣的——需要取兩個矩陣的點積,並且需要對齊共用維度。NumPy數組有一個名為T的便捷屬性,能夠對矩陣進行轉置:


不能錯過!有關 NumPy 和數據表達的可視化介紹


在更高級的實操案例中,有可能需要切換特定矩陣的維度。在機器學習應用中,當某一特定模型要求輸入具有特定形狀,而這一形狀又不同於數據集中的形狀時,就常常會出現上述需求。此時NumPy的 reshape() 方法就會大顯神通。向維度傳遞-1,接著NumPy就會基於矩陣推出正確維度:


不能錯過!有關 NumPy 和數據表達的可視化介紹


更多維度


NumPy可以在任意維度完成已提及的一切。其中心數據架構叫做ndarray (n維數組)。


不能錯過!有關 NumPy 和數據表達的可視化介紹


處理新維度有很多途徑,但大多都是給NumPy的函數參數添加逗號:


不能錯過!有關 NumPy 和數據表達的可視化介紹

注意:請記住,當在打印三維NumPy數組時,文本輸出的數組與此處顯示不同。NumPy要求打印n維數組時,最後一個軸的轉速要最快,而第一個最慢。這就意味著會如下呈現:

不能錯過!有關 NumPy 和數據表達的可視化介紹

實際應用


以下為實用示例,均得益於NumPy的幫助。


公式


執行對矩陣和向量有效的數學公式是NumPy的關鍵應用之一。這也是NumPy成為科學領域 Python領域團寵的原因。例如,想想主要用於跟蹤迴歸問題的監督式機器學習的均方誤差公式:


不能錯過!有關 NumPy 和數據表達的可視化介紹


在NumPy中執行這一公式輕而易舉:


不能錯過!有關 NumPy 和數據表達的可視化介紹


其優勢在於,在NumPy 中, predictions和labels包含的值只有一個還是有一千個,這無關緊要(只要都是同樣大小)。隨著一行代碼中四項操作一步步推進,可以通過實例來看一下:


不能錯過!有關 NumPy 和數據表達的可視化介紹


Predictions和labels都包含了三個值,也就意味著n的值為3。進行減法運算後,值會如下呈現:


不能錯過!有關 NumPy 和數據表達的可視化介紹


接著就平方向量中的值:


不能錯過!有關 NumPy 和數據表達的可視化介紹


對三個值進行求和:


不能錯過!有關 NumPy 和數據表達的可視化介紹


最終,對預測來說,得到的是錯誤值;而對模型質量來說,得到的是分數。


數據表達


· 首先想清楚所有需要處理和建模的數據類型(表格、圖像、音頻等)。很多都適用於在n維數組中數據表達:


表格


· 值的表格是個二維矩陣。表格中的每一張工作簿都會有其自己的變量。在Python中,對於這些表格最受歡迎的數據抽取方式是使用pandasdataframe,它實際上也是使用了NumPy,並在此基礎上進行構建。

不能錯過!有關 NumPy 和數據表達的可視化介紹

音頻和時間序列


· 一個音頻文件是一組樣本的一維數組。每個樣本都是表示音頻信號的一小個數據塊。CD音質的音頻每秒會有441,000個樣本,每個樣本都是-32767到32768之間的整數。也就是說,如果有一個十秒CD音質的WAVE文件,就可以以10 * 44,100 = 441,000樣本的長度將其置於NumPy數組中。如果想要抽取音頻的第一秒,只要將文件至於音頻的NumPy數組中,得到音頻[:44100]。


這裡呈現的是音頻文件的一個片段:

不能錯過!有關 NumPy 和數據表達的可視化介紹

時間序列數據也是同理(比如,股票隨時間變動的價格)。


圖像


· 一個圖像是個大小像素的矩陣(高x寬)

如果圖像是黑白的(又稱灰度圖),每個像素都可以用單個數字表示(一般在0(黑)和255(白)之間)。如果想要獲取圖像最頂端的10x10的部分,只需用NumPy獲取image[:10,:10]即可。


這裡呈現的是圖像文件的一部分:

不能錯過!有關 NumPy 和數據表達的可視化介紹

如果圖像為彩色的,那麼每個像素都用三個數字表示——各有紅、綠、藍三色的值。在這種情況下就需要第三個維度了(因為每一格只能包含一個數字)。因此,一幅彩色圖像要用維度的多維數組表示(高x寬x3)。


不能錯過!有關 NumPy 和數據表達的可視化介紹


語言


如果要處理文本,情況會困難一些。用數字表示文本要求建立詞彙表(模型已知的所有獨有單詞列表)這一步和嵌入步驟。一起來看看用數字表示這一句(翻譯過來的)古話吧:


“Have the bards who preceded me left any themeunsung?”


在用數字表示這名尚武詩人略顯焦慮的詞彙之前,需要讓模型觀看大量文本。可以將一小個數據集提供給模型,並用這個來建立(含71290個單詞的)詞彙表:


不能錯過!有關 NumPy 和數據表達的可視化介紹

接著,就可以將這個句子拆分到一個符號數組中(基於通用規則的單詞或單詞部分):


不能錯過!有關 NumPy 和數據表達的可視化介紹


然後用詞彙表中的id代替對應的單詞:


不能錯過!有關 NumPy 和數據表達的可視化介紹

這些id仍沒有給模型提供包含足夠信息的值。因此在給模型輸入單詞序列之前,需要用嵌入向量(在該情況下,是50維度的word2vec 嵌入))替換符號/單詞:


不能錯過!有關 NumPy 和數據表達的可視化介紹


可以看到,這個NumPy數組的維度是 [embedding_dimensionx sequence_length]。實際操作中情況可能不同,但在此處為了視覺上的一致性,就這樣表示。為了完成效果,深度學習模型傾向於保留批量大小的第一維度(因為如果多個實例平行訓練,那麼模型訓練將更高效)。顯然這是個證明reshape()相當有用的實例。例如像BERT這樣的模型,會希望其輸入形狀是這樣的: [batch_size,sequence_length, embedding_size]。


不能錯過!有關 NumPy 和數據表達的可視化介紹


現在,這是模型能夠進行處理並執行有效操作的數字體積了。空了一些行,最好用其他一些要訓練的(或要預測的)模型實例填補它們。


(事實證明,相比其他引發焦慮的詩人的詞句,這個詩人的用詞在本實例中,似乎更為不朽。生而為奴,Antarah的英勇無畏和對語言的需求為其獲得了自由,以及神話般的地位——他的詩是前伊斯蘭阿拉伯國家懸在克爾白神殿上的七首詩之一)。

不能錯過!有關 NumPy 和數據表達的可視化介紹

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


分享到:


相關文章: