用matlab仿真产生两类二维样本数据,每类产生50个样本作为训练样本;每类产生100个样本作为考试样本;按最k近邻法(k=9)用训练样本对考试样本分类,计算平均错误率;
时间: 2024-02-22 13:58:28 浏览: 81
以下是一个简单的 MATLAB 代码,用于生成两类二维样本数据,并按照最近邻法进行分类,并计算平均错误率:
```matlab
% 生成两类二维样本数据
class1 = [randn(50,2)+ones(50,2); randn(50,2)-ones(50,2)];
class2 = [randn(50,2)-ones(50,2); randn(50,2)+ones(50,2)];
% 将训练样本和测试样本分别存储在矩阵 X_train 和 X_test 中
X_train = [class1(1:50,:); class2(1:50,:)];
X_test = [class1(51:100,:); class2(51:100,:)];
% 将训练样本和测试样本的标签存储在向量 y_train 和 y_test 中
y_train = [ones(50,1); -ones(50,1)];
y_test = [ones(50,1); -ones(50,1)];
% 计算测试集分类错误率
k = 9; % k-近邻法中的 k 值
error_count = 0; % 分类错误的样本数
for i = 1:size(X_test,1)
% 计算测试样本与所有训练样本之间的距离
dist = sum((X_train - repmat(X_test(i,:),size(X_train,1),1)).^2, 2);
% 找到离测试样本最近的 k 个训练样本
[~, idx] = sort(dist);
k_idx = idx(1:k);
% 根据最近的 k 个训练样本的标签进行分类
prediction = sign(sum(y_train(k_idx)));
% 如果分类错误,则错误计数加一
if prediction ~= y_test(i)
error_count = error_count + 1;
end
end
% 计算测试集分类错误率
error_rate = error_count / size(X_test,1);
fprintf('k = %d, 错误率 = %.2f%%\n', k, error_rate*100);
```
注意,由于样本数据是随机生成的,每次运行代码都会得到不同的结果。因此,为了得到更准确的结果,建议多次运行代码并取平均值。
阅读全文