本篇文章是我們學(xué)習Python及其在機器學(xué)習(ML)和人工智能(AI)的應(yīng)用系列中的最后一個模塊了,在上一個模塊中,我們學(xué)習Keras,討論了神經(jīng)網(wǎng)絡(luò)。下面,我們將要學(xué)習 Numpy 和 TensorFlow,這兩個是學(xué)習機器學(xué)習的構(gòu)建塊,所以在使用機器學(xué)習的時候,你一定會接觸到它們。同時,還會簡要概述 scikit-learn 庫,因為它是Python中最完整的機器學(xué)習(不包括深度學(xué)習)庫。
安裝
如果你看了本系列文章的前幾個模塊,那么本文章將要介紹到的庫就已經(jīng)安裝好了。如果你還沒安裝,可以看看前面幾篇的文章。
NumPy
正如模塊 4中所述,NumPy 的核心是其 N 維數(shù)組,它還提供線性代數(shù)和傅立葉變換等功能。NumPy 數(shù)組是機器學(xué)習庫函數(shù)中非常常見的輸入值。因此,當你擁有一種特定格式的數(shù)據(jù)集并且必須將其轉(zhuǎn)換為另一種格式時,你往往可以直接使用 NumPy?;蛘吣憧梢允褂?NumPy 作為庫函數(shù)調(diào)用的結(jié)果。
只要維度有意義,NumPy 數(shù)組就可以直接從嵌套列表、嵌套元組或它們的組合中創(chuàng)建,維度數(shù)量不限。
import numpy as np
arr = np.array([ [1, 2, 3], (4, 5, 6) ])
print(arr[0, 1])
在這里,我們把numpy
命名為np
將它導(dǎo)入。
此外,(0, 1)
是用作索引的元組。
NumPy 數(shù)組具有切片,可讓你獲取一行或一列:
# returns the first row as a one-dimensional vector
print(arr[0, :])
# returns the first column as a one-dimensional vector
print(arr[:, 0])
相同的語法也適用于更多維度(盡管在這里很難稱為“行”和“列”):
arr = np.array([ [ [1, 2, 3], [4, 5, 6] ],
[ [7, 8, 9], [10, 11, 12] ] ])
print(arr[:, :, 0]) # [[ 1, 4], [ 7, 10]]
print(arr[1, :, 0]) # [ 7, 10]
NumPy 的索引和切片比這更強大。查看參考資料以獲得更完整的概述。
NumPy 數(shù)組可以使用hstack
and水平或垂直堆疊(如果維度正確)vstack
,兩者都將數(shù)組元組作為參數(shù)(正確獲得括號的數(shù)量?。?br>
arr1 = np.array([ [ 1, 1 ], [ 1, 1 ]])
arr2 = np.array([ [ 2, 2 ], [2, 2]])
print(np.hstack((arr1, arr2)))
print(np.vstack((arr1, arr2)))
?reshape
? 是 NumPy 中的一個強大的方法。顧名思義,它改變了數(shù)組的形狀。以下就是一個例子:
vector = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9 ])
matrix = vector.reshape((3, 3))
reshape
的參數(shù)是新的形狀,一個所需維度的元組。這是一個相當簡單的示例,但你也可以使用它來重新調(diào)整具有更多維度的數(shù)組。元素以特定索引順序從原始數(shù)組中讀取,并以相同索引順序?qū)懭胄聰?shù)組。請參閱 reshape 文檔 以了解有關(guān)索引順序的更多信息。
TensorFlow
為了在高層次上使用神經(jīng)網(wǎng)絡(luò),我們在 Keras簡介中研究了 Keras。從本質(zhì)上講,TensorFlow 是一個用于張量計算的庫。
張量是向量和多維矩陣的推廣:
- 0-張量是標量
- 1-張量是一個向量
- 2-張量是一個矩陣
- 一個 3-Tensor 是...只是一個 3-Tensor。
等等。
張量可以保存任何類型的數(shù)據(jù):整數(shù)、浮點數(shù)、字符串等等。盡管在使用 Keras 等高級庫時通常不會遇到這些,但查看它們?nèi)匀缓苡腥?,因為它們?TensorFlow 的基礎(chǔ)構(gòu)建塊。
那么,NumPy 數(shù)組和張量之間有什么區(qū)別?兩個對象或多或少代表相同的數(shù)據(jù),但張量是不可變的。
TensorFlow 可以對張量執(zhí)行各種操作。這是一個示例,它以三個矩陣開始,對前兩個矩陣執(zhí)行矩陣乘法,然后將第三個矩陣相加,然后將結(jié)果求反。
import tensorflow as tf
a = tf.constant([ [ 0.6, 0.1 ], [ 0.4, -0.3 ] ])
b = tf.constant([ [ 1.2, 0.7 ], [ 0.9, 1.1 ] ])
c = tf.constant([ [ -0.1, 0.2 ], [ 0.3, 0.1 ] ])
d = tf.matmul(a, b)
e = tf.add(c, d)
f = tf.linalg.inv(e)
sess = tf.Session()
result = sess.run(f) # a NumPy array
操作不會立即執(zhí)行。結(jié)果僅在創(chuàng)建并運行會話時計算。在會話創(chuàng)建之前,上述代碼構(gòu)建了一個操作圖,然后對其進行評估。
scikit-學(xué)習
scikit-learn 是一個廣泛的庫,提供了許多傳統(tǒng)的機器學(xué)習方法(非常粗略地說:除了機器學(xué)習之外的一切)。您可以在 Jupyter Notebook 單元中使用 pip 安裝它:
Python復(fù)制代碼
!pip install scikit-learn
考慮到庫的廣度,我們不會專注于一個特定的代碼示例,而是概述您可以從這個庫中獲得什么。scikit-learn 提供有監(jiān)督和無監(jiān)督的學(xué)習方法。監(jiān)督意味著您對訓(xùn)練集中的每個輸入都有預(yù)期的輸出;無監(jiān)督意味著你沒有,你會讓算法得出自己的結(jié)論。其監(jiān)督學(xué)習的主要特征是分類(識別類別)和回歸(預(yù)測連續(xù)值),通過支持向量機、隨機森林/決策樹、最近鄰、樸素貝葉斯等算法進行。無監(jiān)督學(xué)習主要側(cè)重于聚類(基于特征的自動分組),使用k-means和mean-shift等算法。除了學(xué)習功能本身,scikit-learn 提供了驗證、評估和比較模型和工具以預(yù)處理輸入數(shù)據(jù)的方法。這里遺漏了很多,所以我邀請你看看他們的完整概述的用戶指南。
結(jié)論
在本次相關(guān)Python在機器學(xué)習和人工智能的學(xué)習系列模塊中,我們幾乎沒有接觸Numpy、TensorFlow 和 scikit-learn的基礎(chǔ),但相信大家通過文章能夠大概了解它們可以做什么,以及為什么它們在機器學(xué)習生態(tài)系統(tǒng)中非常的重要。隨著本篇文章的結(jié)束,此次模塊學(xué)習系列的就到此結(jié)束了,相信各位也基本掌握了在Python中利用各種AI/ML相關(guān)庫的基礎(chǔ)知識。感謝各位的閱讀!