用Kmeans算法求iris数据集的聚类及聚类精度的详细R语言代码
时间: 2023-12-03 22:45:19 浏览: 186
以下是用Kmeans算法求iris数据集的聚类及聚类精度的详细R语言代码:
```R
# 加载iris数据集
data(iris)
# 将数据集中的类别变量转换为数值变量
iris$Species <- as.numeric(iris$Species)
# 用Kmeans算法进行聚类,设定聚类数为3
set.seed(123)
kmeans_result <- kmeans(iris[,1:4], 3)
# 查看聚类结果
kmeans_result$cluster
# 将聚类结果与实际类别进行比较,计算聚类精度
table(kmeans_result$cluster, iris$Species)
accuracy <- sum(diag(table(kmeans_result$cluster, iris$Species))) / nrow(iris)
accuracy
```
其中,`set.seed(123)`用于设定随机数种子,保证每次运行结果一致;`iris[,1:4]`表示选取数据集中的前4列作为聚类的特征;`kmeans_result$cluster`表示聚类结果;`table(kmeans_result$cluster, iris$Species)`用于生成聚类结果与实际类别的交叉表,`diag()`提取交叉表对角线上的元素(即聚类正确的样本数),`sum()`求和后除以总样本数即可得到聚类精度。
相关问题
kmeans聚类算法matlab代码显示聚类数和轮廓系数
以下是kmeans聚类算法的MATLAB代码,其中包括显示聚类数和轮廓系数的部分:
```matlab
% 读取数据
load iris_dataset
X = meas;
% 设置不同的聚类数
k_values = 2:10;
num_k = length(k_values);
% 计算每个聚类数的轮廓系数
silhouette_values = zeros(num_k, 1);
for i = 1:num_k
k = k_values(i);
idx = kmeans(X, k);
silhouette_values(i) = mean(silhouette(X, idx));
end
% 显示轮廓系数随聚类数变化的趋势
figure;
plot(k_values, silhouette_values, '-o');
xlabel('Number of clusters');
ylabel('Silhouette value');
title('Silhouette values for different number of clusters');
% 选择最优的聚类数
[~, best_k_idx] = max(silhouette_values);
best_k = k_values(best_k_idx);
fprintf('The best number of clusters is %d.\n', best_k);
% 对数据进行最优聚类
idx = kmeans(X, best_k);
% 显示聚类结果
figure;
gscatter(X(:,1), X(:,2), idx);
xlabel('Sepal length');
ylabel('Sepal width');
title(sprintf('Clustering results with %d clusters', best_k));
```
在上面的代码中,我们首先读取了一个名为“iris_dataset”的数据集,它包含了鸢尾花的测量数据。然后,我们设置了不同的聚类数,并计算了每个聚类数的轮廓系数。接着,我们绘制了轮廓系数随聚类数变化的图表,并选择了轮廓系数最高的聚类数作为最优聚类数。最后,我们对数据进行了最优聚类,并显示了聚类结果。
注意:在使用kmeans聚类算法时,最优聚类数的选择是一个非常重要的问题,因此需要谨慎选择。除了轮廓系数之外,还可以使用其他指标来评估聚类效果。
使用kmeans对莺尾花数据进行聚类,对比聚类结果和原始分类的代码
好的,我理解了。以下是基于莺尾花数据集的代码示例,使用kmeans算法对数据进行聚类:
```python
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
# 载入数据集
iris = load_iris()
X = iris.data
# 聚类
kmeans = KMeans(n_clusters=3).fit(X)
y_pred = kmeans.predict(X)
# 对比聚类结果和原始分类
print('聚类结果:')
print(y_pred)
print('原始分类:')
print(iris.target)
```
可以看出,我们先载入了莺尾花数据集,并使用kmeans算法将数据分为3类,最后打印出聚类结果和原始分类。
这个实例是一个比较典型的聚类任务,可以方便地对聚类算法进行对比和评估。需要注意的是,使用kmeans算法时需要事先确定聚类的数量,否则可能会出现不理想的聚类结果。
阅读全文