产生ω1类二维向量样本200个,样本的均值 ,方差为 ;产生ω2类二维向量样本200个,样本的均值 ,方差为 ,将这400个样本作为训练集。 再产生相同参数的ω1类样本100个,ω2类样本100个,将这200个样本作为待分类样本。 (1)请画出两类训练样本的散点图。 (2)请编写k近邻算法matlab程序,对待分类样本进行分类,并计算分类错误率。改变K的数值,并记录K取1,3,5,7,9,11时的分类错误率Pe。
时间: 2023-10-05 21:09:06 浏览: 110
模式识别实验:近邻法分类器设计
以下是可能的代码实现:
```matlab
% 产生训练集
mean1 = [1 2];
var1 = [2 0.5; 0.5 1];
train1 = mvnrnd(mean1, var1, 200);
mean2 = [3 4];
var2 = [1 -0.5; -0.5 2];
train2 = mvnrnd(mean2, var2, 200);
train_labels = [ones(200, 1); 2 * ones(200, 1)];
% 绘制散点图
scatter(train1(:, 1), train1(:, 2), 'r');
hold on;
scatter(train2(:, 1), train2(:, 2), 'b');
xlabel('Feature 1');
ylabel('Feature 2');
legend('Class 1', 'Class 2');
hold off;
% 产生待分类样本
test1 = mvnrnd(mean1, var1, 100);
test2 = mvnrnd(mean2, var2, 100);
test = [test1; test2];
test_labels = [ones(100, 1); 2 * ones(100, 1)];
% 定义k近邻算法函数
euclidean_distance = @(x1, x2) sqrt(sum((x1 - x2) .^ 2));
knn = @(train, target, k) mode(train(knnsearch(train, target, 'K', k), end));
% 对待分类样本进行分类,并计算分类错误率
k_values = [1 3 5 7 9 11];
error_rates = zeros(size(k_values));
for i = 1:length(k_values)
k = k_values(i);
errors = 0;
for j = 1:size(test, 1)
if knn([train1; train2], [test(j, :), 0], k) ~= test_labels(j)
errors = errors + 1;
end
end
error_rates(i) = errors / size(test, 1);
end
disp('Classification Error Rates:');
disp(error_rates);
```
其中,训练集和待分类样本都使用了 `mvnrnd` 函数产生高斯分布的随机样本。绘制散点图使用了 `scatter` 函数,k近邻算法使用了 `knnsearch` 函数找到最近邻的点,并计算它们的类别众数作为预测的类别。在计算分类错误率时,将预测的类别与真实的类别进行比较,如果不一致则错误数加1。最后,将错误数除以样本数得到分类错误率。
阅读全文