[AI-ML]機器學習是什麼?一起了解!(一)

2023-02-23 18:00:31

機器學習


簡單的說,機器學習是一種讓計算機系統從資料中學習並自動改進的演演算法。通俗地說,機器學習就是讓計算機從資料中「學習」,並使用這些學習成果來做出決策或預測。

學術解釋中,機器學習被定義為一種通過演演算法讓計算機自動學習資料模型和模式,從而實現特定任務的技術。機器學習的主要目標是讓計算機在未經過明確程式設計的情況下自動獲取資料模型,從而能夠識別、分類和預測未知的資料。

機器學習可以分為監督學習、無監督學習、半監督學習和強化學習等幾種主要型別。

監督學習:

  • 線性迴歸(Linear Regression)
  • 邏輯迴歸(Logistic Regression)
  • 支援向量機(Support Vector Machine,SVM)
  • 決策樹(Decision Tree)
  • 隨機森林(Random Forest)
  • 梯度提升樹(Gradient Boosting Tree)
  • 神經網路(Neural Networks)
  • 折積神經網路(Convolutional Neural Networks,CNN)
  • 遞迴神經網路(Recurrent Neural Networks,RNN)
  • 長短時記憶網路(Long Short-Term Memory,LSTM)

無監督學習:

  • K均值聚類(K-means Clustering)
  • 層次聚類(Hierarchical Clustering)
  • 期望最大化演演算法(Expectation-Maximization,EM)
  • 主成分分析(Principal Component Analysis,PCA)
  • 自編碼器(Autoencoder)
  • 受限玻爾茲曼機(Restricted Boltzmann Machine,RBM)

半監督學習:

  • 半監督分類(Semi-supervised Classification)
  • 標籤傳播(Label Propagation)
  • 生成式半監督學習(Generative Semi-supervised Learning)

線性迴歸(Linear Regression)

線性迴歸是一種廣泛使用的機器學習演演算法,用於建立輸入變數和輸出變數之間線性關係的模型。它是一種有監督學習演演算法,常用於解決迴歸問題。

線上性迴歸中,我們嘗試通過一個線性方程來描述輸入變數與輸出變數之間的關係,這個方程被稱為線性迴歸模型。線性迴歸模型通常用最小二乘法來計算最佳擬合直線,即通過所有訓練資料點的一條直線,使得這條直線到所有資料點的距離平方和最小化。在實際應用中,可以使用梯度下降等優化演演算法來訓練模型。

線性迴歸可以用於多種任務,例如預測股票價格、房價、銷售額等連續的數值型資料。除了標準的線性迴歸模型,還有一些變種,例如多元線性迴歸、邏輯迴歸等。
多元線性迴歸(Multiple Linear Regression)是線性迴歸的一個擴充套件,用於建立多個輸入變數和輸出變數之間線性關係的模型。在多元線性迴歸中,我們使用多個輸入變數來預測一個輸出變數。

多元線性迴歸(Multiple Linear Regression)

多元線性迴歸是線性迴歸的一個擴充套件,用於建立多個輸入變數和輸出變數之間線性關係的模型。在多元線性迴歸中,我們使用多個輸入變數來預測一個輸出變數。

多元線性迴歸的模型可以表示為:
y = β0 + β1x1 + β2x2 + ... + βnxn + ε
其中 y 是輸出變數,x1, x2, ..., xn 是輸入變數,β0, β1, β2, ..., βn 是模型的係數,ε 是誤差項。

多元線性迴歸是一種常見的機器學習演演算法,它是線性迴歸的一種擴充套件形式。與簡單線性迴歸只涉及一個自變數不同,多元線性迴歸可以處理多個自變數的情況。

在多元線性迴歸中,我們假設輸入變數 x1, x2, ..., xn 與輸出變數 y 之間存線上性關係。然後,通過給定的樣本資料,使用最小二乘法或者其他優化演演算法來求解出係數 β0, β1, β2, ..., βn 的值,使得模型的預測值儘可能接近真實值。

需要注意的是,多元線性迴歸的一個前提假設是各個輸入變數之間是獨立的。如果輸入變數之間存在高度相關的情況,那麼模型的預測效果可能會變得不穩定。此外,還需要注意過擬合和欠擬合問題,避免模型在訓練集和測試集上的表現出現過大的差異。

多元線性迴歸在實際應用中非常廣泛,比如預測房價、銷售額、股票價格等等。

邏輯迴歸(Logistic Regression)


邏輯迴歸是一種用於解決分類問題的機器學習演演算法。它基於線性迴歸模型,但是將輸出變數限制在0和1之間,用於表示兩個分類標籤。邏輯迴歸常用於二分類問題,例如判斷郵件是否是垃圾郵件、判斷使用者是否會購買某種產品等。

邏輯迴歸(Logistic Regression)是一種用於建立分類模型的機器學習演演算法。它將一組輸入變數 x1, x2, ..., xn 對映到一個介於 0 和 1 之間的輸出變數 y。邏輯迴歸模型可以表示為以下公式:

y = 1 / (1 + e-(b0 + b1*x1 + b2*x2 + ... + bn*xn))

其中,b0、b1、b2、...、bn 是模型的係數,e 是自然對數的底數。這個公式將線性迴歸的結果通過邏輯函數對映到了 0 和 1 之間,表示為概率值,可以用於分類問題。如果 y 大於 0.5,則將其分類為 1,否則分類為 0。

邏輯迴歸的訓練過程通常採用最大似然估計方法。給定一個訓練集,我們希望找到一組係數 b0、b1、b2、...、bn,使得模型對於訓練集的預測值 y 與實際值 t 的差別最小。具體地,我們定義一個損失函數(loss function):

L(b0, b1, b2, ..., bn) = -1/N * sum(t * log(y) + (1-t) * log(1-y))

其中,N 是訓練集中樣本的數量,t 是實際的標籤值(0 或 1),y 是模型對該樣本的預測值。該損失函數稱為交叉熵(cross-entropy)損失函數,它刻畫了模型預測值與實際標籤值之間的差異。我們的目標是找到一組係數 b0、b1、b2、...、bn,使得損失函數最小。這可以通過梯度下降(gradient descent)演演算法來實現。梯度下降演演算法是一種迭代演演算法,每次迭代通過計算損失函數對係數的偏導數來更新系數的值,直到達到收斂條件。

當我們使用邏輯迴歸進行分類時,我們假設輸出變數Y服從伯努利分佈,其引數p與輸入變數x有關,我們需要估計p值。因為p的取值是0到1之間的實數,所以我們需要一個函數f(x) 將輸入x對映到0到1之間的實數。這個函數就是邏輯函數(logistic function),也叫sigmoid函數,可以表示為:
sigmoid 函數的定義為:

sigmoid(z) = 1 / (1 + e-z)

其中,z 表示輸入變數的線性組合,即:

z = β0 + β1x1 + β2x2 + ... + βnxn

y 表示輸出變數的概率值,β0, β1, β2, ..., βn 表示模型的係數,x1, x2, ..., xn 表示輸入變數,ε 表示誤差項。

支援向量機(Support Vector Machine,SVM)

支援向量機是一種二分類模型,其基本模型定義在特徵空間上的間隔最大的線性分類器,通過非線性變換,支援向量機可以學習非線性模型。支援向量機最早是針對線性可分情形提出的,通過軟間隔最大化可以推廣到線性不可分情形。

在支援向量機中,將特徵空間上的點看作是定義在這個空間上的向量,將分類問題轉化為在特徵空間中尋找最優的分離超平面(最大間隔超平面)。最大間隔超平面是指,能夠將特徵空間中不同類別的樣本分隔開,並且兩側的樣本到超平面的距離(即間隔)最大。

對於線性可分情形,最大間隔超平面是唯一的,支援向量機通過學習最大間隔超平面得到一個分類模型。而對於線性不可分情形,需要通過引入「軟間隔」(即允許部分樣本分類錯誤)或者通過對映到高維特徵空間進行非線性分類,來解決這個問題。

支援向量機的優點是可以處理高維度資料,對於訓練資料量不大的情況下也有很好的表現。其缺點是對於大規模的資料集訓練較慢,且對於噪聲較多的資料集可能會出現過擬合的情況。

隨機森林(Random Forest)

隨機森林(Random Forest)是一種整合學習(Ensemble Learning)方法,它基於決策樹(Decision Tree)構建。隨機森林通過在資料集上隨機抽取特徵和樣本來構建多個決策樹,然後對這些決策樹進行投票或取平均值來得出最終的預測結果。

隨機森林的主要優點包括:

隨機抽樣使得隨機森林對於異常值和噪聲具有很好的魯棒性;
可以處理高維資料,並且不需要進行特徵選擇;
在訓練過程中,隨機森林可以評估特徵的重要性程度。
隨機森林的缺點包括:

隨機森林對於高度相關的特徵可能會產生偏差;
隨機森林的訓練時間比較長,特別是對於大規模資料集來說。
隨機森林的核心思想是:通過組合多個決策樹,來降低單個決策樹的過擬合和泛化能力不足的問題。在構建隨機森林的過程中,通常會隨機抽取特徵和樣本,以增加決策樹之間的差異性。當進行預測時,隨機森林會將所有決策樹的預測結果進行綜合,以得出最終的預測結果。

隨機森林的訓練過程通常包括以下步驟:

從訓練集中隨機抽取 m 個樣本和 \(n\) 個特徵,其中 \(m\) 是樣本數量,\(n\) 是特徵數量;
使用這 \(m\) 個樣本和 \(n\) 個特徵來訓練一個決策樹;
重複步驟 1 和 2,構建 \(k\) 個決策樹;
對於迴歸問題,將 \(k\) 個決策樹的預測結果取平均值,對於分類問題,將 \(k\) 個決策樹的預測結果進行投票,以得出最終的預測結果。
隨機森林中的一個重要引數是決策樹的數量 \(k\),通常需要通過交叉驗證等方法來選擇最優的 \(k\)。此外,隨機森林還可以通過評估特徵的重要性程度來進行特徵選擇。

當建立隨機森林模型時,通常需要確定一些引數。以下是幾個重要的引數:

n_estimators: 隨機森林中決策樹的數量。
max_depth: 決策樹的最大深度。如果設為None,則決策樹會一直生長,直到葉子節點中只剩下少於min_samples_split個樣本點。
min_samples_split: 內部節點(非葉子節點)進行劃分所需的最小樣本數。
min_samples_leaf: 葉子節點中需要至少包含的樣本數。
max_features: 每個決策樹在拆分節點時考慮的最大特徵數。
bootstrap: 布林值,表示是否在建立每個決策樹時使用隨機有放回抽樣。
以上引數中,n_estimators和max_features對於隨機森林的效能影響最大。一般情況下,增加n_estimators可以提高模型的準確度,但同時也增加了計算複雜度和記憶體消耗;max_features的增加可以增加隨機性,避免過擬合,但是在特徵數量非常多的情況下,選擇適當的max_features可能會提高效能。

除了上述引數外,隨機森林還可以通過OOB(out-of-bag)誤差評估模型的效能,以及通過特徵重要性(feature importance)選擇重要的特徵。
以下是一個簡單的隨機森林的Python樣例:

# 匯入需要的庫
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score

# 讀取資料
data = pd.read_csv('data.csv')

# 將資料集分為訓練集和測試集
train_data, test_data, train_label, test_label = train_test_split(data.iloc[:, :-1], data.iloc[:, -1], test_size=0.2, random_state=42)

# 建立隨機森林模型
rf = RandomForestClassifier(n_estimators=100, max_depth=5, random_state=42)

# 訓練模型
rf.fit(train_data, train_label)

# 預測測試集資料
predict_label = rf.predict(test_data)

# 計算模型準確率
accuracy = accuracy_score(test_label, predict_label)

# 輸出準確率
print('Accuracy:', accuracy)

程式碼中用到的庫及其作用:

pandas:用於資料處理,可以讀取和處理資料;
sklearn:用於機器學習,包含了多種演演算法和模型;
train_test_split:用於將資料集分為訓練集和測試集,其中test_size參數列示測試集所佔比例;
RandomForestClassifier:隨機森林分類器模型,n_estimators表示森林中樹的數量,max_depth表示每棵樹的最大深度;
accuracy_score:用於計算模型的準確率;
print:用於輸出結果。
簡單解釋一下程式碼的流程:

首先讀取資料,可以是csv、excel等格式的檔案;
然後將資料集分為訓練集和測試集,其中test_size參數列示測試集所佔比例,random_state參數列示亂數生成器的種子,用於保證每次執行的結果一致;
接著建立一個隨機森林模型,其中n_estimators表示森林中樹的數量,max_depth表示每棵樹的最大深度;
使用訓練集對模型進行訓練;
對測試集進行預測,並計算模型的準確率;
最後輸出準確率。

梯度提升樹(Gradient Boosting Tree,GBT)


梯度提升樹(Gradient Boosting Tree,GBT)是一種整合學習方法,也是一種基於決策樹的迴歸和分類演演算法。與隨機森林不同,GBT的每棵決策樹是通過利用先前樹的殘差來構建的。

具體來說,在GBT中,我們首先擬合一個簡單的基礎模型(例如,一個單節點的決策樹)來預測目標變數。然後,我們計算殘差(目標值減去預測值)並使用殘差來訓練另一棵樹。接著,我們將新樹的預測值與先前的預測值相加,並再次計算殘差。我們繼續這個過程,直到達到預定的樹的數量或訓練誤差已經無法減小為止。

在預測階段,GBT將所有樹的預測值相加以獲得最終的預測值。因為每棵樹的預測值只是先前預測值和新樹預測值的加和,所以預測結果是一種「加權投票」的形式。

GBT是一種強大的演演算法,通常在各種迴歸和分類問題上都能表現良好。與其他機器學習演演算法一樣,GBT需要仔細調整其超引數,以獲得最佳效能。
梯度提升樹的主要思想是迭代地訓練決策樹,並將每個新的決策樹的預測結果與真實值之間的誤差用來訓練下一個決策樹。這種迭代的過程類似於梯度下降,因此稱為「梯度提升」。具體地,梯度提升樹的演演算法流程如下:

1.初始化:將所有樣本的真實值作為初始預測值 \(\hat{y}_0\)

2.迭代生成決策樹:依次生成多棵決策樹 \(h_1, h_2, \dots, h_M\),並將它們的預測結果累加起來,得到最終的預測值 \(\hat{y}M\)。每次生成新的決策樹時,都要使它的預測結果儘可能地接近真實值 \(y\),即對訓練集的殘差進行擬合,其中殘差 \(r_i = y_i - \hat{y}{i, m-1}\)

3.計算殘差:對於第 \(m\) 棵樹,計算每個樣本的殘差 \(r_{i,m} = y_i - \hat{y}{i,m-1}\),其中 \(\hat{y}{i,m-1}\) 是前 \(m-1\) 棵樹對樣本 \(i\) 的預測值。

4.擬合殘差:用殘差作為新的響應變數,訓練一棵新的決策樹 \(h_m\)

5.更新預測值:將新生成的決策樹的預測結果加到前面的預測結果中,得到新的預測值 \(\hat{y}m = \hat{y}{m-1} + h_m\)

6.重複步驟 3-5,直到達到預設的樹的數量或者訓練誤差滿足某個停止條件為止。

梯度提升樹是一種強大的預測模型,通常在各種迴歸和分類問題上表現良好。與隨機森林相比,梯度提升樹更加靈活,能夠更好地適應複雜的非線性關係。但是,與隨機森林相比,梯度提升樹的訓練時間更長,並且更容易過擬合。因此,在選擇模型時需要根據具體的問題進行權衡。