【Python】sklearn机器学习之Meanshift聚类算法

news2024/11/13 7:37:13

文章目录

    • 基本原理
    • sklearn调用

基本原理

凡聚类者,必有中心。按照这个思路,如果某个区域满足聚类的要求,那么其自然中心与样本均值应该是几乎重合的,这也是MeanShift算法的基本逻辑。

假设现有100个点,然后随机选择1个聚类中心,统计距离这个聚类中心 r r r以内的点的平均值

import numpy as np
from sklearn.datasets import make_blobs
import matplotlib.pyplot as plt

X, y = make_blobs(n_samples=100)
cTest = [2,2]

def updateCenter(X, cTest):
    d = np.linalg.norm(X - cTest, axis=1)
    return np.mean(X[d<3], axis=0)  # 半径设为3

cNew = updateCenter(X, cTest)
print(cNew)
# [2.84336857 0.00494472]

其中,X, y = make_blobs(n_samples=100)用于创建一个涵盖100个点的聚类测试点集,其中X为点的坐标集合,y为点的label集合。

updateCenter函数是MeanShift算法的核心函数,表示求取当前聚类中心和聚类点之间距离的平均值。

cNew是进行一次updateCenter之后的聚类点集。接下来,可以把updateCenter前后的聚类中心绘制出来

def drawMS(X, r, cNew, cOld=[0,0]):
    plt.scatter(X[:,0], X[:,1], marker='.')     # 样本点
    plt.scatter(cOld[0], cOld[1], marker='o')   # 预设中心
    plt.scatter(cNew[0], cNew[1], marker='*')   # 样本均值
    th = np.linspace(0, np.pi*2, 100)
    xs = r * np.cos(th) + cOld[0]
    ys = r * np.sin(th) + cOld[1]
    plt.plot(xs, ys)
    plt.show()

drawMS(X, 3, cNew)

得到结果如下,其中绿色的星星表示满足样本要求的点的平均值,

在这里插入图片描述

接下来再以cNew为中心画圆,重复刚才的操作

cOld = cNew
cNew = updateCenter(X, cOld)
drawMS(X, 3, cNew, cOld)

效果为

在这里插入图片描述
可以非常明显地看到,这个大圆和圆心(五角星)都向着更密集的点的方向靠拢。随着迭代算法的不断进行,大圆的圆心早晚会和这些点的质心重合在一起,从而完成聚类。

sklearn调用

一般来说,越是靠近聚类中心的地方,样本应该越密集,越是远离聚类中心,则样本越稀疏。换言之,越是靠近中心的地方,理应享有更大的权重,所以在sklearn中,采用的斌不是直接求样本均值,而是采用样本加权平均值,可表示为

N ( x ) = 1 2 π h e − − x 2 2 h 2 N(x)=\frac{1}{\sqrt{2\pi}h}e^{-\frac{-x^2}{2h^2}} N(x)=2π h1e2h2x2

其中h为带宽,起到类似半径的限制作用。在sklearn中提供的MeanShift类,其构造函数中最重要的参数就是带宽bandwidth

最后,测试一下MeanShift

from sklearn.cluster import MeanShift
ms = MeanShift(bandwidth=3)
ms.fit(X)
plt.scatter(X[:,0], X[:,1], c=ms.labels_)
plt.show()

效果如下,可见MeanShift算法对样本的分类是符合人类直觉的,X被分成了三类,每一类都标上了不同的颜色。

在这里插入图片描述

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

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

相关文章

day33【代码随想录】贪心算法之分发饼干、摆动序列、最大子序和、买卖股票的最佳时机 II

文章目录前言一、分发饼干&#xff08;力扣455&#xff09;二、摆动序列&#xff08;力扣376&#xff09;1、贪心算法2、动态规划三、最大子序和&#xff08;力扣53&#xff09;四、买卖股票的最佳时机 II&#xff08;力扣122&#xff09;前言 1、分发饼干 2、摆动序列 3、最大…

【Kuangbin区间DP】奶牛零食

4558. 奶牛零食 - AcWing题库 题意&#xff1a; 写了Kuangbin的三道DP&#xff0c;三道都不会QwQ 是不是该remake了.... 思路&#xff1a; 一开始我天真的以为那个题单全是线性DP&#xff0c;然后我就自然而然往线性DP的方向上想了呜呜 我设 dp[i][j]表示阶段 i &#xff…

你可以不用Git,但不能不会Git(一)概述

目录 一.什么是Git 二.为什么要使用Git 三.Git和SVN对比 四.Git工作流程 五.Git下载与安装 一.什么是Git Git历史 很多人都知道&#xff0c;林纳斯托瓦兹在1991年创建了开源的Linux&#xff0c;从此&#xff0c;Linux系统不断发展&#xff0c;已经成为最大的服务器系统…

Unity:从入门到入行【全面总结,建议收藏】

史上最全干货系列 一、unity的安装与使用 1.unity安装资源 方法一&#xff1a; 通过http://unity.cn官网进行下载&#xff0c;详细教程可见下方链接。 Unity新手入门&#xff1a;新手如何安装Unity_哔哩哔哩_bilibili​www.bilibili.com/video/BV1Yb4y1f7zK?spm_id_from333…

10_2、Java基本语法之注解(Annotation)的使用

一、注解的理解 1、jdk5.0新增 2、在JavaSE中&#xff0c;注解的使用目的比较简单&#xff0c;例如标记过时的功能&#xff0c;忽略警告等。在JavaEE/Android中注解占据了更重要的角色&#xff0c;例如用来配置应用程序的任何切面&#xff0c;代替JavaEE旧版中所遗留的…

小程序项目-后台交互(首页)

目录 一&#xff0c;后台准备 配置数据源 整合mybatis 二&#xff0c;准备前端的首页的数据 封装request 会议展示 一&#xff0c;后台准备 先建一个新的项目&#xff0c;建好后导入相关的pom依赖&#xff0c;将 以下的一些工具类也准备好&#xff0c;工具类可参考前面…

Django学习16 -- ModelAdmin options

参考&#xff1a; Django Documentation Release 4.1.4.dev20221130072229&#xff0c;ModelAdmin options&#xff0c;P988 ~ P1007 &#xff08;补充更新。。。。。。&#xff09;Django学习7 -- 添加个人应用&#xff08;自定义应用页面优化&#xff09;Django学习8 -- 添加…

form表单的基本使用

1、什么是表单 表单在网页中主要负责数据采集功能。HTML中的<form>标签&#xff0c;就是用于采集用户输入的信息&#xff0c;并通过<form>标签的提交操作&#xff0c;把采集到的信息提交到服务器端进行处理。 2、表单的组成部分 <form> <input type"…

c#入门-objtct的方法

声明类型的基类 c#中的类都继承自object类&#xff0c;包括静态类。 静态类只是无法手动指定继承类型&#xff0c;而声明静态类时的关键字class&#xff0c;已经让他派生自object类了。 结构类型继承自ValueType类&#xff0c;而ValueType继承自object类。 数组继承自Array类…

【JavaScript】本地存储(localStorage、sessionStorage、cookie)

文章目录【JavaScript】本地存储(localStorage、sessionStorage、cookie)一. 概念二. 本地存储特性三. 会话级存储四. 持久性存储五. cookie六. 本地存储的区别(1) cookie和storage的区别(2) localStorage和sessionStorage的区别七. 案例&#xff1a;记住用户名【JavaScript】本…

ansible(第二天)

第二章&#xff1a;模块介绍 1.Ansible的三个命令模块 command shell raw 应尽量避免使用这三个模块来执行命令&#xff0c;因为其他模块大部分都是幂等性的&#xff0c;可以自动进行更改跟踪。 command、shell、raw不具备幂等性。注&#xff1a; 幂等性&#xff1a;简单来…

【2 - 随机森林 - 案例部分:随机森林在乳腺癌数据上的调参】菜菜sklearn机器学习

课程地址&#xff1a;《菜菜的机器学习sklearn课堂》_哔哩哔哩_bilibili 第一期&#xff1a;sklearn入门 & 决策树在sklearn中的实现第二期&#xff1a;随机森林在sklearn中的实现第三期&#xff1a;sklearn中的数据预处理和特征工程第四期&#xff1a;sklearn中的降维算法…

vue3笔记案例——Suspense使用之骨架屏

文章目录skeleton组件sync组件Suspense使用skeleton组件 示例图 代码 <template><div class"sk"><div class"sk-2"><div class"sk-2-1"></div><div></div></div><hr><div class&qu…

亚马逊云科技 Build On -轻松搭建咖啡点单系统

【前言】 1、什么是Build On&#xff1f; Build On是亚马逊团队基于亚马逊云服务开发&#xff0c;打造的一系列可快速上手的实操性活动。通过通俗易懂的场景案例、简单快捷的开发路径&#xff0c;参与者可快速理解目标任务涉及的相关知识&#xff0c;同时对亚马逊云服务具备一…

【回答问题】ChatGPT上线了!推荐30个以上比较好的意图识别模型

【回答问题】ChatGPT上线了&#xff01;推荐30个以上比较好的意图识别github源码&#xff1f; 好的&#xff0c;这里列出 30 个相对比较优秀的意图识别 GitHub 源码&#xff1a; DeepPavlov Rasa Snips spaCy OpenAI GPT OpenAI DialogFlow ChatterBot Botpress Amazon Lex M…

ArcGIS基础实验操作100例--实验41提取道路面中心线

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验41 提取道路面中心线 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff08;1…

2022,我遭遇的那些小事

前言 2022&#xff0c;总感觉一晃眼就过去了&#xff0c;不知不觉自己坚持更文已经一周年了。回顾这一周年&#xff0c;无论是在技术成长上还是职业发展上&#xff0c;都有了许多新的体会。 裁员风波 还记得是四、五月份的一个上午&#xff0c;原本还在紧张的加班赶项目&…

educoder数据结构与算法 队列 第2关 实现一个链接存储的队列

本文已收录于专栏 &#x1f332;《educoder数据结构与算法_大耳朵宋宋的博客-CSDN博客》&#x1f332; 目录 任务描述 相关知识 编程要求 测试说明 AC_Code 任务描述 本关任务&#xff1a;实现 step2/CLnkQueue.cpp 中的CLQ_IsEmpty、CLQ_Length、CLQ_In和CLQ_Out四个操…

论文阅读和复现:去除PPG运动伪影的IEEE论文

论文阅读和代码复现&#xff1a; 《Combining Nonlinear Adaptive Filtering and Signal Decomposition for Motion Artifact Removal in Wearable Photoplethysmography》 基本介绍&#xff1a; 由于手腕运动造成的噪声&#xff1a;运动伪影&#xff0c;使得PPG方法的心率监…

shell-流程控制之条件判断

1、判断当前磁盘剩余空间是否有20G&#xff0c;如果小于20G&#xff0c;则将报警邮件发送给管理员&#xff0c;每天检查一次磁盘剩余空间。 补充&#xff1a;20G20971520kb [rootcotenos day06]# pwd /root/shell/day06 [rootcotenos day06]# vim free_men.sh #!/bin/bash f…