k-最近邻 (k-NN) 分类是一种非参数、基于实例的学习算法,用于机器学习,根据特征空间中最近邻的类别对数据点进行分类。它通过考虑数据点的 k 个最近邻的类别来为数据点分配类别。 k-NN 分类的主要目的是利用与现有标记数据的相似性来预测新数据点的类别。
1。距离度量:该算法使用距离度量(通常为欧几里德距离)来确定数据点的“接近程度”。
2。选择 k:参数 k 指定做出分类决策时要考虑的最近邻居的数量。
3。多数投票:新数据点的预测类别是其 k 个最近邻居中最常见的类别。
4。加权投票:在某些情况下,邻居会根据距离进行加权,距离较近的邻居对分类的影响更大。
非参数:k-NN 是一种非参数方法,这意味着它不对数据的基本分布做出任何假设。这使得它可以灵活地处理各种类型的数据。
基于实例的学习:该算法存储整个训练数据集并根据数据中的局部模式进行预测。它也被称为“惰性”学习算法,因为它会延迟处理直到发出查询。
距离计算:距离度量的选择可以显着影响模型的性能。常见指标包括欧几里德距离、曼哈顿距离和闵可夫斯基距离。
k 的选择:k 的值是一个关键的超参数。交叉验证通常用于确定给定数据集的最佳 k 值。
k-最近邻 (k-NN) 分类是一种非参数、基于实例的学习算法,用于根据最近邻的类别对数据点进行分类。此示例演示如何使用合成数据实现用于多类分类的 k-NN、评估模型的性能以及可视化三个类的决策边界。
1。导入库
import numpy as np import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split from sklearn.neighbors import KNeighborsClassifier from sklearn.metrics import accuracy_score, classification_report
此块导入数据操作、绘图和机器学习所需的库。
2。生成 3 个类的样本数据
np.random.seed(42) # For reproducibility n_samples = 300 # Class 0: Cluster at the top-left corner X0 = np.random.randn(n_samples // 3, 2) * 0.5 + [-2, 2] # Class 1: Cluster at the top-right corner X1 = np.random.randn(n_samples // 3, 2) * 0.5 + [2, 2] # Class 2: Cluster at the bottom-center X2 = np.random.randn(n_samples // 3, 2) * 0.5 + [0, -2] # Combine all classes X = np.vstack((X0, X1, X2)) y = np.array([0] * (n_samples // 3) + [1] * (n_samples // 3) + [2] * (n_samples // 3))
此块为位于特征空间不同区域的三个类生成合成数据。
3。分割数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
此块将数据集拆分为训练集和测试集以进行模型评估。
4。创建并训练 k-NN 分类器
k = 5 # Number of neighbors knn_classifier = KNeighborsClassifier(n_neighbors=k) knn_classifier.fit(X_train, y_train)
此块使用指定数量的邻居初始化 k-NN 分类器,并使用训练数据集对其进行训练。
5。做出预测
y_pred = knn_classifier.predict(X_test)
此块使用经过训练的模型对测试集进行预测。
6. Evaluate the Model
accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy:.2f}") print("\nClassification Report:") print(classification_report(y_test, y_pred))
Output:
Accuracy: 1.00 Classification Report: precision recall f1-score support 0 1.00 1.00 1.00 22 1 1.00 1.00 1.00 16 2 1.00 1.00 1.00 22 accuracy 1.00 60 macro avg 1.00 1.00 1.00 60 weighted avg 1.00 1.00 1.00 60
This block calculates and prints the accuracy and classification report, providing insights into the model's performance.
7. Visualize the Decision Boundary
h = 0.02 # Step size in the mesh x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) Z = knn_classifier.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.figure(figsize=(12, 8)) plt.contourf(xx, yy, Z, cmap=plt.cm.RdYlBu, alpha=0.8) plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.RdYlBu, edgecolors='black') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title(f'k-NN Classification (k={k})') plt.colorbar() plt.show()
This block visualizes the decision boundaries created by the k-NN classifier, illustrating how the model separates the three classes in the feature space.
Output:
This structured approach demonstrates how to implement and evaluate k-NN for multiclass classification tasks, providing a clear understanding of its capabilities and the effectiveness of visualizing decision boundaries.
以上是K 最近邻分类,分类:监督机器学习的详细内容。更多信息请关注PHP中文网其他相关文章!