欢迎访问宙启技术站
智能推送

实现KNN算法的Python函数

发布时间:2023-06-19 09:27:59

1. KNN算法简介

K最近邻(K-Nearest Neighbor,简称KNN)算法是最简单的机器学习分类算法之一。KNN算法是基于实例的,分类中,实例是对象,即记录其属性和类别,属性称为特征,类别称为标签。KNN算法通过计算实例之间的距离来确定样本的类别。在二分类中,给定一个未知类别的样本,算法通过将其与所知道的最近的K个样本进行比较,确定其类别。

2. KNN算法的Python函数实现

KNN算法依赖于距离的计算和排序,我们可以使用numpy和scipy库的函数实现。以下是一个简单的Python函数,使用Euclidean Distance(欧几里得距离)计算最近的K个邻居,并返回相应的类标签。

import numpy as np
from scipy.spatial.distance import cdist
 
# k-NN classifier
def kNN(X_train, y_train, X_test, k=3):
    # Calculate distances between test points and training points
    distances = cdist(X_test, X_train)
    # Find the k nearest neighbors for each test point
    nearest_neighbors_idx = np.argsort(distances)[:, :k]
    # Find the majority class label for each test point's k neighbors
    nearest_neighbors_labels = y_train[nearest_neighbors_idx]
    y_pred = np.array([np.bincount(labels).argmax() for labels in nearest_neighbors_labels])
    return y_pred

上述Python函数kNN接受以下参数:

- X_train: 训练数据的特征数据数组,每个样本位于一个行向量中。

- y_train: 训练数据的标签数组,每个标签对应一个样本。

- X_test: 测试数据的特征数据数组,每个样本位于一个行向量中。

- k: 包含于预测中的近邻数,通常为3、5、7等奇数。

下一步是将此函数应用于一个实际的数据集并进行测试。

3. 数据集选择和使用

我们将使用Iris数据集,该数据集包含三个类别和四个特征测量的150个样本。我们将使用Python的scikit-learn库加载数据集,并将其分割为训练和测试集。代码如下:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
 
# Load iris dataset
iris = load_iris()
X, y = iris.data, iris.target
 
# Split dataset into training (70%) and testing (30%)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)
 
print("Number of training samples:", X_train.shape[0])
print("Number of testing samples:", X_test.shape[0])

结果如下:

Number of training samples: 105
Number of testing samples: 45

4. 运行和测试KNN

现在我们已经拥有了一些数据,我们可以将其输入到我们的kNN算法中进行分类。我们将为kNN函数设置k值为3,并使用X_train和y_train拟合算法,然后用X_test测试算法并查看模型的性能。代码如下:

# Run kNN algorithm with k=3 and evaluate its performance
y_pred = kNN(X_train, y_train, X_test, k=3)
print("Accuracy:", np.mean(y_pred == y_test))

结果如下:

Accuracy: 0.9777777777777777

5. 总结

KNN是一个简单但有效的算法,可以用于解决许多分类问题。在本文中,我们实现了KNN算法的Python函数,并将其应用于Iris数据集进行测试。我们发现,算法在测试集上的分类效果达到了97.8%。我们可以使用这个函数和其他函数来实现更复杂的机器学习算法,例如分类和回归问题。