App下載

人工智能和機(jī)器學(xué)習(xí)系列(八) NumPy、TensorFlow 和 scikit-learn

陪你演戲 2021-08-25 10:52:32 瀏覽數(shù) (2993)
反饋

本篇文章是我們學(xué)習(xí)Python及其在機(jī)器學(xué)習(xí)(ML)和人工智能(AI)的應(yīng)用系列中的最后一個(gè)模塊了,在上一個(gè)模塊中,我們學(xué)習(xí)Keras,討論了神經(jīng)網(wǎng)絡(luò)。下面,我們將要學(xué)習(xí) Numpy 和 TensorFlow,這兩個(gè)是學(xué)習(xí)機(jī)器學(xué)習(xí)的構(gòu)建塊,所以在使用機(jī)器學(xué)習(xí)的時(shí)候,你一定會(huì)接觸到它們。同時(shí),還會(huì)簡(jiǎn)要概述 scikit-learn 庫(kù),因?yàn)樗荘ython中最完整的機(jī)器學(xué)習(xí)(不包括深度學(xué)習(xí))庫(kù)。

安裝

如果你看了本系列文章的前幾個(gè)模塊,那么本文章將要介紹到的庫(kù)就已經(jīng)安裝好了。如果你還沒安裝,可以看看前面幾篇的文章。

NumPy

正如模塊 4中所述,NumPy 的核心是其 N 維數(shù)組,它還提供線性代數(shù)和傅立葉變換等功能。NumPy 數(shù)組是機(jī)器學(xué)習(xí)庫(kù)函數(shù)中非常常見的輸入值。因此,當(dāng)你擁有一種特定格式的數(shù)據(jù)集并且必須將其轉(zhuǎn)換為另一種格式時(shí),你往往可以直接使用 NumPy?;蛘吣憧梢允褂?NumPy 作為庫(kù)函數(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])

相同的語(yǔ)法也適用于更多維度(盡管在這里很難稱為“行”和“列”):

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 的索引和切片比這更強(qiáng)大。查看參考資料以獲得更完整的概述。

NumPy 數(shù)組可以使用hstackand水平或垂直堆疊(如果維度正確)vstack,兩者都將數(shù)組元組作為參數(shù)(正確獲得括號(hào)的數(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 中的一個(gè)強(qiáng)大的方法。顧名思義,它改變了數(shù)組的形狀。以下就是一個(gè)例子:

vector = np.array([ 1, 2, 3, 4, 5, 6, 7, 8, 9 ])
matrix = vector.reshape((3, 3))

reshape的參數(shù)是新的形狀,一個(gè)所需維度的元組。這是一個(gè)相當(dāng)簡(jiǎn)單的示例,但你也可以使用它來(lái)重新調(diào)整具有更多維度的數(shù)組。元素以特定索引順序從原始數(shù)組中讀取,并以相同索引順序?qū)懭胄聰?shù)組。請(qǐng)參閱 reshape 文檔 以了解有關(guān)索引順序的更多信息。

TensorFlow

為了在高層次上使用神經(jīng)網(wǎng)絡(luò),我們?cè)?Keras簡(jiǎn)介中研究了 Keras。從本質(zhì)上講,TensorFlow 是一個(gè)用于張量計(jì)算的庫(kù)。

張量是向量和多維矩陣的推廣:

  • 0-張量是標(biāo)量
  • 1-張量是一個(gè)向量
  • 2-張量是一個(gè)矩陣
  • 一個(gè) 3-Tensor 是...只是一個(gè) 3-Tensor。

等等。

張量可以保存任何類型的數(shù)據(jù):整數(shù)、浮點(diǎn)數(shù)、字符串等等。盡管在使用 Keras 等高級(jí)庫(kù)時(shí)通常不會(huì)遇到這些,但查看它們?nèi)匀缓苡腥?,因?yàn)樗鼈兪?TensorFlow 的基礎(chǔ)構(gòu)建塊。

那么,NumPy 數(shù)組和張量之間有什么區(qū)別??jī)蓚€(gè)對(duì)象或多或少代表相同的數(shù)據(jù),但張量是不可變的。

TensorFlow 可以對(duì)張量執(zhí)行各種操作。這是一個(gè)示例,它以三個(gè)矩陣開始,對(duì)前兩個(gè)矩陣執(zhí)行矩陣乘法,然后將第三個(gè)矩陣相加,然后將結(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

操作不會(huì)立即執(zhí)行。結(jié)果僅在創(chuàng)建并運(yùn)行會(huì)話時(shí)計(jì)算。在會(huì)話創(chuàng)建之前,上述代碼構(gòu)建了一個(gè)操作圖,然后對(duì)其進(jìn)行評(píng)估。

scikit-學(xué)習(xí)

scikit-learn 是一個(gè)廣泛的庫(kù),提供了許多傳統(tǒng)的機(jī)器學(xué)習(xí)方法(非常粗略地說(shuō):除了機(jī)器學(xué)習(xí)之外的一切)。您可以在 Jupyter Notebook 單元中使用 pip 安裝它:

Python復(fù)制代碼

!pip install scikit-learn

考慮到庫(kù)的廣度,我們不會(huì)專注于一個(gè)特定的代碼示例,而是概述您可以從這個(gè)庫(kù)中獲得什么。scikit-learn 提供有監(jiān)督和無(wú)監(jiān)督的學(xué)習(xí)方法。監(jiān)督意味著您對(duì)訓(xùn)練集中的每個(gè)輸入都有預(yù)期的輸出;無(wú)監(jiān)督意味著你沒有,你會(huì)讓算法得出自己的結(jié)論。其監(jiān)督學(xué)習(xí)的主要特征是分類(識(shí)別類別)和回歸(預(yù)測(cè)連續(xù)值),通過(guò)支持向量機(jī)、隨機(jī)森林/決策樹、最近鄰、樸素貝葉斯等算法進(jìn)行。無(wú)監(jiān)督學(xué)習(xí)主要側(cè)重于聚類(基于特征的自動(dòng)分組),使用k-means和mean-shift等算法。除了學(xué)習(xí)功能本身,scikit-learn 提供了驗(yàn)證、評(píng)估和比較模型和工具以預(yù)處理輸入數(shù)據(jù)的方法。這里遺漏了很多,所以我邀請(qǐng)你看看他們的完整概述的用戶指南

結(jié)論

在本次相關(guān)Python在機(jī)器學(xué)習(xí)和人工智能的學(xué)習(xí)系列模塊中,我們幾乎沒有接觸Numpy、TensorFlow 和 scikit-learn的基礎(chǔ),但相信大家通過(guò)文章能夠大概了解它們可以做什么,以及為什么它們?cè)跈C(jī)器學(xué)習(xí)生態(tài)系統(tǒng)中非常的重要。隨著本篇文章的結(jié)束,此次模塊學(xué)習(xí)系列的就到此結(jié)束了,相信各位也基本掌握了在Python中利用各種AI/ML相關(guān)庫(kù)的基礎(chǔ)知識(shí)。感謝各位的閱讀!


0 人點(diǎn)贊