Python 中的 K 近邻算法
介绍
K 近邻是一种强大且简单的技术,用于解决与分类和回归相关的问题。它根据输入样本进行预测,并检查样本之间的相似度。在本篇文章中,我们将解释 k-NN 技术以及 Python 的实现,并介绍两种不同的方法。为了确保对这种著名技术的清晰理解,我们将提供逐步说明,并附带可执行代码和结果。
K 近邻算法
K 近邻 (k-NN) 算法是一种监督机器学习 (ML) 技术,用于解决分类和回归问题。它的基本原理是,相似的实例通常会产生相似的结果。给定一个新的输入,该算法会找到 k 个最接近的训练示例,并根据这些样本的标签(分类)或平均值(回归)来确定要预测的类别或值。
语法
两种方法的语法相似。这里我们将使用 scikit-learn 库,它可以帮助在 Python 中开发 k-NN 方法。根据用户的需求,有两种不同的方法。如果用户想要执行分类任务,他/她可以使用 KNeighborsClassifier;如果用户想要预测数值部分,他/她可以使用 KNeighborsRegressor。
1. 分类 -
from sklearn.neighbors import KNeighborsClassifier # Create an instance of the k-NN classifier knn = KNeighborsClassifier(n_neighbors=k) # Train the classifier using the training data knn.fit(X_train, y_train) # Make predictions on new data predictions = knn.predict(X_test)
2. 回归 -
from sklearn.neighbors import KNeighborsRegressor # Create an instance of the k-NN regressor knn = KNeighborsRegressor(n_neighbors=k) # Train the regressor using the training data knn.fit(X_train, y_train) # Make predictions on new data predictions = knn.predict(X_test)
上面的代码使用 k 表示要考虑的邻居数量,X_train 和 y_train 表示训练特征和标签,X_test 表示要进行预测的新数据。
语法说明
从 sklearn.neighbors 包中导入相关的类。
通过定义 k-NN 分类器或回归器的要考虑的邻居数量,可以创建一个实例。
使用 fit() 函数和训练集来训练分类器或回归器。
最后,使用 predict() 方法生成预测,并提供更新的数据。
算法
步骤 1 - 加载数据:- 将数据集读取或加载到 Python 环境中。
步骤 2 - 拆分数据:- 将数据集划分为训练集和测试集,以评估算法的有效性。
步骤 3 - 预处理数据:- 执行任何必要的预处理步骤,例如缩放或标准化,以确保数据表示的一致性。
步骤 4 - 训练 k-NN 模型:- 使用训练数据创建 k-NN 分类器或回归器的实例。
步骤 5 - 评估模型:- 根据测试集进行预测,然后使用适当的指标(如准确率或均方误差)来评估模型的性能。
Learn Python in-depth with real-world projects through our Python certification course. Enroll and become a certified expert to boost your career.
方法
方法 1 - k-NN 分类示例
方法 2 - k-NN 回归示例
方法 1:k-NN 分类示例
让我们看一下 k-NN 分类在现实世界中的应用,根据鸢尾花的花萼和花瓣的尺寸来识别鸢尾花的种类。在本演示中,我们将使用著名的鸢尾花数据集。
示例
from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score # Load the Iris dataset iris = load_iris() # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=42) # Create an instance of the k-NN classifier knn = KNeighborsClassifier(n_neighbors=3) # Train the classifier using the training data knn.fit(X_train, y_train) # Make predictions on the testing set predictions = knn.predict(X_test) # Calculate and print the accuracy of the model accuracy = accuracy_score(y_test, predictions) print("Accuracy:", accuracy)
输出
Accuracy: 1.0
在方法 1 中,加载鸢尾花数据集,将其划分为训练集和测试集,并创建具有 n_neighbors=3 的 k-NN 分类器实例。
使用训练数据集来训练分类器,然后使用测试集进行预测。
为了确定模型的准确性,我们将预测的标签与实际标签进行比较。在本例中,输出显示模型的准确率为 1.0 或 100%。这意味着 k-NN 分类器在识别测试集中鸢尾花种类的准确率为 100%。
方法 2:k-NN 回归示例
让我们使用波士顿房价数据集作为回归示例,来预测自住房的中位数价格。对于此任务,我们将使用 k-NN 回归器。
示例
from sklearn.datasets import load_boston from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsRegressor from sklearn.metrics import mean_squared_error # Load the Boston Housing dataset boston = load_boston() # Split the data into training and testing sets X_train, X_test, y_train, y_test = train_test_split(boston.data, boston.target, test_size=0.2, random_state=42) # Create an instance of the k-NN regressor knn = KNeighborsRegressor(n_neighbors=5) # Train the regressor using the training data knn.fit(X_train, y_train) # Make predictions on the testing set predictions = knn.predict(X_test) # Calculate and print the mean squared error of the model mse = mean_squared_error(y_test, predictions) print("Mean Squared Error:", mse)
输出
Mean Squared Error: 30.137858823529412
在方法 2 中,加载波士顿房价数据集,将其划分为训练集和测试集,并创建具有 n_neighbors=5 的 k-NN 回归器实例。
通常,我们使用训练数据集(也称为训练集)来训练算法,然后使用此训练集通过 k-NN 算法进行预测。
最后,我们比较预测值和实际值以获得模型的均方误差。输出显示模型的均方误差 (MSE),在本例中约为 30.1379。MSE 是测试集中真实值与预测的自住房中位数之间的平均平方差。在本例中,较低的得分表示更准确的回归模型,因为较低的 MSE 表示更好的性能。创建 KNeighborsRegressor 实例时使用的 n_neighbors 参数值以及用于将数据划分为训练集和测试集的随机状态将决定均方误差的确切值。
结论
K 近邻 (k-NN) 算法是一种灵活且流行的机器学习方法。它对于涉及分类和回归的问题特别有用。本文介绍了 k-NN 技术的基础知识、它在 Python 中的语法以及有关如何实现它的详细说明。我们还研究了两种使用 k-NN 进行分类和回归的方法,并附带完整的可执行代码和结果。通过了解它及其有益的应用,您可以将 k-NN 算法用作解决各种机器学习问题的强大工具。