統計學習基礎算法-KNN&SVM&決策樹
上一章給大家介紹了統計學習基礎算法,本節會給大家介紹三個統計學習基礎算法: KNN、 SVM 和 決策樹。
1. KNN(k-Nearest Neighbor)
KNN可以說是最簡單的分類算法之一,注意KNN算法是有監督學習中的分類算法。KNN的全稱是K Nearest Neighbors,意思是K個最近的鄰居,從這個名字我們就能看出一些KNN算法的蛛絲馬跡了。K個最近鄰居,毫無疑問,K的取值肯定是至關重要的。那么最近的鄰居又是怎么回事呢?其實啊,KNN的原理就是當預測一個新的值x的時候,根據它距離最近的K個點是什么類別來判斷x屬於哪個類別。
圖中綠色的點就是我們要預測的那個點,假設K=3。那么KNN算法就會找到與它距離最近的三個點(這里用圓圈把它圈起來了),看看哪種類別多一些,比如這個例子中是藍色三角形多一些,新來的綠色點就歸類到藍三角了。
但是,當K=5的時候,判定就變成不一樣了。這次變成紅圓多一些,所以新來的綠點被歸類成紅圓。從這個例子中,我們就能看得出K的取值是很重要的。
1.1 距離選擇
歐式距離
二維平面上兩個點\((x_1,y_1)\), \((x_2,y_2)\)間的歐式距離
曼哈頓距離
二維平面上兩個點\((x_1,y_1)\), \((x_2,y_2)\)間的曼哈頓距離
切比雪夫距離
二維平面上兩個點\((x_1,y_1)\), \((x_2,y_2)\)間的切比雪夫距離
閔可夫斯基距離(Minkowski Distance)
二維平面上兩個點\((x_1,y_1)\), \((x_2,y_2)\)間的閔可夫斯基距離
\(p=1\)時等價於曼哈頓距離
\(p=2\)時等價於歐式距離
\(p=\infin\)時等價於切比雪夫距離
余弦距離
二維平面上兩個點\((x_1,y_1)\), \((x_2,y_2)\)間的余弦距離
漢明距離
表示兩個(相同長度)字對應位不同的數量,我們以d(x,y)表示兩個字x,y之間的漢明距離。對兩個字符串進行異或運算,並統計結果為1的個數,那么這個數就是漢明距離。
1011101 與 1001001 之間的漢明距離是 2。
2143896 與 2233796 之間的漢明距離是 3。
“toned” 與 “roses” 之間的漢明距離是 3。
1.2 K值選擇
1.3 維度災難
在高維空間中,距離將會發生一些奇妙的變化,例如我們在一個\(D=10\)維的單位超立方體(邊長為1)中均勻分布着一些樣本點,我們想利用一個新數據點周邊\(f=10%\)的點來判定這個點的歸屬類別,那么我需要囊括這個數據點周邊的超立方體的邊長接近為\(e_d(f)=f^{1/D}=0.8\)。
此時最鄰近已經失去了它的局部性,因為他所考慮的點大多都距離自己很遠
比如下圖中, 最左邊的是原圖, 右邊三張圖看上去差別很大, 但和原圖都有着相同的歐氏距離.
避免維度災難的方式:
PCA,特征選擇,增加數據集等
1.4 KNN的優缺點
優點:
1.KNN分類方法是一種非參數的分類技術,簡單直觀,易於實現!只要讓預測點分別和訓練數據求距離,挑選前k個即可,非常簡單直觀。
2.KNN是一種在線技術,新數據可以直接加入數據集而不必進行重新訓練
缺點及改進:
1.當樣本不平衡時,比如一個類的樣本容量很大,其他類的樣本容量很小,輸入一個樣本的時候,K個鄰近值大多數都是大樣本容量的那個類,這時可能會導致分類錯誤。
改進方法:對K鄰近點進行加權,也就是距離近的權值大,距離遠的點權值小。
2.計算量較大,每個待分類的樣本都要計算它到全部點的距離,根據距離排序才能求得K個臨近點。
改進方法:采取kd樹以及其它高級搜索方法BBF等算法減少搜索時間。
3.對維度災難比較敏感
2. 支持向量機
支持向量機(support vector machine)是一種二類分類器,它的基本模型是定義在特征空間上的間隔最大的線性分類器,間隔最大使它有別於感知機;支持向量機還包括核技巧,這使它稱為實質上的非線性分類器。支持向量機的學習策略就是間隔最大化,可形式化為一個求解凸二次規划的問題,也等價於正則化的合頁損失函數的最小化問題。支持向量機的學習算法是求解凸二次規划的最優化算法。
支持向量機學習方法包含構建由簡至繁的模型:線性可分支持向量機、線性支持向量機和非線性支持向量機。簡單模型是復雜模型的基礎,也是復雜模型的特殊情況。
2.1 線性可分支持向量機
給定線性可分訓練數據集,通過間隔最大化或等價地求解相應的凸二次規划問題學習得到的分類超平面為
以及相應的分類決策函數
稱為線性可分支持向量機。
間隔最大化
支持向量機學習的基本想法是求解能夠正確划分訓練數據集並且幾何間隔最大的分離超平面。對於線性可分的訓練數據集而言,線性可分分離超平面有無窮多個(等價於感知機),但是幾何間隔最大的分離超平面是唯一的。這里的間隔最大化又稱為硬間隔最大化(與將要討論的訓練數據集近似線性可分時的軟間隔最大化相對應)
間隔最大化的直觀解釋是:對訓練數據集找到幾何間隔最大的超平面意味着以充分大的確信度對訓練數據進行分類。也就是說,不僅將正負實例分開,而且對最難分的實例點(離超平面最近的點)也有足夠大的確信度將他們分開。這樣的超平面應該對未知的新實例有很好的分類預測能力。
下面考慮如何求得一個幾何間隔最大的分離超平面,即最大間隔的分離超平面。具體的,這個問題可以表示為下面的約束最優化問題:
即我們希望在最大化超平面\((w,b)\)關於訓練數據集的幾何間隔\(\gamma\),約束條件表示的是超平面\((w,b)\)關於每個訓練樣本點的幾何間隔至少是\(\gamma\)。
通過將上面的優化問題等價於如下的優化問題(具體推導可以參考《統計學習方法》李航):
這是一個凸二次規划問題。
凸優化問題是指約束最優化問題:
其中,目標函數\(f(w)\)和約束函數\(g_l(w)\)都是\(R^n\)上的連續可微的凸函數,約束函數\(h_l(w)\)是\(R^n\)上的仿射函數。當目標函數\(f(w)\)是二次函數並且約束函數\(g_l(w)\)是仿射函數時,上述凸優化問題稱為凸二次規划問題。
如果求出了上述約束問題的解\(w^*,b^*\),那么就可以得到最大間隔超平面\(w^*x+b^*=0\)及分類決策函數\(f(x)=sign(w^*x+b^*)\),即線性可分支持向量機模型
支持向量和間隔邊界
在線性可分情況下,訓練數據集的樣本點中與分類超平面距離最近的樣本點稱為支持向量(support vector)。支持向量是使約束條件等號成立的點,即:
對\(y_i=1\)的正例點,支持向量在超平面
上,對\(y_i=-1\)的負例點,支持向量在超平面
上。如下圖,在\(H_1\)和\(H_2\)上的點就是支持向量。
注意到\(H_1\)和\(H_2\)平行,並且沒有實例點落在它們中間。在\(H_1\)與\(H_2\)之間形成一條長帶,分類超平面與它們平行且位於它們中央,長帶的寬度,即\(H_1\)與\(H_2\)之間的距離稱為間隔(margin),間隔依賴於分類超平面的法向量\(w\),等於\(\frac{2}{\|w\|}\),\(H_1\)和\(H_2\)稱為間隔邊界。
在決定分類超平面時只有支持向量起作用,而其它實例點並不起作用。如果移動支持向量將改變所求的解;但是如果在間隔邊界以外移動其它的實例點,甚至去掉這些點,則解是不會改變的。由於支持向量在確定分類超平面中起着決定性作用,所以將這種分類模型稱為支持向量機。支持向量的個數一般很少,所以支持向量機由很少的重要的訓練樣本確定。
為了求解這個優化問題,將它作為原始最優化問題,應用拉格朗日對偶性,通過求解對偶問題(dual problem)得到原始問題(primal problem)的最優解,這就是線性可分支持向量機的對偶解法。這樣做的有點,一是對偶問題往往更容易求解,二是自然引入核函數,進而推廣到非線性分類問題。
對偶問題的形式為(省區推導過程):

對線性可分數據集,假設對偶問題對\(\alpha\)的解為\(\alpha^*=(\alpha_1^{*}, \alpha_2^{*},...,\alpha_N^{*})^T\),可以由\(\alpha^*\)求得原始最優化問題的解\(w^*,b^*\)。有下面的定理:

由次定理可知,分類超平面可以寫成

分類決策函數可以寫成

這就是說,分類決策函數只依賴於輸入\(x\)和訓練樣本輸入的內積,上式稱為線性可分支持向量機的對偶形式。


例子:正例點\(x_1=(3,3)^T,x_2=(4,3)^T\),負例點是\(x_3=(1,1)^T\)。用上述算法求線性可分支持向量機
根據所給數據,對偶問題是、

解這一最優化問題。將\(\alpha_3=\alpha_1+\alpha_2\)代入目標函數得到

對\(\alpha_1,\alpha_2\)求偏導數並令其為\(0\),易知\(s(\alpha_1,\alpha_2)\)在點\((\frac32,-1)^T\)處取極值,但該點不滿足約束條件\(\alpha_2\geq0\),所以最小值應該在邊界上達到
當\(\alpha_1=0\)時,最小值為\(s(0,\frac{2}{13})=-\frac{2}{13}\);當\(\alpha_2=0\)時,最小值為\(s(\frac{1}{4},0)=-\frac{1}{4}\).於是\(s(\alpha_1,\alpha_2)\)在\(\alpha_1=\frac{1}{4},\alpha_2=0\)處達到最小,此時\(\alpha_3=\frac{1}{4}\)。
這樣\(\alpha_1^*,\alpha_3^*\)對應的實例點\(x_1,x_3\)是支持向量,則\(w_1^*=w_2^*=\frac{1}{2}\),\(b^*=-2\).
分類超平面為
分類決策函數為
2.2 線性支持向量機
對於線性可分問題,上述線性可分支持向量機(硬間隔最大化)算法是完美的。但是,訓練數據線性可分是理想的情形。在現實問題中,訓練數據集往往是線性不可分的,即在樣本中出現噪聲點或者異常值。此時,我們將上述算法推廣到更一般的情況

其對偶問題和求解算法與上述線性可分的場景類似,再次就不做展開。
2.3 非線性支持向量機


非線性問題往往不好求解,所以希望能用解線性分類問題的方法解決這個問題。所采取的方法是進行一個非線性變換,將非線性問題變換為線性問題。通過解變換后的線性問題的方法求解原來的非線性問題。對應上圖所示的例子,通過變換,將左圖中橢圓變換成右圖中的直線,將非線性分類問題變換為線性分類問題。
設原空間\(x=(x^{(1)},x^{(2)})\in R^2\),新空間\(z=(z^{(1)},z^{(2)})\in R^2\),定義從原空間到新空間的變換:
經過變換\(z=\phi(x)\),原空間中的點相應地變換為新空間中的點,原空間中的橢圓
變換成為新空間中的直線
在變換后的新空間里,直線\(w_1z^{(1)}+w_2z^{(2)}+b=0\)可以將變換后的正負實例點正確分開,這樣,原空間的非線性可分問題就變成了新空間中的線性可分問題。
上面的例子說明,用線性分類方法求解非線性分類問題分為兩步:首先使用一個變換將原空間的數據映射到新空間;然后在新空間里用線性分類學習方法從訓練數據中學習分類模型。核技巧就屬於這樣的方法。
核技巧應用到支持向量機,其基本想法就是通過一個非線性變換將輸入空間對應於一個特征空間,使得在輸入空間中的超曲面模型對應於特征空間中的超平面模型。這樣,分類問題的學習任務通過在特征空間中求解線性支持向量機就可以完成。
核函數
設\(X\)是輸入空間,又設\(H\)是特征空間,如果從在一個從\(X\)到\(H\)的映射
使得對所有的\(x,z\in X\),函數\(K(x,z)\)滿足條件
則稱\(K(x,z)\)為核函數,\(\phi(x)\)為映射函數。
核技巧的想法是,在學習與預測中只定義核函數\(K(x,z)\),而不是顯示地定義映射函數\(\phi(x)\)。通常,直接計算\(K(x,z)\)比較容易,而通過\(\phi(x)\)和\(\phi(z)\)計算\(K(x,z)\)並不容易。注意\(\phi\)是輸入空間到特征空間的映射,特征空間一般是高維的,甚至無窮維的。可以看到,對於給定的核\(K(x,z)\),特征空間和映射函數\(\phi\)的取法並不唯一。
例如核函數是\(K(x,z)=(x\cdot z)^2\),可以取映射
也可以取映射
還可以取
我們注意到在支持向量機的對偶問題中,無論是目標函數還是決策函數(分類超平面)都只涉及輸入實例之間的內積。在對偶問題的目標函數中的內積\(x_i\cdot x_j\)可以用核函數\(K(x_i,x_j)=\phi(x_i)\cdot\phi(x_j)\)來代替。此時對偶問題的目標函數稱為:

同樣,分類決策函數中的內積也可以用核函數代替,而分類決策函數成為

也就是說,在核函數給定的條件下,可以利用解線性分類問題的方法求解非線性分類問題的支持向量機。學習是隱式地在特征空間進行的,不需要顯式的定義特征空間和映射函數。這樣的技巧稱為核技巧,它是巧妙的利用線性分類學習方法與核函數解決非線性問題的技術。在實際應用中,核函數的選擇有很多種,有效性需要通過實驗驗證。
不是所有的函數都能成為核函數,有判定核函數的充要條件,這里不做展開,兩個常用的核函數:
多項式核函數:
高斯核函數:
核函數可以通過一些已知核函數的組合來構造,假設\(K_1(x,z)\)和\(K_2(x,z)\)是兩個核函數,那么以下的函數也是核函數:
其中\(f\)是任意函數,\(q\)是一個具有非負參數的多項式,\(A\)是一個半正定對稱矩陣。
非線性支持向量機的學習算法

求解支持向量機的凸二次規划問題,具有全局最優解,一般可以通過現有的工具來優化。但當訓練樣本非常多的時候,這些優化算法往往非常耗時低效,以致無法使用。從SVM提出到現在,也出現了很多優化訓練的方法。其中,非常出名的一個是1982年由Microsoft Research的John C. Platt在論文《Sequential Minimal Optimization: A Fast Algorithm for Training Support Vector Machines》中提出的Sequential Minimal Optimization序列最小化優化算法,簡稱SMO算法。SMO算法的思想很簡單,它將大優化的問題分解成多個小優化的問題。這些小問題往往比較容易求解,並且對他們進行順序求解的結果與將他們作為整體來求解的結果完全一致。在結果完全一致的同時,SMO的求解時間短很多。具體算法在這里不做展開。
3. 決策樹
決策樹(decision tree)是一種基本的分類與回歸方法,一般用於分類。決策樹模型呈樹形結構,在分類問題中,表示基於特征對實例進行分類的過程。它可以認為是if-then規則的集合,也可以認為是定義在特征空間與類空間上的條件概率分布。其主要有點是模型具有可讀性,分類速度快。學習時,利用訓練數據,根據損失函數最小化原則建立決策樹模型。預測時,對新的數據,利用決策樹模型進行分類。決策樹學習通常包括3個步驟:特征選擇、決策樹的生成和決策樹的修剪。這些決策樹學習的思想主要來源於由Quinlan在1986年提出的ID3算法和1993年提出的C4.5算法,以及由Brieman等人在1984年提出的CART算法。
3.1 數據划分
3.1.1 基於信息增益的節點划分方法 ID3
數據集D如下,該數據集根據描述了西瓜的各種特征並且標注了該瓜是不是好瓜:
編號 | 色澤 | 根蒂 | 敲聲 | 紋理 | 臍部 | 觸感 | 好瓜 |
---|---|---|---|---|---|---|---|
1 | 青綠 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
2 | 烏黑 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 | 是 |
3 | 烏黑 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
4 | 青綠 | 蜷縮 | 沉悶 | 清晰 | 凹陷 | 硬滑 | 是 |
5 | 淺白 | 蜷縮 | 濁響 | 清晰 | 凹陷 | 硬滑 | 是 |
6 | 青綠 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 是 |
7 | 烏黑 | 稍蜷 | 濁響 | 稍糊 | 稍凹 | 軟粘 | 是 |
8 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 硬滑 | 是 |
9 | 烏黑 | 稍蜷 | 沉悶 | 稍糊 | 稍凹 | 硬滑 | 否 |
10 | 青綠 | 硬挺 | 清脆 | 清晰 | 平坦 | 軟粘 | 否 |
11 | 淺白 | 硬挺 | 清脆 | 模糊 | 平坦 | 硬滑 | 否 |
12 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 軟粘 | 否 |
13 | 青綠 | 稍蜷 | 濁響 | 稍糊 | 凹陷 | 硬滑 | 否 |
14 | 淺白 | 稍蜷 | 沉悶 | 稍糊 | 凹陷 | 硬滑 | 否 |
15 | 烏黑 | 稍蜷 | 濁響 | 清晰 | 稍凹 | 軟粘 | 否 |
16 | 淺白 | 蜷縮 | 濁響 | 模糊 | 平坦 | 硬滑 | 否 |
17 | 青綠 | 蜷縮 | 沉悶 | 稍糊 | 稍凹 | 硬滑 | 否 |
信息熵
熵(entropy)是度量集合純度的一種常用指標,計算方法為:
其中\(n\)代表樣本共有\(n\)類,\(p_k\)表示第\(k\)類樣本所占的比例。
則上述好壞西瓜數據集標簽的信息熵為:
注:計算熵時約定,若\(p=0\),則\(plog_2p=0\)
\(Entropy(D)\)的最小值是\(0\),最大值是\(log_2n\)
信息增益
對於離散特征\(a\),有\(n\)個可能的取值,記為\(\{a_1,a_2,...,a_n\}\),若使用\(a\)對樣本\(D\)進行划分,就會產生\(n\)個分支,則第\(k\)個分支包含了\(D\)中所有的在屬性\(a\)上取值為\(a_k\)的樣本,記為\(D_k\)。則用屬性\(a\)對節點\(D\)進行划分所獲得的信息增益(information gain):
信息增益值越大,意味着用屬性\(a\)來進行划分所獲得的信息純度提升越大。
用屬性“色澤”對節點進行划分,可知該屬性有3個可能的取值{ 青綠, 烏黑, 淺白 },用該屬性對\(D\)進行划分,可得3個分支節點:
\(D^1(色澤=青綠)\)包含6個樣本,3個是好瓜,3個否
\(D^2(色澤=烏黑)\)包含6個樣本,4個是好瓜,2個否
\(D^3(色澤=淺白)\)包含5個樣本,1個是好瓜,4個否
分別計算他們的信息熵:
屬性“色澤”的信息增益為:
同樣的方法求出其他屬性的信息增益:
此處,“紋理”的信息增益值較大,所以用“紋理”作為節點划分的特征。
第一步划分結束,然后再根據第一步划分出的節點一步步繼續划分下去。
3.1.2 基於信息增益率的節點划分方法 C4.5
C4.5采用信息增益率作為數據分割的依據。
回到上邊的例子,假如我們把數據集\(D\)中的第一列“編號”也作為一個屬性,基於該屬性划分節點,就會產生17個節點,我們可以求出
遠遠大於其他的候選屬性。信息增益准則就是對可取數目較多的屬性有所偏好。
為了消除這種情況C4.5算法采用“增益率(gain ratio)”來選擇最佳的划分屬性。信息增益率公式:
其中
\(IV(a)\)稱為屬性的固有值,對於上面的數據集\(D\),求得
得到各屬性的信息增益率:
此處“紋理”的信息增益率最大,所以將該屬性作為節點划分的屬性。
3.1.3 CART(Classification And Regression Trees, 分類回歸樹)
CART既能是分類樹,又能是回歸樹。
3.1.3.1 GINI指數構建分類樹
GINI指數計算公式
基尼指數表示了從數據集\(D\)中隨機抽取兩個樣本,其類別標記不一致的概率,所以GINI值越小表示數據集的純度越高。
對於數據集\(D\)的屬性\(a\)的基尼指數定義為:
在划分屬性的時候,我們選擇使得划分后的基尼指數最小的屬性作為最優划分屬性,即:
例,對於數據集\(D'\)
編號 | 色澤 | 臍部 | 好瓜 |
---|---|---|---|
1 | 青綠 | 凹陷 | 是 |
2 | 烏黑 | 凹陷 | 是 |
3 | 烏黑 | 凹陷 | 是 |
4 | 青綠 | 凹陷 | 是 |
5 | 青綠 | 平坦 | 否 |
6 | 青綠 | 凹陷 | 否 |
用屬性“色澤”划分
\(D'^1(色澤=青綠)\)包含4個樣本,2個是好瓜,2個否
\(D'^2(色澤=烏黑)\)包含2個樣本,2個是好瓜,0個否
最終,屬性“色澤”的基尼指標為:
同樣的方法可以求出:
屬性“臍部”的基尼指標較小,所以就選它作為分裂節點。
3.1.3.2 樣本方差最小值構建回歸樹
回歸方差計算公式:
方差越大,表示該節點的數據越分散,預測的效果就越差。
其中\(SS_T=\sum_{i\in I}(x_i-\mu)^2\),\(SS_L\)和\(SS_R\)是左右節點的方差和。
例,對於數據集\(E\)
密度 | 含糖率 |
---|---|
0.697 | 0.460 |
0.774 | 0.376 |
0.634 | 0.264 |
0.608 | 0.318 |
0.556 | 0.215 |
0.403 | 0.237 |
0.481 | 0.149 |
0.437 | 0.211 |
0.666 | 0.091 |
首先計算“含糖率”\(SS_T\)的方差和,然后依次選取“密度”各屬性值作為分割點計算左右節點的方差和,當\(SS_T-(SS_L+SS_R)\)達到最大值時該點就是分割點。
3.2 分割停止
決策樹節點停止分裂的一般性條件:
- 最小節點數
當節點的數據量小於一個指定的數量時,不繼續分裂。有兩點原因:一是數據量較少時,再做分裂容易強化噪聲數據的作用;二是降低樹生長的復雜性。提前結束分裂一定程度上有利於降低過擬合的影響。 - 熵或者基尼值小於閥值
由上述可知,熵和基尼值的大小表示數據的復雜程度,當熵或者基尼值過小時,表示數據的純度比較大,如果熵或者基尼值小於一定程度數,節點停止分裂。 - 決策樹的深度達到指定的條件
節點的深度可以理解為節點與決策樹跟節點的距離,如根節點的子節點的深度為1,因為這些節點與跟節點的距離為1,子節點的深度要比父節點的深度大1。決策樹的深度是所有葉子節點的最大深度,當深度到達指定的上限大小時,停止分裂。 - 所有特征已經使用完畢,不能繼續進行分裂
被動式停止分裂的條件,當已經沒有可分的屬性時,直接將當前節點設置為葉子節點。
3.3 剪枝
決策樹是充分考慮了所有的數據點而生成的復雜樹,有可能出現過擬合的情況,決策樹越復雜,過擬合的程度會越高。
考慮極端的情況,如果我們令所有的葉子節點都只含有一個數據點,那么我們能夠保證所有的訓練數據都能准確分類,但是很有可能得到高的預測誤差,原因是將訓練數據中所有的噪聲數據都”准確划分”了,強化了噪聲數據的作用。
剪枝修剪分裂前后分類誤差相差不大的子樹,能夠降低決策樹的復雜度,降低過擬合出現的概率。
剪枝有預剪枝和后剪枝兩種方法。
3.3.1 預剪枝
預剪枝就是在節點划分之前先進行估計,如果當前節點的划分不能帶來決策樹泛化性能的提升則停止划分並將當前節點標記為葉節點。
3.3.2 后剪枝
后剪枝是先從訓練集中生成一顆完整的決策樹,然后子弟向上的對非葉節點進行考察,然后根據一定的規則決定是否應將該節點變為葉節點。 剪枝方案有很多種,在此不詳細展開。
聲明
本博客所有內容僅供學習,不為商用,如有侵權,請聯系博主謝謝。
參考文獻
[1] 人工智能:一種現代的方法(第3版)