基于K近邻算法(KNN)的数据分类预测 不使用工具箱KNN数据分类 matlab代码 注要求 Matlab 2018B 及以上版本今天我们来聊聊K近邻算法KNN这个算法在数据分类和预测中非常常用。虽然很多工具箱都内置了KNN但为了更深入地理解它的工作原理我们决定自己动手实现一个KNN分类器使用Matlab 2018B及以上版本。基于K近邻算法(KNN)的数据分类预测 不使用工具箱KNN数据分类 matlab代码 注要求 Matlab 2018B 及以上版本首先KNN的基本思想很简单给定一个待分类的数据点找到训练集中与它最接近的K个邻居然后根据这些邻居的类别来决定这个数据点的类别。听起来是不是有点像“近朱者赤近墨者黑”第一步准备数据假设我们有一个简单的二维数据集包含两类点。我们可以用Matlab生成一些随机数据来模拟这个场景。% 生成两类随机数据 class1 [randn(50,2)*0.5 1; randn(50,2)*0.5 - 1]; class2 [randn(50,2)*0.5 [1, -1]; randn(50,2)*0.5 [-1, 1]]; % 合并数据并添加标签 data [class1; class2]; labels [ones(100,1); zeros(100,1)];这里class1和class2分别代表两类数据data是合并后的数据集labels是对应的标签。第二步实现KNN算法接下来我们来实现KNN的核心部分。我们需要计算待分类点与训练集中每个点的距离然后找到最近的K个邻居。function predicted_label knn_predict(data, labels, test_point, k) % 计算测试点与每个训练点的欧氏距离 distances sqrt(sum((data - test_point).^2, 2)); % 找到距离最近的K个点 [~, sorted_indices] sort(distances); nearest_labels labels(sorted_indices(1:k)); % 统计K个邻居的类别 predicted_label mode(nearest_labels); end这个函数knn_predict接受训练数据、标签、待分类点以及K值作为输入返回预测的类别。我们使用欧氏距离来计算点之间的距离然后通过排序找到最近的K个邻居最后用mode函数来确定这些邻居中最常见的类别。第三步测试KNN分类器现在我们可以用这个KNN分类器来预测一个新点的类别了。% 选择一个测试点 test_point [0.5, 0.5]; % 使用KNN进行分类预测 k 5; predicted_label knn_predict(data, labels, test_point, k); % 输出结果 if predicted_label 1 disp(测试点属于类别1); else disp(测试点属于类别2); end在这个例子中我们选择了一个测试点[0.5, 0.5]并使用K5来进行分类预测。根据KNN的结果我们可以判断这个点属于哪一类。第四步可视化结果为了更直观地理解KNN的工作原理我们可以将训练数据和测试点可视化。% 绘制训练数据 figure; hold on; scatter(class1(:,1), class1(:,2), r, filled); scatter(class2(:,1), class2(:,2), b, filled); % 绘制测试点 scatter(test_point(1), test_point(2), g, filled); % 绘制K个最近邻居 nearest_points data(sorted_indices(1:k), :); scatter(nearest_points(:,1), nearest_points(:,2), k, x); legend(类别1, 类别2, 测试点, 最近邻居); hold off;通过这个图我们可以清楚地看到测试点及其K个最近邻居的位置从而更好地理解KNN的分类决策。总结通过这个简单的例子我们实现了一个基本的KNN分类器并且通过可视化来加深对算法的理解。虽然KNN的原理很简单但它在实际应用中非常有效尤其是在数据集较小且特征维度不高的情况下。当然KNN也有一些局限性比如对高维数据的处理效率较低对数据的尺度敏感等。不过这些问题可以通过一些预处理技巧来解决。希望这篇文章能帮助你更好地理解KNN算法并激发你自己动手实现算法的兴趣。下次我们可能会聊聊如何优化KNN或者探索其他经典的机器学习算法。
基于K近邻算法(KNN)的数据分类预测 不使用工具箱KNN数据分类 matlab代码 注
发布时间:2026/5/26 5:44:17
基于K近邻算法(KNN)的数据分类预测 不使用工具箱KNN数据分类 matlab代码 注要求 Matlab 2018B 及以上版本今天我们来聊聊K近邻算法KNN这个算法在数据分类和预测中非常常用。虽然很多工具箱都内置了KNN但为了更深入地理解它的工作原理我们决定自己动手实现一个KNN分类器使用Matlab 2018B及以上版本。基于K近邻算法(KNN)的数据分类预测 不使用工具箱KNN数据分类 matlab代码 注要求 Matlab 2018B 及以上版本首先KNN的基本思想很简单给定一个待分类的数据点找到训练集中与它最接近的K个邻居然后根据这些邻居的类别来决定这个数据点的类别。听起来是不是有点像“近朱者赤近墨者黑”第一步准备数据假设我们有一个简单的二维数据集包含两类点。我们可以用Matlab生成一些随机数据来模拟这个场景。% 生成两类随机数据 class1 [randn(50,2)*0.5 1; randn(50,2)*0.5 - 1]; class2 [randn(50,2)*0.5 [1, -1]; randn(50,2)*0.5 [-1, 1]]; % 合并数据并添加标签 data [class1; class2]; labels [ones(100,1); zeros(100,1)];这里class1和class2分别代表两类数据data是合并后的数据集labels是对应的标签。第二步实现KNN算法接下来我们来实现KNN的核心部分。我们需要计算待分类点与训练集中每个点的距离然后找到最近的K个邻居。function predicted_label knn_predict(data, labels, test_point, k) % 计算测试点与每个训练点的欧氏距离 distances sqrt(sum((data - test_point).^2, 2)); % 找到距离最近的K个点 [~, sorted_indices] sort(distances); nearest_labels labels(sorted_indices(1:k)); % 统计K个邻居的类别 predicted_label mode(nearest_labels); end这个函数knn_predict接受训练数据、标签、待分类点以及K值作为输入返回预测的类别。我们使用欧氏距离来计算点之间的距离然后通过排序找到最近的K个邻居最后用mode函数来确定这些邻居中最常见的类别。第三步测试KNN分类器现在我们可以用这个KNN分类器来预测一个新点的类别了。% 选择一个测试点 test_point [0.5, 0.5]; % 使用KNN进行分类预测 k 5; predicted_label knn_predict(data, labels, test_point, k); % 输出结果 if predicted_label 1 disp(测试点属于类别1); else disp(测试点属于类别2); end在这个例子中我们选择了一个测试点[0.5, 0.5]并使用K5来进行分类预测。根据KNN的结果我们可以判断这个点属于哪一类。第四步可视化结果为了更直观地理解KNN的工作原理我们可以将训练数据和测试点可视化。% 绘制训练数据 figure; hold on; scatter(class1(:,1), class1(:,2), r, filled); scatter(class2(:,1), class2(:,2), b, filled); % 绘制测试点 scatter(test_point(1), test_point(2), g, filled); % 绘制K个最近邻居 nearest_points data(sorted_indices(1:k), :); scatter(nearest_points(:,1), nearest_points(:,2), k, x); legend(类别1, 类别2, 测试点, 最近邻居); hold off;通过这个图我们可以清楚地看到测试点及其K个最近邻居的位置从而更好地理解KNN的分类决策。总结通过这个简单的例子我们实现了一个基本的KNN分类器并且通过可视化来加深对算法的理解。虽然KNN的原理很简单但它在实际应用中非常有效尤其是在数据集较小且特征维度不高的情况下。当然KNN也有一些局限性比如对高维数据的处理效率较低对数据的尺度敏感等。不过这些问题可以通过一些预处理技巧来解决。希望这篇文章能帮助你更好地理解KNN算法并激发你自己动手实现算法的兴趣。下次我们可能会聊聊如何优化KNN或者探索其他经典的机器学习算法。