Python机器学习实战之k-近邻算法的实现
简介
k-近邻算法是一种基于实例的学习算法,其基本思想是:对于一个新的样本,找到与其最相似的k个样本,然后根据这k个样本的标签来预测该样本的标签。在本攻略中,我们将介绍如何使用Python编程实现k-近邻算法。
k-近邻算法的实现
以下是使用Python编程实现k-近邻算法的示例代码:
import numpy as np
class KNN:
def __init__(self, k=3):
self.k = k
def fit(self, X, y):
self.X_train = X
self.y_train = y
def predict(self, X):
y_pred = []
for x in X:
distances = np.sqrt(np.sum((self.X_train - x)**2, axis=1))
k_nearest = np.argsort(distances)[:self.k]
k_labels = self.y_train[k_nearest]
y_pred.append(np.bincount(k_labels).argmax())
return y_pred
在这个示例中,我们定义了一个KNN类,该类包含三个方法:init、fit和predict。__init__方法用于初始化k值,默认为3。fit方法用于训练模型,接受训练数据X和标签y作为参数。predict方法用于预测新的样本,接受测试数据X作为参数,并返回预测标签y_pred。
在predict方法中,我们首先定义一个空列表y_pred,用于存储预测标签。然后,我们遍历测试数据X中的每个样本x。对于每个样本x,我们计算其与训练数据X中每个样本的距离,并将距离存储在distances数组中。然后,我们使用argsort函数对distances数组进行排序,并取出前k个最小值的索引,存储在k_nearest数组中。接下来,我们从训练标签y_train中取出k_nearest数组对应的标签,并使用bincount函数统计每个标签出现的次数,并返回出现次数最多的标签作为该样本的预测标签。最后,我们将预测标签y_pred添加到y_pred列表中,并返回y_pred。
示例
以下是两个示例说明,展示了如何使用Python编程实现k-近邻算法。
示例1
使用k-近邻算法对鸢尾花数据集进行分类:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from knn import KNN
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)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
在这个示例中,我们使用sklearn库中的load_iris函数加载鸢尾花数据集,并使用train_test_split函数将数据集分为训练集和测试集。然后,我们定义了一个knn对象,使用fit方法训练模型,并使用predict方法预测测试集的标签。最后,我们使用accuracy_score函数计算预测准确率,并将结果打印输出。
示例2
使用k-近邻算法对手写数字数据集进行分类:
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from knn import KNN
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=5)
knn.fit(X_train, y_train)
y_pred = knn.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
在这个示例中,我们使用sklearn库中的load_digits函数加载手写数字数据集,并使用train_test_split函数将数据集分为训练集和测试集。然后,我们定义了一个knn对象,使用fit方法训练模型,并使用predict方法预测测试集的标签。最后,我们使用accuracy_score函数计算预测准确率,并将结果打印输出。
结论
本攻略介绍了如何使用Python编程实现k-近邻算法,并提供了两个示例说明,展示了如何使用k-近邻算法对鸢尾花数据集和手写数字数据集进行分类。这些示例代码帮助初学者更好地理解如何使用Python编程实现k-近邻算法。