机器学习第12天:聚类

news/2024/5/20 8:46:43 标签: 机器学习, 人工智能, 聚类

文章目录

机器学习专栏

无监督学习介绍

聚类

K-Means

使用方法

实例演示

代码解析

绘制决策边界

本章总结


机器学习专栏

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

 

无监督学习介绍

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

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

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


聚类

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

K-Means

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


使用方法

from sklearn.cluster import KMeans


model = 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.niftyadmin.cn/n/5205138.html

相关文章

leetcode:520. 检测大写字母

一、题目: 链接:520. 检测大写字母 - 力扣(LeetCode) 函数原型:bool detectCapitalUse(char* word) 二、思路: 本题较为简单,分为三种情况: 1.首字母大写,其余小写 2.首字…

【TypeScrpt算法】算法的复杂度分析

算法的复杂度分析 什么是算法复杂度? 不同的算法,其实效率是不一样的 让我举一个案例来比较两种不同的算法在查找数组中给定元素的时间复杂度 [1,2,3,4,5,6,7,...9999,n] 顺序查找 这种方法从头到尾遍历整个数组,依次比较每个元素和给定元…

三重积分@柱坐标和球坐标方法

文章目录 abstract三重积分的一般式 柱坐标坐标面柱坐标和空间直角坐标间的坐标关系三重积分的柱面坐标计算例 球面坐标坐标面坐标转换公式三重积分的球面坐标计算包含原点的空间闭区域体积计算例 abstract 在直角坐标系上讨论过位置表示方法后,我们在再讨论柱坐标和球坐标后两…

Hutool HttpRequest 首次请求正常 第二次被系统拦截

Hutool HttpRequest 首次请求正常 第二次被系统拦截 功能描述异常现象错误代码 异常排查问题跟踪问题总结处理方案最终修改后的代码 功能描述 需要请求第三方某个接口,获取接口中的数据。 异常现象 使用main 方法 通过Hutool 工具类发出请求,获取数据…

028 - STM32学习笔记 - ADC结构体学习(二)

028 - STM32学习笔记 - 结构体学习(二) 上节对ADC基础知识进行了学习,这节在了解一下ADC相关的结构体。 一、ADC初始化结构体 在标准库函数中基本上对于外设都有一个初始化结构体xx_InitTypeDef(其中xx为外设名,例如…

《安富莱嵌入式周报》第327期:Cortex-A7所有外设单片机玩法LL/HAL库全面上线,分享三款GUI, PX5 RTOS推出网络协议栈,小米Vela开源

周报汇总地址:嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 1、2023 Hackaday大赛胸牌开源 Vectorscope-main.zip (66.83MB) GitHub - Hack-a-Day/Vectorscope: Vectorscope badg…

英语种的8个英语时态、20个疑问代词、8组人称代词、10种单词词性、8种句子成分、8种句子结构、16种时态公式、10大词性

英语种的8个英语时态、20个疑问代词、8组人称代词、10种单词词性、8种句子成分、8种句子结构、16种时态公式、10大词性 8个英语时态 8个英语时态 一般现在时do/doesam/is/are一般将来时will/dowill/shall be done一般过去时didwas/were done现在进行时be doingam/is/are being…

Django的Form使用

Django的Form是一个用于处理表单数据的类。它允许你定义表单字段以及验证规则,并能够在接收用户提交的数据时进行处理。以下是关于Django Form的一些基本概念和使用方法: 创建一个简单的Form类 首先,你需要导入forms模块,然后创建…