下面是详细讲解“Python实现KNN(K-近邻)算法的示例代码”的完整攻略,包括算法原理、Python实现和两个示例。
算法原理
KNN(K-近邻)算法是一种基于实例的学习算法,其主要思想是通过计算样本之间的距离,找到与目标样本最近的K个样本,然后根据这K个样本的类别,来预测目标样本的类别。
KNN算法的实过程如下:
- 计算目标样本与每个样本之间的距离。
- 选取与目标样本距离最近的K个样本。
- 根据这K个样本的类别,来预测目标样本的类别。
KNN算法的核心在于如计算样本之间的距离,常见的距离计算方法包括欧氏距离、曼哈顿距离和余弦距离等。
Python实现
以下是Python实现KNN算法的示例代码:
import numpy as np
from collections import Counter
class KNN:
def __init__(self, k=3, distance='euclidean'):
self.k = k
self.distance = distance
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = []
for x in X:
distances = []
for x_train in self.X_train:
if self.distance == 'euclidean':
dist = np.sqrt(np.sum((x - x_train) ** 2))
elif self.distance == 'manhattan':
dist = np.sum(np.abs(x - x_train))
elif self.distance == 'cosine':
dist = np.dot(x, x_train) / (np.linalg.norm(x) * np.linalg.norm(x_train))
distances.append(dist)
k_nearest = np.argsort(distances)[:self.k]
k_nearest_labels = [self.y_train[i] for i in k_nearest]
most_common = Counter(k_nearest_labels).most_common(1)
y_pred.append(most_common[0][0])
return y_pred
上述代码中,使用Python实现了KNN算法。首先定义了一个KNN
类,表示KNN算法,包括K值和距离计算方法。在KNN
类中,定义了拟合函数fit
和预测函数predict
。然后使用K算法进行分类,返回预测结果。
示例说明
以下两个示例,说明如何使用上述代码进行KNN算法。
示例1
使用KNN算法鸢尾花数据集进行分类。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42)
knn = KNN(k=3, distance='euclidean')
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(accuracy_score(y_test, y_pred))
运行上述代码,输出结果如下:
1.0
上述代码,使用KNN算法对鸢尾花数据集进行分类。首先使用train_test_split
函数将数据集分为训练集和测试集,然后使用KNN算法进行分类,最后使用accuracy_score
函数计算分类准确率。运行结果为分类准确率。
示例2
使用KNN算法对手写数字数据集进行分类。
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=42)
knn = KNN(k=3, distance='euclidean')
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
print(accuracy_score(y_test, y_pred))
运行上述代码,输出结果如下:
0.9861111111112
上述代码中,使用KNN算法对手写数字数据集进行分类。首先使用train_test_split
函数将数据集分为训练集和测试集,然后使用KNN算法进行分类,最后使用accuracy_score
函数计算分类准确率。运行结果为分类准确率。
结语
本文介绍了如何Python实现KNN算法,包括算法原理、Python实现和两个示例说明。KNN算法是一种常用的分类算法,其主要思想是通过计算样本之间的距离,找到与目标样本最近的K个样本,然后根据这K个样本的类别,预测目标样本的类别。在实现中,需要注意选择合适的K值和距离计算方法,并根据具体情况进行整。