在现代的计算机时代,机器学习是一个越来越热门的话题。机器学习算法可以使用已知的数据来预测未知的结果,这在很多应用中非常有用。其中,KNN算法是一种简单但强大的机器学习算法,可以准确地对数据进行分类。 在本文中,我们将使用Python编写一个简单的KNN算法,该算法可以对数据进行分类。我们将从KNN算法的工作原理开始,然后介绍它的实现步骤。最后,我们将使用一个互联网上的数据集来测试我们的算法。 KNN算法的工作原理 KNN算法是一种监督式学习算法,它使用已知数据集来进行分类。在KNN算法中,K代表着最近邻居的数量,它是一个超参数,需要手动设置。算法的工作原理如下: - 读取已知的数据集 - 测量新数据点与数据集中每个数据点的距离 - 选取最近的K个数据点 - 统计K个数据点的类别 - 将新数据点分配到最常见的类别 KNN算法的实现步骤 首先,我们需要导入必要的库。我们将使用numpy和pandas来操作数据集,使用sklearn中的train_test_split函数将数据集分为训练集和测试集,使用sklearn中的accuracy_score函数计算算法的准确性。 ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score ``` 然后,我们需要定义一个函数来计算两个数据点之间的距离。在KNN算法中,可以使用欧几里得距离来计算距离。 ```python def euclidean_distance(x1, x2): return np.sqrt(np.sum((x1 - x2) ** 2)) ``` 接下来,我们需要定义我们的KNN类。我们的KNN类将具有以下方法: - fit:用于训练数据。 - predict:用于预测新数据点的类别。 ```python 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): predicted_labels = [self._predict(x) for x in X] return np.array(predicted_labels) def _predict(self, x): # 计算距离 distances = [euclidean_distance(x, x_train) for x_train in self.X_train] # 选择最近的k个点 k_indices = np.argsort(distances)[:self.k] k_nearest_labels = [self.y_train[i] for i in k_indices] # 统计类别 most_common = Counter(k_nearest_labels).most_common(1) return most_common[0][0] ``` 在KNN类中,我们首先使用构造函数来设置我们的超参数k。我们还定义了fit方法来训练数据。该方法需要两个参数,分别是训练数据和对应的标签数据。我们还定义了predict方法来预测新数据点的类别。该方法需要一个参数,即新数据点的特征。我们还定义了一个私有方法_predict,该方法将实际计算距离,选择最近的K个点,并统计它们的类别,最后返回最常见的类别。 最后,我们需要使用数据集来测试我们的算法。我们将使用UCI机器学习库中的Iris数据集。该数据集包含150个数据点,分为三个花的品种。 ```python df = pd.read_csv('iris.csv') X = df.drop('species', axis=1).values y = df['species'].values X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1) clf = KNN(k=3) clf.fit(X_train, y_train) predictions = clf.predict(X_test) accuracy = accuracy_score(y_test, predictions) print('Accuracy:', accuracy) ``` 我们首先使用pandas库来读取数据集。我们然后将数据集中的特征和标签分别存储在X和y变量中。接下来,我们使用train_test_split函数将数据集分成训练集和测试集。我们实例化了KNN类,并使用fit方法将训练数据传递给算法。我们然后使用predict方法来预测测试数据集中的类别,并使用accuracy_score函数计算算法的准确性。 结论 本文中,我们使用Python编写了一个简单的KNN算法来分类数据。我们首先介绍了KNN算法的工作原理,然后详细介绍了它的实现步骤。最后,我们使用一个Iris数据集来测试我们的算法,并使用准确性来评估我们的算法。通过这个例子,我们可以看到KNN算法的实现非常简单,同时也非常强大。