K 近鄰法(K-Nearest Neighbor)

一、K 近鄰法是什麼?

K 近鄰法是一種基本的分類和回歸算法,它是一種最簡單的機器學習算法之一。該算法通過計算一個點周圍 K 個最近鄰居的距離來確定該點的類別或值。基於 K 近鄰法的分類和回歸算法具有簡單、直觀、易於理解的特點。

二、K 近鄰法的原理

K 近鄰法的原理是基於距離度量的。當給定一個樣本後, K 近鄰算法會在訓練集中尋找 K 個距離該樣本最近的樣本點,然後將這 K 個樣本點的類別作為預測樣本的類別。

其中,距離度量通常採用歐式距離或曼哈頓距離。在分類問題中,K 近鄰法採用投票法來確定預測樣本的類別。在回歸問題中,K 近鄰法採用簡單平均法來確定預測樣本的值。

三、K 近鄰法的優缺點

1、優點

K 近鄰法非常簡單,易於理解和實現,在處理多分類時效果良好,對異常值不敏感。此外,它對於樣本空間的默認分布實現文本分類的效果尤為突出。

2、缺點

在處理大規模數據時,計算距離會花費大量時間,而距離計算是 K 近鄰算法最耗時的操作。此外,由於 K 近鄰算法需要保存全部數據集,因此當數據集很大時,需要佔用大量的存儲空間。

四、K 近鄰法的實現

1、數據準備

在使用 K 近鄰法之前,需要先準備數據集。數據集通常包含多個特徵和它們所對應的類別或標籤。下面是一個簡單的數據集示例(其中:X1 和 X2 是兩個特徵,Y 是類別):

X1	X2	Y
4.5	3.0	setosa
6.7	3.1	versicolor
5.3	2.3	virginica

2、計算距離

計算距離是 K 近鄰算法的核心操作之一。常用的距離度量有歐式距離和曼哈頓距離。

以下是採用歐式距離計算樣本點 A 與樣本點 B 之間距離的示例代碼:

import math
def euclidean_distance(point_A, point_B):
    distance = 0
    for i in range(len(point_A)):
        distance += pow((point_A[i] - point_B[i]), 2)
    return math.sqrt(distance)

3、K 近鄰分類

在使用 K 近鄰法進行分類時,需要計算測試樣本點與數據集中所有樣本點之間的距離。然後,根據距離排序選取離測試樣本點最近的 K 個樣本點。最後,根據這 K 個樣本點的 class 進行投票,選出出現最多的 class。以下是 K 近鄰分類算法的示例代碼:

def knn_classification(X_train, y_train, X_test, k):
    distances = []
    for i in range(len(X_train)):
        dist = euclidean_distance(X_train[i], X_test)
        distances.append((dist, y_train[i]))

    distances.sort()
    neighbors = distances[:k]

    class_votes = {}

    for neighbor in neighbors:
        response = neighbor[1]
        if response in class_votes:
            class_votes[response] += 1
        else:
            class_votes[response] = 1

    sorted_votes = sorted(class_votes.items(), key=lambda x: x[1], reverse=True)

    return sorted_votes[0][0]

4、K 近鄰回歸

K 近鄰回歸與分類有所不同,它通過簡單平均法來確定測試樣本點的值。具體操作是:計算測試樣本點與數據集中所有樣本點之間的距離,並選取離測試樣本點最近的 K 個樣本點。然後,計算這 K 個樣本點的平均值,作為測試樣本點的預測值。以下是 K 近鄰回歸算法的示例代碼:

def knn_regression(X_train, y_train, X_test, k):
    distances = []
    for i in range(len(X_train)):
        dist = euclidean_distance(X_train[i], X_test)
        distances.append((dist, y_train[i]))

    distances.sort()
    neighbors = distances[:k]

    avg = 0
    for neighbor in neighbors:
        avg += neighbor[1]

    return avg/k

五、總結

K 近鄰法是一種基本的分類和回歸算法,具有簡單、直觀、易於理解的特點。在處理大規模數據時,計算距離會花費大量時間,而距離計算是 K 近鄰算法最耗時的操作。由於 K 近鄰算法需要保存全部數據集,因此當數據集很大時,需要佔用大量的存儲空間。

原創文章,作者:TSNHF,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/334481.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
TSNHF的頭像TSNHF
上一篇 2025-02-05 13:05
下一篇 2025-02-05 13:05

相關推薦

  • 最近鄰插值

    一、插值方法介紹 在計算機圖形學中,圖像放大實際上是一種插值方法,最近鄰插值是其中最簡單的一種,也是最容易理解的一種方法。該方法的思想是,根據已知的數據點,找到離待插值點最近的一個…

    編程 2025-01-20
  • K近鄰(KNN)聚類分析

    一、KNN聚類算法 在機器學習領域,KNN(K-Nearest Neighbor,K最近鄰)是一種常用的分類和回歸算法。KNN算法通過測量不同特徵值之間的距離進行分類。KNN聚類算…

    編程 2024-12-12
  • k近鄰算法原理詳解

    一、k近鄰算法的原理及計算步驟 k近鄰算法是一種用於分類和回歸的機器學習算法,它的本質是找出與某個數據點最近的k個數據點,利用它們來確定該數據點的分類或回歸值。 具體計算步驟如下:…

    編程 2024-12-07

發表回復

登錄後才能評論