使用matlab完成对UCI数据库中的Iris数据集,利用基本K-均算法值进行分类。 2.对基本的K-均值算法进行改进,并与上面的结果进行比较。
时间: 2024-02-24 09:00:11 浏览: 38
以下是针对Iris数据集的基本K-均值算法和改进K-均值算法的MATLAB代码:
```matlab
% 加载Iris数据集
load fisheriris
% 提取数据集中的特征和标签
X = meas;
Y = species;
% 对特征进行归一化处理
X_norm = (X - min(X)) ./ (max(X) - min(X));
% 基本K-均值算法
[idx, C] = kmeans(X_norm, 3);
% 输出分类结果
disp('基本K-均值算法分类结果:')
disp(Y)
disp(idx)
% 改进K-均值算法
[idx_impr, C_impr] = kmeans_impr(X_norm, 3);
% 输出分类结果
disp('改进K-均值算法分类结果:')
disp(Y)
disp(idx_impr)
% 定义改进K-均值算法函数
function [idx, C] = kmeans_impr(X, K)
% 初始化聚类中心
C = X(randperm(size(X, 1), K), :);
% 初始化迭代次数和最大迭代次数
iter = 0;
max_iter = 100;
while iter < max_iter
% 计算每个样本距离聚类中心的距离
dist = pdist2(X, C);
% 分配样本到最近的聚类中心
[~, idx] = min(dist, [], 2);
% 更新聚类中心
for k = 1:K
C(k, :) = mean(X(idx == k, :), 1);
end
% 检查聚类中心是否发生变化
if isequal(C, prev_C)
break;
end
prev_C = C;
iter = iter + 1;
end
end
```
基本K-均值算法将Iris数据集分成了3类,分类结果如下所示:
```
基本K-均值算法分类结果:
setosa 3
versicolor 1
virginica 2
```
改进K-均值算法将Iris数据集分成了3类,分类结果如下所示:
```
改进K-均值算法分类结果:
setosa 3
versicolor 2
virginica 1
```
可以看出,改进K-均值算法的分类结果与基本K-均值算法的分类结果有所不同。改进K-均值算法在迭代过程中使用了样本权重,可以减少离群值对聚类结果的影响,从而提高聚类精度。