##kmeans

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score

# 创建数据集
# X为样本特征, Y为样本簇类别, 共1000个样本, 每个样本2个特征, 共4个簇,
# 簇中⼼在[-1,-1], [0,0],[1,1], [2,2], 簇⽅差分别为[0.4, 0.2, 0.2, 0.2]
X, y = make_blobs(n_samples=1000, n_features=2, centers=[
    [-1, -1], [0, 0], [1, 1], [2, 2]], cluster_std=[0.4, 0.2, 0.2, 0.2], random_state=9)


# 原始数据图
# plt.scatter(X[:, 0], X[:, 1], marker="o")
# plt.show()
#  归为两类

    # kmeans训练,且可视化 聚类=2
y_pre = KMeans(n_clusters=2, random_state=9).fit_predict(X)
#
#     # 可视化展示
plt.scatter(X[:, 0], X[:, 1], c=y_pre)
plt.show()
#
#     # 用ch_scole查看最后效果
print(calinski_harabasz_score(X, y_pre))
#
# KMeans_2()
# 归为三类
# def KMeans_3():
#     # kmeans训练,且可视化 聚类=3
#     y_pre = KMeans(n_clusters=3, random_state=9).fit_predict(X)
#
#     # 可视化展示
#     plt.scatter(X[:, 0], X[:, 1], c=y_pre)
#     plt.show()
#
#     # 用ch_scole查看最后效果
#     print(calinski_harabasz_score(X, y_pre))
#
# KMeans_3()

# 归为四类
def KMeans_4():
    # kmeans训练,且可视化 聚类=4
    y_pre = KMeans(n_clusters=4, random_state=9).fit_predict(X)

    # 可视化展示
    plt.scatter(X[:, 0], X[:, 1], c=y_pre)
    plt.show()

    # 用ch_scole查看最后效果
    print(calinski_harabasz_score(X, y_pre))

### KMeans算法的代码实现 以下是KMeans算法在不同编程环境中的具体实现方式: #### Spark 实现 KMeans 算法 通过 MLlib 提供的功能,可以在 Apache Spark 中轻松实现 KMeans 聚类算法。以下是一个简单的 Scala 或 Python 的代码示例。 ```scala import org.apache.spark.ml.clustering.KMeans import org.apache.spark.sql.SparkSession val spark = SparkSession.builder.appName("KMeans Example").getOrCreate() // 加载数据集并转换为向量形式 val dataset = spark.read.format("libsvm").load("data/mllib/sample_kmeans_data.txt") // 创建 KMeans 模型实例 val kmeans = new KMeans().setK(2).setSeed(1L) // 训练模型 val model = kmeans.fit(dataset) // 输出聚类中心 println(s"Cluster Centers: ${model.clusterCenters.mkString("\n")}") ``` 上述代码展示了如何利用 Spark 的 `ml` 库来训练一个 KMeans 模型,并打印出最终得到的聚类中心[^1]。 --- #### R语言实现 KMeans 算法 R语言提供了内置函数 `kmeans()` 来快速构建 KMeans 模型。下面是完整的代码示例: ```r # 导入必要的库 library(datasets) # 使用 iris 数据集作为例子 data <- iris[, c("Sepal.Length", "Petal.Length")] # 设置随机种子以保证结果可重复 set.seed(123) # 执行 KMeans 聚类分析 (设置簇数为 3) result <- kmeans(data, centers = 3, nstart = 20) # 查看聚类结果 print(result$centers) # 显示各簇的质心坐标 plot(data, col = result$cluster, pch = 19) # 可视化分组情况 ``` 此代码片段说明了如何加载数据、运行 KMeans 并可视化结果[^2]。 --- #### Python 实现 KMeans 算法 Python 是一种非常流行的科学计算工具,在 SciPy 和 scikit-learn 库的支持下能够高效完成 KMeans 聚类任务。 ##### 基于 Scikit-Learn 的实现 ```python from sklearn.cluster import KMeans import numpy as np import matplotlib.pyplot as plt # 构造模拟数据 X = np.array([[1, 2], [1, 4], [1, 0], [10, 2], [10, 4], [10, 0]]) # 初始化 KMeans 对象 kmeans = KMeans(n_clusters=2, random_state=0) # 进行拟合操作 kmeans.fit(X) # 获取预测标签和质心位置 labels = kmeans.labels_ centroids = kmeans.cluster_centers_ # 绘制散点图展示结果 plt.scatter(X[:, 0], X[:, 1], c=labels, s=50, cmap='viridis') plt.scatter(centroids[:, 0], centroids[:, 1], c='red', marker='x', s=200, label="centroid") plt.legend() plt.show() ``` 这段脚本演示了怎样借助 scikit-learn 完成基本的数据预处理以及绘图工作[^3]。 --- #### 关键概念解释 KMeans 算法的核心在于反复调整每个簇内的成员分配直至收敛到局部最优解。它假设输入特征服从欧几里得空间分布,并试图最小化所有样本与其所属类别均值之间的平方误差之和[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值