机器学习 - K近邻算法 (KNN)



KNN 是一种监督学习算法,可用于分类和回归问题。KNN 的核心思想是找到给定测试数据点 k 个最近的数据点,并使用这些最近邻来进行预测。k 值是一个需要调整的超参数,它表示要考虑的邻居数量。

对于分类问题,KNN 算法将测试数据点分配给在 k 个最近邻中出现频率最高的类别。换句话说,邻居数量最多的类别就是预测类别。

对于回归问题,KNN 算法将测试数据点分配给 k 个最近邻值的平均值。

用于衡量两个数据点之间相似度的距离度量是影响 KNN 算法性能的重要因素。最常用的距离度量是欧几里德距离、曼哈顿距离和明可夫斯基距离。

KNN 算法的工作原理

KNN 算法可以概括为以下步骤:

  • 加载数据 - 第一步是将数据集加载到内存中。这可以使用 pandas 或 numpy 等各种库来完成。

  • 分割数据 - 下一步是将数据分割成训练集和测试集。训练集用于训练 KNN 算法,而测试集用于评估其性能。

  • 规范化数据 - 在训练 KNN 算法之前,必须规范化数据,以确保每个特征对距离度量计算的贡献相同。

  • 计算距离 - 数据规范化后,KNN 算法计算测试数据点与训练集中每个数据点之间的距离。

  • 选择 k 个最近邻 - KNN 算法根据上一步计算的距离选择 k 个最近邻。

  • 进行预测 - 对于分类问题,KNN 算法将测试数据点分配给在 k 个最近邻中出现频率最高的类别。对于回归问题,KNN 算法将测试数据点分配给 k 个最近邻值的平均值。

  • 评估性能 - 最后,使用准确率、精确率、召回率和 F1 分数等各种指标来评估 KNN 算法的性能。

Python 实现

现在我们已经讨论了 KNN 算法的理论,让我们使用 scikit-learn 在 Python 中实现它。Scikit-learn 是 Python 中一个流行的机器学习库,它提供了用于分类和回归问题的各种算法。

我们将使用 Iris 数据集,这是一个流行的机器学习数据集,其中包含有关三种不同鸢尾花物种的信息。该数据集具有四个特征,包括萼片长度、萼片宽度、花瓣长度和花瓣宽度,以及一个目标变量,即花的种类。

要在 Python 中实现 KNN,我们需要遵循前面提到的步骤。以下是使用 Iris 数据集在 Python 中实现 KNN 的代码:

示例

# import libraries
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score

# load the Iris dataset
iris = load_iris()

#split the data into training and test sets
X_train, X_test, y_train, y_test = train_test_split(iris.data,
iris.target, test_size=0.35, random_state=42)

#normalize the data
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

#initialize the KNN algorithm
knn = KNeighborsClassifier(n_neighbors=5)

#train the KNN algorithm
knn.fit(X_train, y_train)

#make predictions on the test set
y_pred = knn.predict(X_test)

#evaluate the performance of the KNN algorithm
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy: {:.2f}%".format(accuracy*100))

输出

执行此代码时,将产生以下输出:

Accuracy: 98.11%
广告