App下載

人工智能和機器學習系列(八) NumPy、TensorFlow 和 scikit-learn

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

本篇文章是我們學習Python及其在機器學習(ML)和人工智能(AI)的應用系列中的最后一個模塊了,在上一個模塊中,我們學習Keras,討論了神經網(wǎng)絡。下面,我們將要學習 Numpy 和 TensorFlow,這兩個是學習機器學習的構建塊,所以在使用機器學習的時候,你一定會接觸到它們。同時,還會簡要概述 scikit-learn 庫,因為它是Python中最完整的機器學習(不包括深度學習)庫。

安裝

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

NumPy

正如模塊 4中所述,NumPy 的核心是其 N 維數(shù)組,它還提供線性代數(shù)和傅立葉變換等功能。NumPy 數(shù)組是機器學習庫函數(shù)中非常常見的輸入值。因此,當你擁有一種特定格式的數(shù)據(jù)集并且必須將其轉換為另一種格式時,你往往可以直接使用 NumPy?;蛘吣憧梢允褂?NumPy 作為庫函數(shù)調用的結果。

只要維度有意義,NumPy 數(shù)組就可以直接從嵌套列表、嵌套元組或它們的組合中創(chuàng)建,維度數(shù)量不限。

import numpy as np
arr = np.array([ [1, 2, 3], (4, 5, 6) ])
print(arr[0, 1])

在這里,我們把numpy命名為np將它導入。

此外,(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ù)組可以使用hstackand水平或垂直堆疊(如果維度正確)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ù)是新的形狀,一個所需維度的元組。這是一個相當簡單的示例,但你也可以使用它來重新調整具有更多維度的數(shù)組。元素以特定索引順序從原始數(shù)組中讀取,并以相同索引順序寫入新數(shù)組。請參閱 reshape 文檔 以了解有關索引順序的更多信息。

TensorFlow

為了在高層次上使用神經網(wǎng)絡,我們在 Keras簡介中研究了 Keras。從本質上講,TensorFlow 是一個用于張量計算的庫。

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

  • 0-張量是標量
  • 1-張量是一個向量
  • 2-張量是一個矩陣
  • 一個 3-Tensor 是...只是一個 3-Tensor。

等等。

張量可以保存任何類型的數(shù)據(jù):整數(shù)、浮點數(shù)、字符串等等。盡管在使用 Keras 等高級庫時通常不會遇到這些,但查看它們仍然很有趣,因為它們是 TensorFlow 的基礎構建塊。

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

TensorFlow 可以對張量執(zhí)行各種操作。這是一個示例,它以三個矩陣開始,對前兩個矩陣執(zhí)行矩陣乘法,然后將第三個矩陣相加,然后將結果求反。

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í)行。結果僅在創(chuàng)建并運行會話時計算。在會話創(chuàng)建之前,上述代碼構建了一個操作圖,然后對其進行評估。

scikit-學習

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

Python復制代碼

!pip install scikit-learn

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

結論

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


0 人點贊