机器学习第12天:聚类

文章目录

机器学习专栏

无监督学习介绍

聚类

K-Means

使用方法

实例演示

代码解析

绘制决策边界

本章总结


机器学习专栏

机器学习_Nowl的博客-CSDN博客

 

无监督学习介绍

某位著名计算机科学家有句话:“如果智能是蛋糕,无监督学习将是蛋糕本体,有监督学习是蛋糕上的糖霜,强化学习是蛋糕上的樱桃”

现在的人工智能大多数应用有监督学习,但无监督学习的世界也是广阔的,因为如今大部分的数据都是没有标签的

上一篇文章讲到的降维就是一种无监督学习技术,我们将在本章介绍聚类


聚类

聚类是指发现数据集中集群的共同点,在没有人为标注的情况下将数据集区分为指定数量的类别

K-Means

K-Means是一种简单的聚类算法。能快速,高效地对数据集进行聚类


使用方法

from sklearn.cluster import KMeansmodel = KMeans(n_clusters=3)
model.fit(data)

 这段代码导入了KMeans机器学习库,指定模型将数据划分为三类


实例演示

import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 生成一些随机数据作为示例
np.random.seed(42)
data = np.random.rand(100, 2)  # 100个数据点,每个点有两个特征# 指定要分成的簇数(可以根据实际情况调整)
num_clusters = 3# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=num_clusters)
kmeans.fit(data)# 获取每个数据点的所属簇标签
labels = kmeans.labels_# 获取每个簇的中心点
centroids = kmeans.cluster_centers_print(centroids)
# # 可视化结果
for i in range(num_clusters):cluster_points = data[labels == i]plt.scatter(cluster_points[:, 0], cluster_points[:, 1], label=f'Cluster {i + 1}')# 绘制簇中心点
plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s=200, color='red', label='Centroids')plt.scatter(centroids[0][0], centroids[0][1])plt.title('K-means Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend(loc='upper right')
plt.show()


代码解析

  1. 导入必要的库: 导入NumPy用于生成随机数据,导入KMeans类从scikit-learn中进行K-means聚类,导入matplotlib.pyplot用于可视化。

  2. 生成随机数据: 使用NumPy生成一个包含100个数据点的二维数组,每个数据点有两个特征。

  3. 指定簇的数量:num_clusters设置为希望的簇数,这里设置为3。

  4. 应用K-means算法: 创建KMeans对象,指定簇的数量,然后使用fit方法拟合数据。模型训练完成后,每个数据点将被分配到一个簇,并且簇中心点将被计算。

  5. 获取簇标签和中心点: 使用labels_属性获取每个数据点的簇标签,使用cluster_centers_属性获取每个簇的中心点。

  6. 可视化聚类结果: 使用循环遍历每个簇,绘制簇中的数据点。然后,使用scatter函数绘制簇中心点,并为图添加标题、轴标签和图例。

  7. 显示图形: 最后,使用show方法显示可视化结果


绘制决策边界

我们使用网格坐标和predict方法生成决策边界,然后使用contour函数在图上绘制边界。

主要代码

import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt# 生成一些随机数据作为示例
np.random.seed(42)
data = np.random.rand(100, 2)  # 100个数据点,每个点有两个特征# 指定要分成的簇数(可以根据实际情况调整)
num_clusters = 3# 使用KMeans算法进行聚类
kmeans = KMeans(n_clusters=num_clusters)
kmeans.fit(data)# 获取每个数据点的所属簇标签
labels = kmeans.labels_# 获取每个簇的中心点
centroids = kmeans.cluster_centers_# 可视化结果,包括决策边界
for i in range(num_clusters):cluster_points = data[labels == i]plt.scatter(cluster_points[:, 0], cluster_points[:, 1], label=f'Cluster {i + 1}')# 绘制簇中心点
plt.scatter(centroids[:, 0], centroids[:, 1], marker='X', s=200, color='red', label='Centroids')# 绘制决策边界
h = 0.02  # 步长
x_min, x_max = data[:, 0].min() - 1, data[:, 0].max() + 1
y_min, y_max = data[:, 1].min() - 1, data[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = kmeans.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)plt.contour(xx, yy, Z, colors='gray', linewidths=1, alpha=0.5)  # 绘制决策边界plt.title('K-means Clustering with Decision Boundaries')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()


本章总结

  • 无监督学习的意义
  • 聚类的定义
  • K-Means方法聚类
  • 绘制K-Means决策边界

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/207760.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】vector的介绍与使用

🧑‍🎓个人主页:简 料 🏆所属专栏:C 🏆个人社区:越努力越幸运社区 🏆简 介:简料简料,简单有料~在校大学生一枚,专注C/C/GO的干货分…

分享-Spss下载含spss25.spss26.spss27等版本

为了学习spss买的,分享安装程序给大家 SPSS 27是一款用于统计分析和数据挖掘的软件,以下是SPSS 27的功能介绍和配置建议: 功能介绍: 数据管理:SPSS 27可以对数据进行管理和清洗,包括数据输入、缺失值处理…

Python开发运维:Celery连接Redis

目录 一、理论 1.Celery 二、实验 1.Windows11安装Redis 2.Python3.8环境中配置Celery 三、问题 1.Celery命令报错 2.执行Celery命令报错 3.Win11启动Celery报ValueErro错误 一、理论 1.Celery (1) 概念 Celery是一个基于python开发的分布式系统,它是简单…

【三维几何学习】自制简单的网格可视化软件 — Mesh Visualization

自制简单的网格可视化软件 — Mesh Visualization 引言一、整体框架1.1 三角形网格1.2 界面管理1.3 VTK可视化界面 二、核心源码2.1 三角形网格:TriMesh类2.2 界面Widget_Mesh_Manager2.3 VTK可视化2.4 main 引言 使用PyQt自制简单的网格可视化软件 - 视频展示 本是…

深信服技术认证“SCSA-S”划重点:信息收集

为帮助大家更加系统化地学习网络安全知识,以及更高效地通过深信服安全服务认证工程师考核,深信服特别推出“SCSA-S认证备考秘笈”共十期内容,“考试重点”内容框架,帮助大家快速get重点知识~ 划重点来啦 深信服安全服务认证工程师…

基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码

基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于材料生成算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于材料生成优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神…

【Java 进阶篇】从Java对象到JSON:Jackson的魔法之旅

在现代的软件开发中,处理数据的能力是至关重要的。而当我们谈及数据格式时,JSON(JavaScript Object Notation)通常是首选。为了在Java中轻松地将对象转换为JSON,我们需要一种强大而灵活的工具。这时,Jackso…

蓝桥杯物联网_STM32L071_2_继电器控制

CubeMX配置: Function.c及Function.h: #include "Function.h" #include "gpio.h" void Function_LD5_ON(void){HAL_GPIO_WritePin(LD5_GPIO_Port, LD5_Pin, GPIO_PIN_RESET); }void Function_LD5_OFF(void){HAL_GPIO_WritePin(LD5_…

redis五种基本数据类型

redis存储任何类型的数据都是以key-value形式保存,并且所有的key都是字符串,所以讨论基础数据结构都是基于value的数据类型 常见的5种数据类型是:String、List、Set、Zset、Hash 一) 字符串(String) String是redis最基本的类型,v…

3d标签云实现过程(tagcloud.js)同步原生和 vue

写在前面 本来是没有准备写这个知识点,但是下载这个 js 的时候发现很多都是要钱或者是积分的,我就不明白了一个开源了这么久的 js 怎么还有人拿来挣钱的,同时还有一些只有原生 html 的例子,但是现在都是 框架主导的一些项目&#…

【代码随想录】算法训练计划30

【代码随想录】算法训练计划30 1、51. N 皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,…

为UE和Unity开发者准备的Godot指南

为UE和Unity开发者准备的Godot指南 ——两位大哥打架,请带上我 这两天游戏行业又开始热闹了,昨天两条信息直接刷爆朋友圈,最大的两家游戏引擎公司怼起来了。 《为Unity开发者准备的虚幻引擎指南》: 为Unity开发者准备的虚幻引擎指…