AI技術原理|機器學習算法


摘要

  • 機器學習算法分類:監督學習、半監督學習、無監督學習、強化學習
  • 基本的機器學習算法:線性回歸、支持向量機(SVM)、最近鄰居(KNN)、邏輯回歸、決策樹、k平均、隨機森林、朴素貝葉斯、降維、梯度增強
  • 公式、圖示、案例

機器學習算法分類

機器學習算法大致可以分為:

  • 監督學習 | Supervised learning
  • 半監督學習 | Semi-supervised learning
  • 無監督學習 | Unsupervised learning
  • 強化學習 | Reinforcement learning

Machine-Learning-AlgorithmsMachine-Learning-Algorithms

監督學習 | Supervised learning

監督學習算法基於一組示例進行預測。在監督學習訓練過程中,可以由訓練數據集學到或建立一個模式(函數 / learning model),並依此模式推測新的實例。

監督學習算法要求特定的輸入/輸出,一個常見的例子是根據當年和前幾年的銷售情況估算下一年的銷售額。首先需要決定 使用哪種數據作為范例。例如,文字識別應用中一個手寫的字符,或一行手寫文字。監督學習主要算法包括神經網絡、支持向量機、最近鄰居法、朴素貝葉斯法、決策樹等。

  • 分類(Classification):當數據被用於預測分類變量時,監督學習也被稱為分類。為圖像分配標簽或指示器(例如狗或貓)時就是這種情況。當只有兩個標簽時,這稱為二進制分類( binary classification)。當有兩個以上的類別時,這些問題被稱為多級分類(multi-class classification)。
  • 回歸(Regression):當我們需要預測連續值時,就變成了回歸問題。
  • 預測(Forecasting):根據過去和現在的數據對未來進行預測的過程。它最常用於分析趨勢。

半監督學習 | Semi-supervised learning

監督學習帶來的挑戰是標簽數據可能非常昂貴而且耗時。如果標簽有限,可以使用未標記的示例來增強監督式學習。因為在這種情況下機器沒有完全監督,所以我們說機器是半監督的。使用半監督學習,您可以使用帶有少量標簽數據的未標記示例來提高學習的准確性。

無監督學習 | Unsupervised learning

無監督學習算法沒有特定的目標輸出,算法將數據集分為不同的組。

在進行無監督學習時,機器會顯示完全未標記的數據。它要求發現數據基礎的內在模式,例如聚類結構(clustering structure),低維流形(a low-dimensional manifold)或稀疏樹(sparse tree )和圖(graph)。

  • 聚類(Clustering):對一組數據示例進行分組,使一個組(或一個聚類)中的示例與其他組中的示例更相似(根據某些標准)。這通常用於將整個數據集分成幾個組。可以在每個組中進行分析以幫助用戶找到固有模式。
  • 降維(Dimension reduction):減少需要考慮的變量數量。在許多應用中,原始數據具有非常高的維度特征,並且一些特征對於任務是多余的或不相關的。降維有助於找到數據內在真實的、潛在的關系。

強化學習 | Reinforcement learning

強化學習強調通過基於環境的反饋行為分析、優化以取得最佳預期。機器嘗試不同的場景來發現哪些行為能產生最大的回報,而不是被告知要采取何種行動。反復試驗(Trial-and-error)和延遲獎勵(delayed reward)是將強化學習與其他技術區分開來的關鍵。

強化學習普適性強,主要基於決策進行訓練,算法根據輸出結果(決策)的成功或錯誤來訓練自己,通過大量經驗訓練優化后的算法將能夠給出較好的預測。類似有機體在環境給予的獎勵或懲罰的刺激下,逐步形成對刺激的預期,產生能獲得最大利益的習慣性行為。在運籌學和控制論的語境下,強化學習被稱作“近似動態規划”(approximate dynamic programming,ADP)。

機器學習算法列表

  • 線性回歸算法 Linear Regression
  • 支持向量機算法 (Support Vector Machine,SVM)
  • 最近鄰居/k-近鄰算法 (K-Nearest Neighbors,KNN)
  • 邏輯回歸算法 Logistic Regression
  • 決策樹算法 Decision Tree
  • k-平均算法 K-Means
  • 隨機森林算法 Random Forest
  • 朴素貝葉斯算法 Naive Bayes
  • 降維算法 Dimensional Reduction
  • 梯度增強算法 Gradient Boosting

1. 線性回歸算法 Linear Regression

回歸分析(Regression Analysis)是統計學的數據分析方法,目的在於了解兩個或多個變量間是否相關、相關方向與強度,並建立數學模型以便觀察特定變量來預測其它變量的變化情況。

線性回歸算法(Linear Regression)的建模過程就是使用數據點來尋找最佳擬合線。公式,y = mx + c,其中 y 是因變量,x 是自變量,利用給定的數據集求 m 和 c 的值。
線性回歸又分為兩種類型,即 簡單線性回歸(simple linear regression),只有 1 個自變量;*多變量回歸(multiple regression)
,至少兩組以上自變量。

下面是一個線性回歸示例:基於 Python scikit-learn 工具包描述。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from sklearn import linear_model, datasets

#digit dataset from sklearn
digits = datasets.load_digits()
#create the LinearRegression model
clf = linear_model.LinearRegression()

#set training set
x, y = digits.data[:-1], digits.target[:-1]
#train model
clf.fit(x, y)

#predict
y_pred = clf.predict([digits.data[-1]])
y_true = digits.target[-1]

print(y_pred)
print(y_true)

2. 支持向量機算法(Support Vector Machine,SVM)

支持向量機/網絡算法(SVM)屬於分類型算法。SVM模型將實例表示為空間中的點,將使用一條直線分隔數據點。需要注意的是,支持向量機需要對輸入數據進行完全標記,僅直接適用於兩類任務,應用將多類任務需要減少到幾個二元問題。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from sklearn import svm, datasets

#digit dataset from sklearn
digits = datasets.load_digits()

#create the Support Vector Classifier
clf = svm.SVC(gamma = 0.001, C = 100)

#set training set
x, y = digits.data[:-1], digits.target[:-1]

#train model
clf.fit(x, y)

#predict
y_pred = clf.predict([digits.data[-1]])
y_true = digits.target[-1]

print(y_pred)
print(y_true)

3. 最近鄰居/k-近鄰算法 (K-Nearest Neighbors,KNN)

KNN算法是一種基於實例的學習,或者是局部近似和將所有計算推遲到分類之后的惰性學習。用最近的鄰居(k)來預測未知數據點。k 值是預測精度的一個關鍵因素,無論是分類還是回歸,衡量鄰居的權重都非常有用,較近鄰居的權重比較遠鄰居的權重大。

KNN 算法的缺點是對數據的局部結構非常敏感。計算量大,需要對數據進行規范化處理,使每個數據點都在相同的范圍。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

from sklearn import datasets
from sklearn.neighbors import KNeighborsClassifier

#digit dataset from sklearn
digits = datasets.load_digits()

#create the KNeighborsClassifier
clf = KNeighborsClassifier(n_neighbors=6)

#set training set
x, y = digits.data[:-1], digits.target[:-1]

#train model
clf.fit(x, y)

#predict
y_pred = clf.predict([digits.data[-1]])
y_true = digits.target[-1]

print(y_pred)
print(y_true)

延伸:KNN 的一個缺點是依賴於整個訓練數據集,學習向量量化(Learning Vector Quantization,LVQ)是一種監督學習的人神經網絡算法,允許你選擇訓練實例。LVQ 由數據驅動,搜索距離它最近的兩個神經元,對於同類神經元采取拉攏,異類神經元采取排斥,最終得到數據的分布模式。如果基於 KNN 可以獲得較好的數據集分類效果,利用 LVQ 可以減少存儲訓練數據集存儲規模。典型的學習矢量量化算法有LVQ1、LVQ2和LVQ3,尤以LVQ2的應用最為廣泛。

4. 邏輯回歸算法 Logistic Regression

邏輯回歸算法(Logistic Regression)一般用於需要明確輸出的場景,如某些事件的發生(預測是否會發生降雨)。通常,邏輯回歸使用某種函數將概率值壓縮到某一特定范圍。
例如,Sigmoid 函數(S 函數)是一種具有 S 形曲線、用於二元分類的函數。它將發生某事件的概率值轉換為 0, 1 的范圍表示。

Y = E ^(b0+b1 x)/(1 + E ^(b0+b1 x ))

以上是一個簡單的邏輯回歸方程,B0,B1是常數。這些常數值將被計算獲得,以確保預測值和實際值之間的誤差最小。

5. 決策樹算法 Decision Tree

決策樹(Decision tree)是一種特殊的樹結構,由一個決策圖和可能的結果(例如成本和風險)組成,用來輔助決策。機器學習中,決策樹是一個預測模型,樹中每個節點表示某個對象,而每個分叉路徑則代表某個可能的屬性值,而每個葉節點則對應從根節點到該葉節點所經歷的路徑所表示的對象的值。決策樹僅有單一輸出,通常該算法用於解決分類問題。

一個決策樹包含三種類型的節點:

  • 決策節點:通常用矩形框來表示
  • 機會節點:通常用圓圈來表示
  • 終結點:通常用三角形來表示

簡單決策樹算法案例,確定人群中誰喜歡使用信用卡。考慮人群的年齡和婚姻狀況,如果年齡在30歲或是已婚,人們更傾向於選擇信用卡,反之則更少。
通過確定合適的屬性來定義更多的類別,可以進一步擴展此決策樹。在這個例子中,如果一個人結婚了,他超過30歲,他們更有可能擁有信用卡(100% 偏好)。測試數據用於生成決策樹。

注意:對於那些各類別樣本數量不一致的數據,在決策樹當中信息增益的結果偏向於那些具有更多數值的特征。

6. k-平均算法 K-Means

k-平均算法(K-Means)是一種無監督學習算法,為聚類問題提供了一種解決方案。
K-Means 算法把 n 個點(可以是樣本的一次觀察或一個實例)划分到 k 個集群(cluster),使得每個點都屬於離他最近的均值(即聚類中心,centroid)對應的集群。重復上述過程一直持續到重心不改變。

7. 隨機森林算法 Random Forest

隨機森林算法(Random Forest)的名稱由 1995 年由貝爾實驗室提出的random decision forests 而來,正如它的名字所說的那樣,隨機森林可以看作一個決策樹的集合。
隨機森林中每棵決策樹估計一個分類,這個過程稱為“投票(vote)”。理想情況下,我們根據每棵決策樹的每個投票,選擇最多投票的分類。

8. 朴素貝葉斯算法 Naive Bayes

朴素貝葉斯算法(Naive Bayes)基於概率論的貝葉斯定理,應用非常廣泛,從文本分類、垃圾郵件過濾器、醫療診斷等等。朴素貝葉斯適用於特征之間的相互獨立的場景,例如利用花瓣的長度和寬度來預測花的類型。“朴素”的內涵可以理解為特征和特征之間獨立性強。

與朴素貝葉斯算法密切相關的一個概念是最大似然估計(Maximum likelihood estimation),歷史上大部分的最大似然估計理論也都是在貝葉斯統計中得到大發展。例如,建立人口身高模型,很難有人力與物力去統計全國每個人的身高,但是可以通過采樣,獲取部分人的身高,然后通過最大似然估計來獲取分布的均值與方差。

Naive Bayes is called naive because it assumes that each input variable is independent.

9. 降維算法 Dimensional Reduction

在機器學習和統計學領域,降維是指在限定條件下,降低隨機變量個數,得到一組“不相關”主變量的過程,並可進一步細分為特征選擇和特征提取兩大方法。

一些數據集可能包含許多難以處理的變量。特別是資源豐富的情況下,系統中的數據將非常詳細。在這種情況下,數據集可能包含數千個變量,其中大多數變量也可能是不必要的。在這種情況下,幾乎不可能確定對我們的預測影響最大的變量。此時,我們需要使用降維算法,降維的過程中也可能需要用到其他算法,例如借用隨機森林,決策樹來識別最重要的變量。

10. 梯度增強算法 Gradient Boosting

梯度增強算法(Gradient Boosting)使用多個弱算法來創建更強大的精確算法。它與使用單個估計量不同,而是使用多個估計量創建一個更穩定和更健壯的算法。梯度增強算法有幾種:

  • XGBoost  — 使用線性和樹算法
  • LightGBM  — 只使用基於樹的算法
    梯度增強算法的特點是精度較高。此外,LightGBM 算法具有令人難以置信的高性能。

擴展閱讀


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM