一、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