机器学习实战5-KMeans聚类算法
概述
聚类 VS 分类


有监督学习 VS 无监督学习

sklearn中的聚类算法

KMeans

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_
当数据量比较小时结果可能不太好,当数据量比较大时效果比较好但是依然不会完全一样

质心
centroid = cluster.cluster_centers_
centroid

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()

n_clusters = 4
cluster_ = KMeans(n_clusters=n_clusters, random_state=0).fit(X)
inertia_ = cluster_.inertia_
inertia_
结果:908.3855684760614
可以看到我们inertia的结果变小了



我们要inertia最小化的前提是在我们限制一个K的前提下最小化
模型评估指标


轮廓系数

轮廓系数取值再在[-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返回每一个样本的轮廓系数

Calinski-Harabaz Index

虽然Calinski-Harabaz Index没有界但是相较于轮廓系数而言,其计算快得多
from sklearn.metrics import calinski_harabaz_score
X
y_pred
calinski_harabaz_score(X, y_pred)
重要参数init & random_state & n_init:初始质心怎么放好?


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:让迭代停下来

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)
一般当我们的数据量比较大的时候使用这两个参数可以让模型快一点停下来
重要属性与重要接口

机器学习实战5-KMeans聚类算法的更多相关文章
- 机器学习实战---K均值聚类算法
一:一般K均值聚类算法实现 (一)导入数据 import numpy as np import matplotlib.pyplot as plt def loadDataSet(filename): ...
- 机器学习六--K-means聚类算法
机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...
- 机器学习——详解经典聚类算法Kmeans
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第12篇文章,我们一起来看下Kmeans聚类算法. 在上一篇文章当中我们讨论了KNN算法,KNN算法非常形象,通过距离公 ...
- 机器学习实战之K-Means算法
一,引言 先说个K-means算法很高大上的用处,来开始新的算法学习.我们都知道每一届的美国总统大选,那叫一个竞争激烈.可以说,谁拿到了各个州尽可能多的选票,谁选举获胜的几率就会非常大.有人会说,这跟 ...
- 【转】机器学习实战之K-Means算法
一,引言 先说个K-means算法很高大上的用处,来开始新的算法学习.我们都知道每一届的美国总统大选,那叫一个竞争激烈.可以说,谁拿到了各个州尽可能多的选票,谁选举获胜的几率就会非常大.有人会说,这跟 ...
- 转载: scikit-learn学习之K-means聚类算法与 Mini Batch K-Means算法
版权声明:<—— 本文为作者呕心沥血打造,若要转载,请注明出处@http://blog.csdn.net/gamer_gyt <—— 目录(?)[+] ================== ...
- 一步步教你轻松学K-means聚类算法
一步步教你轻松学K-means聚类算法(白宁超 2018年9月13日09:10:33) 导读:k-均值算法(英文:k-means clustering),属于比较常用的算法之一,文本首先介绍聚类的理 ...
- k-means聚类算法python实现
K-means聚类算法 算法优缺点: 优点:容易实现缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他 ...
- K-Means 聚类算法原理分析与代码实现
前言 在前面的文章中,涉及到的机器学习算法均为监督学习算法. 所谓监督学习,就是有训练过程的学习.再确切点,就是有 "分类标签集" 的学习. 现在开始,将进入到非监督学习领域.从经 ...
- K-means聚类算法及python代码实现
K-means聚类算法(事先数据并没有类别之分!所有的数据都是一样的) 1.概述 K-means算法是集简单和经典于一身的基于距离的聚类算法 采用距离作为相似性的评价指标,即认为两个对象的距离越近,其 ...
随机推荐
- 【小小demo】Springboot + Vue 增删改查
vue-table-ui 该工程提供的是 一个简单的 Vue + Element-UI 的表格,增删改查操作. 工程代码在最下面. 环境 jdk1.8 idea maven springboot 2. ...
- 即构SDK10月迭代:新增多款语音音效、外部采集码流控制及Android SDK 最低支持操作系统版本调整
即构SDK10月迭代内容来喽~~~ 本月调整了Android SDK 最低支持的操作系统版本,新增了流删除回调原因, 4种变音效果和外部采集码流控制,同时还对登录房间.媒体播放器以及第三方库进行了优化 ...
- KVM 动态调整 qcow2 硬盘
动态扩容 参考:https://cloud-atlas.readthedocs.io/zh_CN/latest/kvm/kvm_vdisk_live.html 未关闭虚拟机,直接在宿主机器上qemu- ...
- Django创建数据库时设置字符集
在控制台输入一下命令: create database 数据库名 charset=utf8;
- [prometheus]基于consul的服务发现
前言 prometheus默认使用静态配置文件监控服务,每次添加服务都要重载,比较麻烦.好在官方提供多种动态服务发现的方法,常用的一般有基于文件服务发现.基于consul服务发现和基于dns服务发现, ...
- 【Unity3D】反射和折射
1 前言 立方体纹理(Cubemap)和天空盒子(Skybox)中介绍了生成立方体纹理和制作天空盒子的方法,本文将使用立方体纹理进行采样,实现反射.菲涅耳反射和折射效果.另外,本文还使用了 Gra ...
- nlp入门(三)基于贝叶斯算法的拼写错误检测器
源码请到:自然语言处理练习: 学习自然语言处理时候写的一些代码 (gitee.com) 数据来源:norvig.com/big.txt 贝叶斯原理可看这里:机器学习算法学习笔记 - 过客匆匆,沉沉浮浮 ...
- AI 与智能化 API 治理的探索实践
7月 Eolink 受邀参加 QECon 2023 全球软件质量&效能大会(北京站).Eolink CEO 刘昊臻,发表了主题为「AI 与智能化 API 治理的探索实践」的演讲,分享 Eoli ...
- MIT6.s081/6.828 lectrue5/6:System call entry/exit 以及 Lab4 心得
这篇博客主要复习 lecture05:GDB calling conentions 和 lecture06:System call entry/exit 的内容,外加 Lab4:traps 的心得 前 ...
- 04.使用 github actions+docker 自动部署前后端分离项目 zhontai (.net core+vue)
前言 Github Actions是什么?是 GitHub 提供的一种持续集成/持续部署(CI/CD)工作流程自动化服务,助力项目的自动化构建.测试和部署. 依托于平台,本文将分享使用 GitHub ...