机器学习实战5-KMeans聚类算法

文章目录

  • 概述
  • KMeans
  • KMeans参数&接口
    • n_clusters
    • 质心
    • inertia
    • 模型评估指标
      • 轮廓系数
      • Calinski-Harabaz Index
    • 重要参数init & random_state & n_init:初始质心怎么放好?
    • 重要参数max_iter & tol:让迭代停下来
    • 重要属性与重要接口

概述

聚类 VS 分类
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-08cI8jam-1691915535493)(https://img1.imgtp.com/2023/08/12/TLpVN5O2.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Puxawm50-1691915535494)(https://img1.imgtp.com/2023/08/12/HAO6YrvZ.png)]
有监督学习 VS 无监督学习
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BaTynru2-1691915535495)(https://img1.imgtp.com/2023/08/12/HKAWFoT5.png)]
sklearn中的聚类算法
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x7TFKj9Y-1691915535495)(https://img1.imgtp.com/2023/08/12/R9mPETa6.png)]

KMeans

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iECYm0e1-1691915535496)(https://img1.imgtp.com/2023/08/12/66yZOqS6.png)]

KMeans参数&接口

n_clusters

n_clusters就是KMeans中的K就是告诉模型,要让模型帮助我们分成几类,这个一般是我们必填的一个参数,sklearn中默认为8,通常我们希望这个数是小于8
生成数据

from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt
#自己创建数据集
X, y = make_blobs(n_samples=500,n_features=2,centers=4,random_state=1)
fig, ax1 = plt.subplots(1)
ax1.scatter(X[:, 0], X[:, 1]
           ,marker='o' #点的形状
           ,s=8 #点的大小
           )
plt.show()
#如果我们想要看见这个点的分布,怎么办?
color = ["red","pink","orange","gray"]
fig, ax1 = plt.subplots(1)
for i in range(4):
    ax1.scatter(X[y==i, 0], X[y==i, 1]
           ,marker='o' #点的形状
           ,s=8 #点的大小
           ,c=color[i]
           )
plt.show()
from sklearn.cluster import KMeans
cluster = KMeans(n_clusters=n_clusters, random_state=0).fit(X)
y_pred = cluster.labels_
y_pred

pre = cluster.fit_predict(X)
pre == y_pred

我们只先用一部分数据进行fit然后再predict得到的结果和我们用全部数据进行fit的结果是否相同

# 当数据量非常大的时候我们就需要用predict或者fit_predict()
cluster_smallsub = KMeans(n_clusters=n_clusters, random_state=0).fit(X[:200])
y_pred_ = cluster_smallsub.predict(X)
y_pred == y_pred_

当数据量比较小时结果可能不太好,当数据量比较大时效果比较好但是依然不会完全一样
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4q9gfb5-1691915535496)(https://img1.imgtp.com/2023/08/13/e8IE7cUI.png)]

质心

centroid = cluster.cluster_centers_
centroid

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u2DbJWZB-1691915535496)(https://img1.imgtp.com/2023/08/13/uWuTeNL3.png)]

inertia

inertia = cluster.inertia_
inertia

返回总距离的平方和

color = ["red", "pink", "orange", "gray"]
fig, ax1 = plt.subplots(1)
for i in range(n_clusters):
    ax1.scatter(X[y_pred == i, 0], X[y_pred == i, 1]
                ,marker='o' #点的形状
                ,s=8 #点的大小
                ,c=color[i] #点的颜色
               )
ax1.scatter(centroid[:,0], centroid[:,1]
            ,marker='x' #点的形状
            ,s=8 #点的大小
            ,c="black" #点的颜色
)
plt.show()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WZfJ1PAi-1691915535497)(https://img1.imgtp.com/2023/08/13/kfHq0GvO.png)]

n_clusters = 4
cluster_ = KMeans(n_clusters=n_clusters, random_state=0).fit(X)
inertia_ = cluster_.inertia_
inertia_

结果:908.3855684760614
可以看到我们inertia的结果变小了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1C8GW9bM-1691915535497)(https://img1.imgtp.com/2023/08/13/qqJeJcj0.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-npyn7iwW-1691915535497)(https://img1.imgtp.com/2023/08/13/8tp8YV7U.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ncw7uPbJ-1691915535498)(https://img1.imgtp.com/2023/08/13/5Ck4FssG.png)]
我们要inertia最小化的前提是在我们限制一个K的前提下最小化

模型评估指标

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9pO3Hhjk-1691915535498)(https://img1.imgtp.com/2023/08/13/My2zUF0F.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rCa8AE84-1691915535498)(https://img1.imgtp.com/2023/08/13/6C2vWwkH.png)]

轮廓系数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vkSjxKxe-1691915535499)(https://img1.imgtp.com/2023/08/13/gi5TFFRk.png)]
轮廓系数取值再在[-1, 1]越接近1越好

from sklearn.metrics import silhouette_score
from sklearn.metrics import silhouette_samples
silhouette_score(X, cluster_.labels_)
silhouette_samples(X, cluster_.labels_)

silhouette_score返回轮廓系数的均值
silhouette_samples返回每一个样本的轮廓系数

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zJCdwpL8-1691915535499)(https://img1.imgtp.com/2023/08/13/dwiHrQYQ.png)]

Calinski-Harabaz Index

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KSOXAeoi-1691915535499)(https://img1.imgtp.com/2023/08/13/gYDaXhS5.png)]
虽然Calinski-Harabaz Index没有界但是相较于轮廓系数而言,其计算快得多

from sklearn.metrics import calinski_harabaz_score
X
y_pred
calinski_harabaz_score(X, y_pred)

重要参数init & random_state & n_init:初始质心怎么放好?

8
9

X
y
plus = KMeans(n_clusters = 10).fit(X)
plus.n_iter_
random = KMeans(n_clusters = 10,init="random",random_state=420).fit(X)
random.n_iter_

重要参数max_iter & tol:让迭代停下来

10

random = KMeans(n_clusters = 10,init="random",max_iter=10,random_state=420).fit(X)
y_pred_max10 = random.labels_
silhouette_score(X,y_pred_max10)
random = KMeans(n_clusters = 10,init="random",max_iter=20,random_state=420).fit(X)
y_pred_max20 = random.labels_
silhouette_score(X,y_pred_max20)

一般当我们的数据量比较大的时候使用这两个参数可以让模型快一点停下来

重要属性与重要接口

11

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

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

相关文章

Linux之awk判断和循环

echo zhaoy 70 72 74 76 74 72 >> score.txt echo wangl 70 81 84 82 90 88 >> score.txt echo qiane 60 62 64 66 65 62 >> score.txt echo sunw 80 83 84 85 84 85 >> score.txt echo lixi 96 80 90 95 89 87 >> score.txt把下边的内容写入到s…

大语言模型(LLM)与 Jupyter 连接起来了

现在,大语言模型(LLM)与 Jupyter 连接起来了! 这主要归功于一个名叫 Jupyter AI 的项目,它是官方支持的 Project Jupyter 子项目。目前该项目已经完全开源,其连接的模型主要来自 AI21、Anthropic、AWS、Co…

优雅地处理RabbitMQ中的消息丢失

目录 一、异常处理 二、消息重试机制 三、错误日志记录 四、死信队列 五、监控与告警 优雅地处理RabbitMQ中的消息丢失对于构建可靠的消息系统至关重要。下面将介绍一些优雅处理消息丢失的方案,包括异常处理、重试机制、错误日志记录、死信队列和监控告警等。…

Go Gin 中使用 JWT

一、JWT JWT全称JSON Web Token是一种跨域认证解决方案,属于一个开放的标准,它规定了一种Token实现方式,目前多用于前后端分离项目和OAuth2.0业务场景下。 二、为什么要用在你的Gin中使用JWT 传统的Cookie-Sesson模式占用服务器内存, 拓展性…

QT 使用第三方库QtXlsx操作Excel表

1.简介 一直以来,都想学习一下C/C如何操作excel表,在网上调研了一下,觉得使用C/C去操作很麻烦,遂转向QT这边;QT有一个自带的类QAxObject,可以使用他去操作,但随着了解的深入,觉得他…

C++初阶之模板深化讲解

模板深化讲解 非类型模板模板的特化1.函数模板特化2.类模板特化 模板分离编译1.什么是分离编译2.模板的分离编译 模板总结 非类型模板 非类型模板(Non-Type Template)是 C 中的一种模板形式,它允许你在模板中传递除了类型以外的其他值&#x…

ESP 系列的产品 ULP 协处理器的应用

参考文档: 《ESP32-S2 技术参考手册》 中 “1. 超低功耗协处理器 (ULP)” 章节《ESP32-S3 技术参考手册》 中 “2 超低功耗协处理器 (ULPFSM, ULPRISCV)” 章节《ESP32-C6 技术参考手册》 中 “3 低功耗处理器” 章节ULP 协处理器编程ULP RISC-V 协处理器编程Progr…

Mac下⬇️Git如何下载/上传远程仓库

使用终端检查电脑是否安装Git git --version 通过此文章安装Git ➡️ ​​​​​​​传送门🌐 方式1⃣️使用终端操作 1.下载——克隆远程仓库到本地 git clone [远程地址] 例:git clone https://gitee.com/lcannal/movie.git​ 2.编…

Java课题笔记~ JSP开发模型

MVC 1.JSP演化历史 1. 早期只有servlet,只能使用response输出标签数据,非常麻烦 2. 后来有了jsp,简化了Servlet的开发,如果过度使用jsp,在jsp中即写大量的java代码,有写html表,造成难于维护&…

【校招VIP】前端JS语言考点之px rem等单位

考点介绍: rem vm等问题是前端面试里的高频题型。但是不少同学并不能很清楚的说明为什么在有px单位之后,还需要rem单位?往往会往不对的自适应方向回答。 作为基础性问题,只要回答不出来,面试就通过不了,需要…

compile_and_runtime_not_namespaced_r_class_jar\debug\R.jar: 另一个程序正在使用

问题情况: run App的时候,提示该文件被占用 想要clean Project,还是提示该文件被占用,这个文件和连带的文件夹都无法被删除。 方法1: AndroidStudio下方的terminal(没有这个窗口的话,从上面的…

【JAVA基础】- 同步非阻塞模式NIO详解

【JAVA基础】- 同步非阻塞模式NIO详解 文章目录 【JAVA基础】- 同步非阻塞模式NIO详解一、概述二、常用概念三、NIO的实现原理四、NIO代码实现客户端实现服务端实现 五、同步非阻塞NIO总结 一、概述 NIO(Non-Blocking IO)是同步非阻塞方式来处理IO数据。…

【Spring Boot】构建RESTful服务 — RESTful简介

RESTful简介 本节将从基础的概念开始介绍什么是RESTful、RESTful的特点、RESTful中的资源、HTTP Method、HTTP Status,还将介绍RESTful和SOAP到底有哪些区别。 1.什么是RESTful RESTful是目前流行的互联网软件服务架构设计风格。REST(Representationa…

html练习

html练习 工具代码运行结果 工具 HBuilder X 代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>图灵之家</title></head><body><h1>图灵之家</h1><br><br><h2>我的…

项目实战 — 博客系统② {项目构建}

目录 一、创建项目 二、添加数据库 三、设置配置文件相关信息 四、 添加前端页面 五、构建项目分层 六、编写基本类 一、创建项目 二、添加数据库 -- 创建数据库 drop database if exists cat_blog; create database cat_blog DEFAULT CHARACTER SET utf8mb4;-- 使用数…

微服务——ES实现自动补全

效果展示 在搜索框根据拼音首字母进行提示 拼音分词器 和IK中文分词器一样的用法&#xff0c;按照下面的顺序执行。 # 进入容器内部 docker exec -it elasticsearch /bin/bash# 在线下载并安装 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch…

Mr. Cappuccino的第60杯咖啡——Spring之BeanFactory和ApplicationContext

Spring之BeanFactory和ApplicationContext 类图BeanFactory概述功能项目结构项目代码运行结果总结 ApplicationContext概述功能MessageSource&#xff08;国际化的支持&#xff09;概述项目结构项目代码运行结果 ResourcePatternResolver&#xff08;匹配资源路径&#xff09;概…

一、初始 Spring MVC

文章目录 一、回顾 MVC 模式二、初始 Spring MVC2.1 Spring MVC 核心组件2.1.1 前端控制器&#xff08;DispatcherServlet&#xff09;2.1.2 处理器映射器&#xff08;HandlerMapping&#xff09;2.1.3 处理器适配器&#xff08;HandlerAdapter&#xff09;2.1.3 后端控制器&am…

前端性能优化之性能优化的指标和工具(chrome devtools、lighthouse、webpagetest)

文章目录 引言一、为什么要进行web性能优化二、RAIL测量模型1. 什么是RAIL2. 性能测量工具 三、性能测量工具的使用和性能指标以及优化目标1. Chrome DevTools1. 打开调试工具方式和配置2. network下的几个性能指标1. requests 请求总数2. transferred实际从服务器下载的数据量…

学会智慧工地有多爽?能省时间又高效?

当今社会&#xff0c;科技的迅速发展正在深刻地改变着各行各业&#xff0c;建筑领域也不例外。在这一背景下&#xff0c;"智慧工地"这一概念应运而生&#xff0c;它代表了将创新技术和数字化解决方案引入建筑工地&#xff0c;以提升效率、安全性和可持续性的愿景。 智…