MachineLearning 之 K 近鄰演算法

2021-08-24 20:23:57 字數 3341 閱讀 3116

topic:

knn 演算法原理

常用距離演算法

決策規則

kd 樹

什麼是最近鄰演算法(nn) ?

最近鄰演算法(nearest neighbor,簡稱:nn):其針對未知類別資料

x x

,找到與其距離最近的資料

y' role="presentation">yy,將

x x

劃入 y' role="presentation">y

y的分類中

如上圖所示,通過計算資料 xu

x

u(未知樣本)和已知類別 ω1

,ω2,

ω3ω 1,

ω2,ω

3(已知樣本)之間的距離,判斷 xu

x

u與不同訓練集的相似度,最終判斷 xu

x

u的類別。顯然,這裡將綠色未知樣本類別判定與紅色已知樣本類別相同較為合適。

什麼是k-近鄰演算法(k-nn) ?

k-近鄰(k-nearest neighbors,簡稱:knn)演算法是最近鄰(nn)演算法的乙個推廣。

nn 演算法中只依賴 1 個樣本進行決策,在分類時過於絕對,會造成分類效果差的情況,為解決 nn 演算法的缺陷,knn 演算法採用 k 個相鄰樣本的方式共同決策未知樣本的類別,這樣在決策中容錯率相對於 nn 演算法就要高很多,分類效果也會更好。

對於未知測試樣本(圖中?所示)採用 knn 演算法進行分類,首先計算未知樣本和訓練樣本之間的相似度,找出最近 k 個相鄰樣本(在圖中 k 值為 3,圈定距離 ?最近的 3 個樣本),再根據最近的 k 個樣本最終判斷未知樣本的類別

距離度量

兩個樣本的相似度 通過 樣本之間特徵值的距離進行表示。

若兩個樣本距離越大 ↑ ,兩個相似度 ↓

最常用的距離公式:曼哈頓距離歐式距離

(1)曼哈頓距離

曼哈頓距離又稱馬氏距離,計程車距離,是計算距離最簡單的方式之一。dm

an=∑

i=1n

|xi−

yi| dma

n=∑i

=1n|

xi−y

i|

"""曼哈頓距離計算

"""import numpy as np

defd_man

(x, y):

d = np.sum(np.abs(x - y))

return d

x = np.array([3.1, 3.2])

print("x:", x)

y = np.array([2.5, 2.8])

print("y:", y)

d_man = d_man(x, y)

print(d_man)

(2)歐式距離

歐式距離源自

n n

維歐氏空間中兩點之間的距離公式。表示式如下:de

uc=∑

i=1n

(xi−

yi)2

' role="presentation">deu

c=∑i

=1n(

xi−y

i)2−

−−−−

−−−−

−−⎷

de

uc=∑

i=1n

(xi−

yi)2

其中:

公式表示為將兩個資料

x x

和 y' role="presentation">y

y中的每乙個對應特徵值之間差值的平方,再求和,最後開平方,便是歐式距離。

"""歐氏距離的計算

"""import numpy as np

defd_euc

(x, y):

d = np.sqrt(np.sum(np.square(x - y)))

return d

x = np.random.random(10) # 隨機生成10個數的陣列作為x特徵的值

print("x:", x)

y = np.random.random(10)

print("y:", y)

distance_euc = d_euc(x, y)

print(distance_euc)

上面我們通過k-nn得到了 k 個相鄰的樣本,那如何通過這 k 個鄰居來判斷 未知樣本的最終類別?

可以根據資料特徵對決策規則進行選取。

"""多數表決法

"""import operator

defmajority_voting

(class_count):

sorted_class_count = sorted(

class_count.items(), key=operator.itemgetter(1), reverse=true)

return sorted_class_count

arr =

majority_voting(arr)

為了提高 knn 搜尋效率,減少計算距離的次數,可以通過構建 kd 樹的方法提高計算效率

什麼是kd樹 ?

kd 樹(英文:k-dimension tree)是一種對 k 維空間中的例項點進行儲存以便對其進行快速檢索的樹形資料結構。

kd 樹是一種二叉樹

對 k 維空間的乙個劃分,構造 kd 樹相當於不斷地用垂直於座標軸的超平面將 k 維空間切分,構成一系列的 k 維超矩形區域。

kd 樹的每個結點對應於乙個 k 維超矩形區域

利用kd 樹可以省去對大部分資料點的搜尋,從而減少搜尋的計算量。

以下便是 kd 樹的最鄰近搜尋步驟:

當根節點搜尋完畢後完成最鄰近搜尋

那如何 構建 kd樹?

按 訓練集中的資料進行切分?

Machine Learning 梯度下降

對於lost function利用梯度下降的方法實現引數調整,梯度下降在每一次迭代的過程中需要全部樣本參與,而隨機梯度法或增量梯度法在迭代中利用樣本中的乙個樣本更新引數。梯度下降達到全域性最優 include include using namespace std define maxiter 22...

安裝Machine Learning環境

公升級python版本到3.5以上。詳情參考linux公升級python版本 步驟1中也包含了安裝pip 第一批ml環境 pip install tensorflow pip install keras pip install beautifulsoup4 pip install lxml pip ...

機器學習(Machine Learning)

最近開始接觸機器學習,簡稱ml。ml 可以這樣理解,從一堆資料中提煉出特徵值。首先,我們需要在計算機中儲存歷史的資料。接著,我們將這些 資料通過機器學習演算法進行處理,這個過程在機器學習中叫做 訓練 處理的結果可以被我們用來對新的資料進行 這個結果一般稱之為 模型 對新資料 的 過程在機器學習中叫做...