k-mean聚类的python实现

news2024/10/2 1:34:52

文章目录

  • 介绍
    • KMeans()函数介绍
  • 实例
    • 导入相关包
    • 整理数据
    • 手肘法确定分类个数
    • 创建模型
    • 绘制结果
    • 分为3类的结果

作者:张双双

介绍

sklearn.cluster模块提供了常用的非监督聚类算法。 该模块中每一个聚类算法都有两个变体: 一个是类(class)另一个是函数(function)。 类实现了fit方法来从训练数据中学习聚类;对类来说,训练过程得到的标签数据可以在属性 labels_ 中找到。 函数接受训练数据返回对应于不同聚类的一个整数标签数组。

KMeans()函数介绍

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=1,
     algorithm='auto')

参数介绍:

  • 1.n_clusters:整形,默认=8 ,生成的聚类数,即产生的质心(centroids)数。

  • 2.max_iter:整形,默认=300 ,执行一次k-means算法所进行的最大迭代数。

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

  • 4.init:有三个可选值:k-means++, random,或者传递一个ndarray向量。 此参数指定初始化方法,默认值为kmeans++。
    (1)k-means++用一种特殊的方法选定初始质心从而能加速迭代过程的收敛(即上文中的k-means++介绍)
    (2)random随机从训练数据中选取初始质心。
    (3)如果传递的是一个ndarray,则应该形如 (n_clusters, n_features) 并给出初始质心。

  • 5.precompute_distances:三个可选值,‘auto’,True 或者 False。 预计算距离,计算速度更快但占用更多内存。
    (1)auto:如果 样本数乘以聚类数大于 12million 的话则不预计算距离。
    (2)True:总是预先计算距离。
    (3)False:永远不预先计算距离。

  • 6.tol:float形,默认值= 1e-4 与inertia结合来确定收敛条件。

  • 7.n_jobs:整形数。指定计算所用的进程数。内部原理是同时进行n_init指定次数的计算。
    (1)若值为 -1,则用所有的CPU进行运算。若值为1,则不进行并行运算,这样的话方便调试。
    (2)若值小于-1,则用到的CPU数为(n_cpus + 1 + n_jobs)。因此如果 n_jobs值为-2,则用到的CPU数为总CPU数减1。

  • 8.random_state:整形或 numpy.RandomState 类型,可选用于初始化质心的生成器(generator)。如果值为一个整数,则确定一个seed。此参数默认值为numpy的随机数生成器。

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

实例

导入相关包

import matplotlib.pyplot as plt 
import numpy as np 
import pandas as pd
from sklearn import datasets 
from sklearn.cluster import KMeans
from sklearn import preprocessing
from sklearn.cluster import MiniBatchKMeans
from yellowbrick.cluster import KElbowVisualizer
from yellowbrick.cluster import SilhouetteVisualizer
from yellowbrick.cluster import InterclusterDistance

整理数据

iris = datasets.load_iris() 
X = iris.data[:, :4] # #表示我们取特征空间中的4个维度
min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(X)

手肘法确定分类个数

# Elbow method 手肘法
plt.figure(figsize=(6,4))
model = KMeans()
visualizer = KElbowVisualizer(model, k=(1,8))
visualizer.fit(x_scaled)       
visualizer.show() 

在这里插入图片描述
确定分类个数为2。

创建模型

estimator = KMeans(n_clusters=2) # 构造聚类器
estimator.fit(x_scaled) # 聚类
label_pred1 = estimator.labels_ # 获取聚类标签

绘制结果

# 绘制结果
x0 = X[label_pred1 == 0]
x1 = X[label_pred1 == 1]
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0') 
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1') 
plt.xlabel('sepal length') 
plt.ylabel('sepal width') 
plt.legend(loc=2) 
plt.show()

在这里插入图片描述

分为3类的结果

estimator = KMeans(n_clusters=3) # 构造聚类器
estimator.fit(x_scaled) # 聚类
label_pred1 = estimator.labels_ # 获取聚类标签
# 绘制结果
x0 = X[label_pred1 == 0]
x1 = X[label_pred1 == 1]
x2 = X[label_pred1 == 2]
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0') 
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1') 
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2') 
plt.xlabel('sepal length') 
plt.ylabel('sepal width') 
plt.legend(loc=2) 
plt.show()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day06 Debug基础练习

1.Debug模式 1.1 什么是Debug模式 是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。 1.2 Debug介绍与操作流程 如何加断点 选择要设置断点的代码行,在行号的区域后面单击鼠标左键即可 …

刷题记录:牛客NC24858Job Hunt [最长路+两种不同判环详解]

传送门:牛客 题目描述: 奶牛们正在找工作。农场主约翰知道后,鼓励奶牛们四处碰碰运气。而且他还加了一条要求:一头牛在一个城市 最多只能赚D(1≤D≤1000)美元,然后它必须到另一座城市工作。当然,它可以在…

2自由度陀螺仪滑模控制和PID控制跟踪目标轨迹

目录 前言 1.陀螺仪模型 2.滑模跟踪控制 3.PID控制 4.总结 前言 不为别的,这篇小文章只为内涵某人,问候一下他:不是有手就行,哈哈~ 1.陀螺仪模型 2.滑模跟踪控制 对于2自由度陀螺仪有两个方向x、y跟踪,所以需要…

对于软件测试认识的几大误区,看看你有没有?

对于软件开发来说,软件测试可能还不被大众了解,很多开发人员,包括很多软件高层管理人员,由于缺乏软件测试的知识和实践经验,对软件测试的认识还有很多的误区: 误区一:如果软件发布后有质量问题…

我们一起来谈谈高并发和分布式系统的幂等如何处理!

什么是幂等性 幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。 在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。 幂等函数或幂等…

Codeforces Round #841 (Div. 2)

题目链接 A. Joey Takes Money 题目描述 input output 题意: 有一个长度为n的数组,你可以进行一步操作,选择两个i,j,然后再选择两个数x,y,使得a[i]a[j] xy,然后将a[i] x,a[j] y,问任意步操…

Spring 中运用的 9 种设计模式

Spring中涉及的设计模式总结,在面试中也会经常问道 Spring 中设计模式的问题。本文以实现方式、实质、实现原理的结构简单介绍 Sping 中应用的 9 种设计模型,具体详细的刨析会在后面的文章发布,话不多说,来个转发、在看、收藏三连…

京东软件测试岗:惨不忍睹的三面,幸好做足了准备,月薪17k,已拿offer

我今年25岁,专业是电子信息工程本科,19年年末的时候去面试,统一投了测试的岗位,软件硬件都有,那时候面试的两家公司都是做培训的,当初没啥钱,他们以面试为谎言再推荐去培训这点让我特别难受。 …

Unity 搭建ILRuntime开发环境

Unity热更新目前主流的方案有: Lua, ILRuntime, puerts, huatuo方案。前两个大家都比较熟悉了,puerts 是基于TypeScript开发的热更新,huatuo是基于C#的方案。后两个大家会比较陌生。本系列分享基于ILRuntime来做热更新。 对啦!这里有个游戏开…

【财务】FMS财务管理系统---存货管理

前一篇文章介绍了付款相关的内容,本文中笔者继续介绍FMS财务管理系统的设计,今天是关于存货管理的介绍。 财务存货管理应该就是针对公司的生产原材料、物料、成品、加工品的数量与金额的管控。 在前面也介绍了,存货属于公司的资产&#xff0…

纯Java实现一个网页版的Xshell

前言 最近由于项目需求,项目中需要实现一个WebSSH连接终端的功能,由于自己第一次做这类型功能,所以首先上了GitHub找了找有没有现成的轮子可以拿来直接用,当时看到了很多这方面的项目,例如:GateOne、webss…

微信小程序实现身份证识别-orc

项目中有一个识别身份证的需求,经过调研,最后决定使用微信小程序orc插件进行开发。 一:首先登录小程序公众平台。 1:进入设置> 第三方设置。 2:添加ocr插件。 3:添加完后,需要领取免费额度,100次/天。 https://fuwu.weixin…

SpringBoot+Vue实现后疫情时代下的旅游管理系统

文末获取源码 开发语言:Java 使用框架:spring boot 前端技术:JavaScript、Vue.js 、css3 开发工具:IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库:MySQL 5.7/8.0 数据库管理工具:phpstudy/Navicat JD…

Linux高级之日志管理

Linux高级之日志管理1.系统常用日志2.日志服务的稳定性3.自定义日志服务4.日志轮替5.内存日志1.系统常用日志 日志文件用于记录linux系统的各种运行信息的文件,相当于linux主机的日记,不同的日志文件记载了不同类型的信息,如Linux内核消息、用户登录事件…

React学习04-React_Ajax

写在前面 React本身只关注于界面,并不包含发送ajax请求的代码前端应用需要通过ajax请求与后台进行交互(json数据)React应用中需要集成第三方ajax库(或自己封装) 常用的ajax请求库 jQuery:比较重&#xf…

C|%输出各种类型的值总结

参考: C语音输出各种类型数据的方式 c语言中%s的用法 %d:十进制有符号整数 输出的数据范围是 signed int 的范围,即 0x80000000 ~ 0x7FFFFFFF(-2147483648~2147483647) %u:十进制无符号整数 输出范围0~0xF…

JVM-垃圾回收

1、GC分类 (1)部分收集(Partial GC) 新生代收集(Minor GC/Young GC):只对新生代进行垃圾收集。(读音[ˈmaɪnə(r)]) 老年代收集(Major GC/Old GC&#xff09…

基于SpringBoot+mybatis+mysql+html家具城进销存管理系统

基于SpringBootmybatismysqlhtml家具城进销存管理系统一、系统介绍二、功能展示1.用户登陆2.进货管理(货物管理员)3.退货管理(货物管理员)4.商品销售、商品销售退货(商品管理员)5.管理商品、商品类别、供应商、客户(商品管理员)6.…

DirtyPipe(CVE-2022-0847)漏洞分析

前言 CVE-2022-0847 DirtyPipe脏管道漏洞是Linux内核中的一个漏洞,该漏洞允许写只读文件,从而导致提权。 调试环境 ubuntu 20.04Linux-5.16.10qemu-system-x86_64 4.2.1 漏洞验证 首先创建一个只读文件foo.txt,并且正常情况下是无法修改…

微信小程序集成three.js--6.利用raycastor选择对象

1.实例演示 小程序集成Three.js,利用raycaster实现对象的2.源码 (1)引入库并声明变量 import * as THREE from ../../libs/three.weapp.js import {OrbitControls } from ../../jsm/controls/OrbitControls const app getApp()// 声明一个…