机器学习经典无监督算法——聚类K-Means算法

目录

算法原理

算法步骤

算法API

算法导入

API参数理解

算法实现


算法原理

Kmeans 算法是一种无监督的聚类算法,目的是将数据集中的样本划分到 K 个不同的簇中。

聚类:将数据集中相似的数据点归为一组或一个簇的过程。

数据集:一组相关的数据的集合。

样本:数据集中的单个数据点。

:通过聚类算法划分出来的具有相似特征的数据点的集合。

img

img

算法步骤

  1. 初始化:随机选择 K 个数据点作为初始的簇中心(也称为质心)。

  2. 分配数据点:对于数据集中的每个数据点,计算它到 K 个质心的距离,将其分配到距离最近的质心所代表的簇。

  3. 更新质心:对于每个簇,重新计算质心,即该簇中所有数据点的均值。

  4. 重复步骤 2 和 3,直到质心不再发生明显变化或者达到预定的迭代次数。

img

算法API

算法导入
from sklearn.cluster import KMeans
API参数理解

class sklearn.cluster.KMeans(n_clusters=8, init=’k-means++’, n_init=10, max_iter=300, tol=0.0001, precompute_distances=’auto’, verbose=0, random_state=None, copy_x=True, n_jobs=None, algorithm=’auto’)[[source]]

n_clusters:类中心的个数,就是要聚成几类。【默认是8个】

init:参初始化的方法,默认为k-means++

(1)k-means++: 用一种特殊的方法选定初始质心从而能加速迭代过程的收敛.

(2) random: 随机从训练数据中选取初始质心。

(3) 如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心。

n_init: 整形,缺省值=10,用不同的质心初始化值运行算法的次数,最终解是在inertia意义下选出的最优结果。

max_iter:int,default=300,执行一次k-means算法所进行的最大迭代数。

Tol:与inertia结合来确定收敛条件。

precompute_distances:三个可选值,‘auto’,True 或者 False。

预计算距离,计算速度更快但占用更多内存。

(1)‘auto’:如果样本数乘以聚类数大于12million 的话则不预计算距离。

(2)True:总是预先计算距离。

(3)False:永远不预先计算距离。

verbose:整形,默认值=0

random_state :随机状态

copy_x:布尔型,默认值=True

当我们precomputing distances时,将数据中心化会得到更准确的结果。如果把此参数值设为True,则原始数据不会被改变。如果是False,则会直接在原始数据上做修改并在函数返回值时将其还原。但是在计算过程中由于有对数据均值的加减运算,所以数据返回后,原始数据和计算前可能会有细小差别。

algorithm:'auto','full' or 'elkan'.默认为'auto' full:采用经典的EM算法 elkan:通过使用三角不等式从而更有效,但不支持稀疏数据 auto:数据稀疏选择full模式,数据稠密选择elkan模式

【属性】

cluster_centers_: 一个n-clusters*n_features的矩阵,表示聚类中心的坐标

Labels_:每个点的分类标签。

inertia_:float形每个点到其簇的质心的距离之和。

n_iter_ : int迭代次数。

算法实现

下面是一个啤酒数据集data.txt为例子,请用K-Means算法根据不同啤酒的不同指标对啤酒进行聚类

思路:

  • 从文件中读取数据,提取特征,然后使用 KMeans 算法对不同的 k 值(从 2 到 9)进行聚类,并计算每个 k 值下的轮廓系数得分,存储在 scores 列表中。

  • 绘制出 k 值和轮廓系数得分的关系图,以直观地观察不同 k 值下的聚类效果。

  • 接着,使用 max(scores) 找到 scores 列表中的最大值,scores.index(max(scores)) 找到该最大值在 scores 列表中的索引。由于 k 从 2 开始,而列表索引从 0 开始,所以需要将索引加 2 得到最优的 k 值,存储在 best_k_index 中。

  • 最后,使用 KMeans 算法进行聚类,将 n_clusters 参数设置为 best_k_index 进行聚类,并将聚类结果存储在 beer 数据集的 cluster 列中。然后计算聚类结果的轮廓系数得分,以评估聚类的质量。

import pandas as pd
from sklearn.cluster import KMeans
from sklearn import metrics
import matplotlib.pyplot as plt
​
# 读取文本文件 data.txt,文件中数据使用空格分隔,编码为 utf8,使用 python 引擎解析
beer = pd.read_table('data.txt', sep=' ', encoding='utf8', engine='python')
# 选取 beer 数据集中的 "calories","sodium","alcohol","cost" 列作为特征
X = beer[["calories", "sodium", "alcohol", "cost"]]
# 打印 beer 数据集的前几行
print(beer.head())
​
# 根据分成不同的簇,自动计算轮廓系数得分
scores = []
# 尝试不同的簇数量,从 2 到 9
for k in range(2, 10):
    # 使用 KMeans 算法进行聚类,聚类簇的数量为 k
    labels = KMeans(n_clusters=k).fit(X).labels_
    # 计算轮廓系数得分
    score = metrics.silhouette_score(X, labels)
    # 将得分添加到 scores 列表中
    scores.append(score)
print(scores)
​
# 绘制得分结果
# 绘制簇数量从 2 到 9 与对应的轮廓系数得分的折线图
plt.plot(list(range(2, 10)), scores)
# 设置 x 轴标签
plt.xlabel('Number of Clusters Initialized')
# 设置 y 轴标签
plt.ylabel('Sihouette Score')
# 显示图形
plt.show()
​
# 找到最优的簇数量
best_k_index = scores.index(max(scores)) + 2
print(f"最优的簇数量: {best_k_index}")
​
# 使用 KMeans 算法进行聚类,聚类簇的数量为最优的簇数量
km = KMeans(n_clusters=best_k_index).fit(X)
# 将聚类结果存储在 beer 数据集的 'cluster' 列中
beer['cluster'] = km.labels_
# 对聚类结果进行评分
# 计算轮廓系数得分,使用 beer['cluster'] 来访问 cluster 列的数据
score = metrics.silhouette_score(X, beer['cluster'])
print(f'最优的簇数量得分:{score}')

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Android系统定制APP开发_如何对应用进行系统签名

前言 当项目开发需要使用系统级别权限或frame层某些api时,普通应用是无法使用的,需要在AndroidManifest中配置sharedUserId: AndroidManifest.xml中的android:sharedUserId“android.uid.system”,代表的意思是和系统相同的uid&a…

【机器学习实战入门】使用OpenCV和Keras的驾驶员疲劳检测系统

嗜睡驾驶者警报系统 防止司机疲劳驾驶警报系统 中级 Python 项目 - 司机疲劳检测系统 疲劳检测是一种安全技术,能够预防因司机在驾驶过程中入睡而造成的事故。 本中级 Python 项目的目标是建立一个疲劳检测系统,该系统将检测到一个人的眼睛闭合了一段时…

5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署

想象一下,只需简单几步操作,就能生成逼真的语音效果,无论是为客户服务还是为游戏角色配音,都能轻松实现。GPT-Sovits 模型,其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何…

自动化办公|xlwings简介

xlwings 是一个开源的 Python 库,旨在实现 Python 与 Microsoft Excel 的无缝集成。它允许用户使用 Python 脚本自动化 Excel 操作,读取和写入数据,执行宏,甚至调用 VBA 脚本。这使得数据分析、报告生成和其他与 Excel 相关的任务…

JTAG调试器的使用方法

概述: JTAG(联合测试行动组)是基于IEEE 1149.1标准的专用硬件接口。该接口旨在将复杂的芯片和设备连接到标准测试和调试硬件。目前JTAG主要用于: Output control of microcircuits; Testing of printed circuit boards; Flashing of microchips with memory; Chip softwa…

第三次作业:源码编译安装httpd 2.4,提供系统服务管理脚本并测试(两种方法实现)

准备工作 下载httpd软件包进行源码安装 [rootrocky ~]# wget https://archive.apache.org/dist/httpd/httpd-2.4.46.tar.gz 由于进行源码安装,需要对安装对应的编译工具 [rootopen2 ~]# yum install gcc gcc-c make -y 解压文件到指定的目录/usr/local/src下 [root…

Web自动化之验证码识别彻底解决方案

验证码识别解决方案 对于web应用程序来讲,处于安全性考虑,在登录的时候,都会设置验证码,验证码的类型种类繁多,有图片中辨别数字字母的,有点击图片中指定的文字的,也有算术计算结果的&#xff…

第34天:Web开发-PHP应用鉴别修复AI算法流量检测PHP.INI通用过滤内置函数

#知识点 1、安全开发-原生PHP-PHP.INI安全 2、安全开发-原生PHP-全局文件&单函数 3、安全开发-原生PHP-流量检测&AI算法 一、通用-PHP.INI设置 参考: https://www.yisu.com/ask/28100386.html https://blog.csdn.net/u014265398/article/details/109700309 …

C++多态的认识与理解

多态的定义 多态其实就是同一操作在不同的对象上可以有不同的实现方式。 多态的类型 多态分为静态多态和动态多态两种,而静态多态其实我们之前就了解过,今天主要是讲解一下动态多态。 静态多态(编译时多态):静态多态其实就是在…

Ubuntu安装搜狗输入法

Ubuntu安装搜狗输入法 官网完整安装步骤调整默认输入法 官网 搜狗输入法 - 官网:https://shurufa.sogou.com/ 搜狗输入法Linux版 - 首页:https://shurufa.sogou.com/linux 搜狗输入法Linux版 - 安装指南:https://shurufa.sogou.com/linux/gu…

ElasticSearch下

DSL查询 叶子查询:在特定字段里查询特定值,属于简单查询,很少单独使用复合查询:以逻辑方式组合多个叶子查询或更改叶子查询的行为方式 在查询后还可以对查询结果做处理: 排序:按照1个或多个字段做排序分页…

【个人开发】nginx域名映射及ssl证书配置踩坑记录

1. 背景 买了个域名,申请了ssl证书,买都买了,不得部署点东西。于是开始一堆踩坑之旅。 2. 踩过的坑 2.1 报错1:域名访问 Invalid Host header 项目是一个简单的vue项目,启动方式如下 npm run serve但浏览器出现报错&#xff…

Go-Zero整合Goose实现MySQL数据库版本管理

推荐阅读 【系列好文】go-zero从入门到精通(看了就会) 教程地址:https://blog.csdn.net/u011019141/article/details/139619172 Go-Zero整合Goose实现MySQL数据库版本管理的教程 在开发中,数据库迁移和版本管理是必不可少的工作。…

每日一题洛谷P1427 小鱼的数字游戏c++

#include<iostream> using namespace std; int main() {long long s[100] { 0 };int i 0;while (1) {cin >> s[i];if (s[i]0) {break;}i;}for (i; i > 0;i--) {if(s[i]!0)cout << s[i] << " ";}return 0; }

力扣 子集

回溯基础&#xff0c;一题多解&#xff0c;不同的回朔过程。 题目 求子集中&#xff0c;数组的每种元素有选与不选两种状态。因此在使用dfs与回溯时把每一个元素分别进行选与不选的情况考虑即可。可以先用dfs跳过当前元素即不选然后一直深层挖下去&#xff0c;直到挖到最深了即…

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下&#xff1a; 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径&#xff0c;否则可能有类似错误 源码是基于Linux2.3内核编译&#xff0c;我当前是6.8.0-51&#xff0c;数据结构有升级&#xff0c;需要调…

LSA更新、撤销

LSA的新旧判断&#xff1a; 1.seq&#xff0c;值越大越优先 2.chksum&#xff0c;值越大越优先 3.age&#xff0c;本地的LSA age和收到的LSA age作比较 如果差值<900s&#xff0c;认为age一致&#xff0c;保留本地的&#xff1a;我本地有一条LSA是100 你给的是400 差值小于…

运行fastGPT 第四步 配置ONE API 添加模型

上次已经装好了所有的依赖和程序。 下面在网页中配置One API &#xff0c;这个是大模型的接口。配置好了之后&#xff0c;就可以配置fastGPT了。 打开 OneAPI 页面 添加模型 这里要添加具体的付费模型的API接口填进来。 可以通过ip:3001访问OneAPI后台&#xff0c;**默认账号…

强化学习-蒙特卡洛方法

强化学习-数学理论 强化学习-基本概念强化学习-贝尔曼公式强化学习-贝尔曼最优公式强化学习-值迭代与策略迭代强化学习-蒙特卡洛方法 文章目录 强化学习-数学理论一、蒙特卡洛方法理论(Monte Carlo, MC)二、MC Basic2.1 算法拆解2.2 MC Basic算法 三、MC Exploring Starts3.1 …

【专题一 递归】21. 合并两个有序链表

1.题目解析 2.讲解算法原理 解法:递归-> 重复的子问题 重复子问题 ->函数头的设计 合并两个有序链表--->Node dfs(l1&#xff0c;l2) 只关心某一个子问题在做什么事情 ->函数体的设计 比大小l1→next dfs( l1.next, l2)return l1 递归的出口 if(l1null)return l2…