当前位置: 首页 > news >正文

大数据-214 数据挖掘 机器学习理论 - KMeans Python 实现 算法验证 sklearn n_clusters labels

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (已更完)
  • Kafka(已更完)
  • Spark(已更完)
  • Flink(已更完)
  • ClickHouse(已更完)
  • Kudu(已更完)
  • Druid(已更完)
  • Kylin(已更完)
  • Elasticsearch(已更完)
  • DataX(已更完)
  • Tez(已更完)
  • 数据挖掘(正在更新…)

章节内容

上节我们完成了如下的内容:

  • KMeans Python 实现
  • 距离计算函数
  • 质心函数
  • 聚类函数

在这里插入图片描述

算法验证

函数编写完成后,先以 testSet 数据集测试模型运行效果(为了可以直观看出聚类效果,此处采用一个二维数据集进行验证)。testSet 数据集是一个二维数据集,每个观测值都只有两个特征,且数据之间采用空格进行分隔,因此可以使用 pd.read_table() 函数进行读取。

testSet = pd.read_table('testSet.txt', header=None)
testSet.head()
testSet.shape

执行结果如下图是:
在这里插入图片描述
然后利用二维平面图观察其分布情况:

plt.scatter(testSet.iloc[:,0], testSet.iloc[:,1]);

执行结果如下图所示:
在这里插入图片描述
可以大概看出数据大概分布在空间的四个角上,后续我们对此进行验证。然后利用我们刚才编写的 K-Means 算法对其进行聚类,在执行算法之前需要添加一列虚拟标签列(算法是从倒数第二列开始计算特征值,因此这里需要人为增加多一列到最后)

label = pd.DataFrame(np.zeros(testSet.shape[0]).reshape(-1, 1))
test_set = pd.concat([testSet, label], axis=1, ignore_index = True)
test_set.head()

执行结果如下图所示:
在这里插入图片描述
带入算法进行计算,根据二维平面坐标点的分布特征,我们可以考虑设置四个质心,即将其分为四个簇,并简单的查看运算结果:

test_cent, test_cluster = kMeans(test_set, 4)
test_cent
test_cluster.head()

执行结果如下图所示:
在这里插入图片描述
将分类结果进行可视化展示,使用 scatter 函数绘制不同分类点不同颜色的散点图,同时将质心也放入同一张图中进行观察:

import matplotlib.pyplot as plt# 绘制聚类点
plt.scatter(test_cluster.iloc[:, 0], test_cluster.iloc[:, 1], c=test_cluster.iloc[:, -1], cmap='viridis')# 绘制聚类中心
plt.scatter(test_cent[:, 0], test_cent[:, 1], color='red', marker='x', s=100)# 设置图形的标题和轴标签
plt.title('Cluster Plot with Centroids')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')# 显示图形
plt.show()

执行结果如下图所示:
在这里插入图片描述
生成的图片如下所示:
在这里插入图片描述

sklearn实现 K-Means

from sklearn.cluster import KMeans# KMeans 初始化示例
kmeans = KMeans(n_clusters=8,               # 聚类数量init='k-means++',            # 初始化质心的方法n_init=10,                   # KMeans 算法重新运行的次数(初始质心选择不同)max_iter=300,                # 最大迭代次数tol=0.0001,                  # 容忍度,控制收敛的阈值verbose=0,                   # 控制输出日志的详细程度random_state=None,           # 随机种子控制聚类的随机性copy_x=True,                 # 是否复制 X 数据algorithm='auto'             # 使用的 KMeans 算法,'auto' 已弃用,建议使用 'lloyd'
)# 执行示例数据集上的 KMeans
# 例如,假设你有一个数据集 X:
# kmeans.fit(X)

n_clusters

n_clusters 是 K-Means 中的 k ,表示着我们告诉模型我们要分几类,这是 K-Means当中唯一一个必填的参数,默认为 8 类,但通常我们聚类结果是一个小于 8 的结果,通常,在开始聚类的之前,我们并不知道 n_clusters 究竟是多少,因此我们要对它进行探索。
当我们拿到一个数据集,如果可能的话,我们希望能够通过绘图先观察一下这个数据集的数据分布,以此来为我们聚类时输入的 n_clusters 做一个参考。

首先,我们来自己创建一个数据集,这样的数据集是我们自己创建的,所以是有标签的。

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs# 创建数据集
X, y = make_blobs(n_samples=500, n_features=2, centers=4, random_state=1)# 可视化数据集
plt.figure(figsize=(6, 6))
plt.scatter(X[:, 0], X[:, 1], marker='o', s=8)  # s=8 表示点的大小
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Scatter plot of generated blobs')
plt.show()

对应结果如下图所示:
在这里插入图片描述
生成的图片如下所示:
在这里插入图片描述
查看分布的情况:

import matplotlib.pyplot as plt# 查看数据分布
color = ["red", "pink"]
for i in range(2):  # 由于 y 只有 0 和 1 两类,因此只需要两个循环plt.scatter(X[y == i, 0], X[y == i, 1], marker='o',  # 点的形状s=8,         # 点的大小c=color[i])  # 颜色plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Scatter Plot of Two Classes')
plt.show()

执行结果如下图所示:
在这里插入图片描述

对应的图片如下所示:
在这里插入图片描述
基于这个分布,我们来使用 K-Means 进行聚类。
首先,我们要猜测一下,这个数据中有几个簇?

cluster.labels

重要属性 labels_,查看聚好的类别,每个样本所对应的类

from sklearn.cluster import KMeans
from sklearn.datasets import load_breast_cancer
import numpy as np# 加载数据集
data = load_breast_cancer()
X = data.data# 定义聚类的簇数
n_clusters = 3# 使用KMeans进行聚类
cluster = KMeans(n_clusters=n_clusters, random_state=0).fit(X)# 获取聚类结果的标签
y_pred = cluster.labels_# 输出聚类的标签
print(y_pred)
  • K-Means 因此并不需要建立模型或者预测结果,因此我们只需要 fit 就能够得到聚类结果了
  • K-Means 也有接口 predict 和 fit_predict
  • predict 表示学习数据 X 并对 X 的类进行预测(对分类器 fit 之后,再预测)
  • fit_predict 不需要分类器.fit()之后都可以预测
  • 对于全数据而言,分类器 fit().predict 的结果 = 分类器.fit_predict(X) = cluster.labels

执行结果如下图所示:
在这里插入图片描述
我们什么时候需要 predict?当数据量太大的时候,当我们数据量非常大,我们可以使用部分数据来帮助我们确认质心。
剩下的数据的聚类结果,使用 predict 来调用:

cluster_smallsub = KMeans(n_clusters=3, random_state=0).fit(X[:200])
sample_pred = cluster_smallsub.predict(X)
y_pred == sample_pred

执行结果如下图所示:
在这里插入图片描述
但这样的结果,肯定与直接 fit 全部数据会不一致,有时候,当我们不要求那么精确,或者我们的数据量实在太大,那我们可以使用这样的做法。


http://www.mrgr.cn/news/68294.html

相关文章:

  • jmeter常用配置元件介绍总结之取样器
  • 基于java+SpringBoot+Vue的宠物咖啡馆平台设计与实现
  • MySQL表转移数据的三种方式
  • 什么是干部民主测评系统?如何选择合适的系统?
  • 国标GB28181视频平台EasyGBS国标GB28181公网直播的功能及实现过程
  • 测试分层:减少对全链路回归依赖的探索!
  • 【H2O2|全栈】阶段常见面试题(二)【万字大长篇】
  • Arc 浏览器快捷键一网打尽
  • 面试官:什么是雪花算法?啥原理?
  • Windows系统安装部署C++基础开发环境
  • ubuntu内核切换network unclaimed 网卡丢失
  • 河南建筑装饰工程设计专项资质办理成功案例
  • Find My电子秒表|苹果Find My技术与秒表结合,智能防丢,全球定位
  • Kaggle生物信息学挑战:酶稳定性预测大赛
  • 免费数据集网站
  • 快速上手 muduo
  • 05-如何统一管理纷繁杂乱的数据指标?
  • Bsin-kb-agent:企业级AI知识库
  • 九泰智库 | 医械周刊- Vol.68
  • 第3篇 滑动开关控制LED__ARM汇编语言工程<一>
  • Springboot 整合 Java DL4J 打造自然语言处理之语音识别系统
  • aspose如何获取PPT放映页“切换”的“持续时间”值
  • 黑龙江二级等保与CDN的深度关联:加速安全,护航数字化转型
  • 单位正交矢量的参数化,用于特征矢量对厄尔米特矩阵对角化使用
  • 国产化浪潮下,高科技企业如何选择合适的国产ftp软件方案?
  • 系统架构设计师论文:模型驱动架构设计方法及其应用