KNN算法是一种被广泛使用的机器学习算法,它是一种非参、无模型的算法,不需要对数据进行预处理,能够学习拟合数据的特征,适用于分类和回归问题。Python中的KNN算法实现很简单,本文将介绍如何用Python实现一个KNN算法实例。
数据集准备
首先,我们需要准备一个数据集,可以使用已有数据集,也可以自己生成。本文中,我们使用sklearn中的数据集iris,代码如下:
from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target
其中,X为输入特征,y为输出标签。接下来,我们需要将数据集划分为训练集和测试集:
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)
KNN算法实现
KNN算法的实现步骤如下:
具体实现如下:
import numpy as np def knn(X_train, y_train, x_test, k): distances = [] for i in range(len(X_train)): distance = np.sqrt(np.sum(np.square(x_test - X_train[i]))) distances.append((distance, y_train[i])) distances.sort(key=lambda x: x[0]) neighbors = distances[:k] counts = {} for i in range(len(neighbors)): label = neighbors[i][1] counts[label] = counts.get(label, 0) + 1 sorted_counts = sorted(counts.items(), key=lambda x: x[1], reverse=True) return sorted_counts[0][0]
其中,X_train和y_train为训练集特征和标签,x_test为测试集特征,k为K值。此函数的输出为测试样本的预测标签。
模型评估
最后,我们可以用测试集对模型进行评估:
y_pred = [] for i in range(len(X_test)): label = knn(X_train, y_train, X_test[i], k=5) y_pred.append(label) accuracy = np.sum(y_pred == y_test) / len(y_test) print('Accuracy:', accuracy)
此处我们使用k=5进行模型评估,可以看到,该模型的预测精度为95%。
总结
本文使用Python实现了一个KNN算法实例,该实例可用于分类和回归问题。在实现过程中,我们涉及到数据集切分、特征提取、距离计算、K值确定等问题。KNN算法简单易懂,易于实现,也易于改进。对于学习机器学习初学者来说,是一个不错的入门算法。