首頁 >後端開發 >Python教學 >如何用Python寫KNN演算法?

如何用Python寫KNN演算法?

WBOY
WBOY原創
2023-09-19 13:18:291253瀏覽

如何用Python寫KNN演算法?

如何用Python寫KNN演算法?

KNN(K-Nearest Neighbors,K近鄰演算法)是一種簡單而常用的分類演算法。它的思想是透過測量不同樣本之間的距離,將測試樣本分類到最近的K個鄰居。本文將介紹如何使用Python編寫並實作KNN演算法,並提供具體的程式碼範例。

首先,我們需要準備一些資料。假設我們有一組二維的資料集,每個樣本都有兩個特徵。我們將資料集分為兩個類別,並在二維平面上繪製出來。程式碼如下:

import numpy as np
import matplotlib.pyplot as plt

# 生成随机数据
np.random.seed(0)
X1 = np.random.randn(100, 2) + np.array([0, 2])
X2 = np.random.randn(100, 2) + np.array([2, 0])
X = np.vstack((X1, X2))
y = np.hstack((np.zeros(100), np.ones(100)))

# 绘制数据集
plt.scatter(X[:, 0], X[:, 1], c=y)
plt.show()

接下來,我們需要寫KNN演算法的實作程式碼。首先,我們定義一個函數來計算兩個樣本之間的歐氏距離(Euclidean Distance)。程式碼如下:

def euclidean_distance(x1, x2):
    return np.sqrt(np.sum((x1 - x2)**2))

然後,我們寫一個函數來預測一個測試樣本的類別。函數先計算測試樣本與所有訓練樣本之間的距離,然後選擇距離最近的K個樣本,並根據這K個鄰居的類別進行投票,最後返回得票最多的類別作為預測結果。程式碼如下:

def knn_predict(X_train, y_train, x_test, k):
    distances = [euclidean_distance(x_test, x) for x in X_train]
    k_indices = np.argsort(distances)[:k]
    k_nearest_labels = [y_train[i] for i in k_indices]
    return np.argmax(np.bincount(k_nearest_labels))

最後,我們將資料集分割為訓練集和測試集,並使用KNN演算法進行預測。程式碼如下:

from sklearn.model_selection import train_test_split

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

# 对每个测试样本进行预测
predictions = [knn_predict(X_train, y_train, x_test, k=3) for x_test in X_test]

# 计算准确率
accuracy = np.mean(predictions == y_test)
print("Accuracy:", accuracy)

透過以上程式碼範例,我們完成了KNN演算法的編寫。可以看到,使用Python實作KNN演算法相對簡單,而且程式碼量較少。在實際應用中,我們可以根據具體問題調整K值,以達到最佳的分類效果。

總結起來,本文介紹如何使用Python編寫KNN演算法,包括資料準備、歐氏距離計算、演算法實作和準確率計算等步驟。希望本文能對讀者理解和應用KNN演算法有所幫助。

以上是如何用Python寫KNN演算法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn