机器学习第十一课--K-Means聚类

一.聚类的概念

K-Means算法是最经典的聚类算法,几乎所有的聚类分析场景,你都可以使用K-Means,而且在营销场景上,它就是"King",所以不管从事数据分析师甚至是AI工程师,不知道K-Means是”不可原谅“的一件事情。在面试中,面试官也经常问关于K-Means的问题。虽然算法简单,但也有一些需要深入理解的点,这些都会在本章节所涉及到。

二.K-Means的迭代过程

在进入K-Means算法的细节之前,我们先了解一下它整个的计算过程,理解起来很简单。整个过程是迭代式的算法,每次迭代过程包含如下两步操作:

  • 根据给定的中心点,计算出每一个样本的所属的类别(cluster),这个过程结束之后每一个样本都会有自己所属的类别。
  • 之后把每一个类别所属的所有样本提取出来,计算平均值并作为新的中心点。

    上述过程会不断循环,直到算法停止为止。

 

先第一步,固定uk也就是中点,去对样本做标记,标记完用标记后的样本求均值

在第一节里我们已经讲过k-Means的实现细节,而且在实现细节上也有分两步骤循环迭代的过程,其实那个过程正好对应现在讲的优化方案:固定中心点,求出每一个样本所属的最佳中心点的过程为算法里的第一步; 固定每个样本的类别,重新计算中心点的过程为算法里的第二步。

三.不同初始化对参数的影响

那这个说明什么问题呢?问题的本质在于我们每次得到的不是全局最优解,而是局部最优解!类似的现象也会发生在神经网络当中,不同的初始化结果会带来不一样的结果。所以当我们使用神经网络的时候会通过一些技巧去更好地初始化参数的。因为,对于这类的模型,好的初始化值会带来更好的最终结果的,也相当于得到了更好的局部最优解。那为什么k-means只能得到局部最优解呢? 其核心是非凸函数。 如果一个目标函数是非凸函数,那我们其实不能保证或者没有办法得到全局最优解的!如果想深入理解这些理论,建议大家去学习一下凸优化理论,所有的细节都会在凸优化领域涉及到的。

四.层次聚类

在上一节为止,我们讨论了如何使用K-Means算法来做聚类。总体来讲,算法通过迭代的方式最后找出聚类的结果。在这里,我们来学习一下另外一种聚类方法叫作层次聚类,通过层次聚类我们可以对原有样本数据做层次上的划分。相反,K-Means算法本身是扁平化的,不具备任何层次的概念,而且使用K-Means的是需要提前指定K值的, 但很多时候我们并不能提前知道到底有分成多少个clusters。
层次聚类,另一方面,不需要提前指定K,而是在学习过程中动态地去选定一个合适的K值。

 对于不规则的样本,K-Means算法的表现也会比较差。接下来,我们说一下层次关系。如上所述, K-Means算法在聚类时是不能捕获层次关系的。但层次关系有些时候还是挺有用的,比如通过观察人和人之间的关系来挖掘哪些是事件的发起者、组织是如何运作的。层次聚类算法的好处就是通过算法自动给数据做分层,数据之间的层次关系一目了然,当然这也取决于数据和算法的准确性了。通过层次聚类算法最终我们得到的是一个叫作Dendrogram的图,就是最后的结果。

4.1从下到上的层次聚类

我们来学习一下如何使用自下而上的方式来做层次聚类,这是两种层次聚类算法中最为常见的一种。它的核心思想是:一开始每一个点是一个cluster, 然后把类似的cluster慢慢做合并,到了最后就只剩一个cluster了,这个时候即可以停下来。等做完所有步骤之后,我们就可以从现有的结果中选择合理的聚类结果了。比如我们设定一个阈值,然后基于这个阈值就可以得到相应的clusters了。自下而上层次聚类过程的一个核心是:相似度的计算,因为涉及到了不同cluster之间的合并。下面给大家介绍三种常见的距离计算的方法:

第一种情况是两个cluster的合并是基于最短距离来完成的,第二种情况是根据最长的距离,最后一种情况是通过平均距离来做合并的。

max还是根据最短的来合并,但是距离根据最大距离来算

4.2 从上到下的层次聚类

 在这里,我们看另外一种层次聚类算法:自上而下的方法。这个方法恰恰跟自下而上的方法相反。一开始我们只有一个大的cluster, 由所有的样本组成,之后逐步把每一个cluster切分成更小的,直到每一个cluster只包含一个样本为止,这也意味着整个流程已完成。这个过程跟上节课里讲过的恰恰相反,每次需要考虑的是如何把一个大的cluster切分成两个clusters,所以这里的切分标准格外重要。但相比自下而上的方法,自上而下的聚类算法用的并不是那么多,大致了解一下就可以了。

在这里,我来介绍一个比较经典的自上而下的方法。 这个方案基于大家所熟悉的图算法,叫作最小生成树(minimum spanning tree)。

感觉连错了

对于最小生成树,有几个比较常见的算法,分别是Prime和Kruskal算法。具体细节不在这里做详细阐述,感兴趣的朋友们可以自行去查看这两种算法。理解了MST之后,我们就可以开始谈论自上而下的方法了。其实之后的操作非常简单,请看下面的一段视频。

把最大的砍掉。

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

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

相关文章

MATLAB | R2023b更新了哪些好玩的东西?

R2023b来啦!!废话不多说看看新版本有啥有趣的玩意和好玩的特性叭!!依旧把绘图放最前面叭,有图的内容看的人多。。 1 调色板 MATLAB终于不只有一套配色了,诸君且看: y [3 5 7 9 11; 2 5 6 8 1…

uniapp确认提示框;uniapp判断输入框值是否符合正常手机号,身份证号

确认提示框 UniApp 中&#xff0c;你可以使用 uni.showModal 方法来创建确认提示框。以下是一个示例&#xff1a; <template><view class"container"><button click"showAuthModal">显示确认提示框</button></view> </…

【问题记录】解决“命令行终端”和“Git Bash”操作本地Git仓库时出现 中文乱码 的问题!

环境 Windows 11 家庭中文版git version 2.41.0.windows.1 问题情况 在使用 “命令行终端” 和 “Git Bash” 在本地Git仓库敲击命令时&#xff0c;对中文名称文件显示一连串的数字&#xff0c;如下所示&#xff1a;这种情况通常是由于字符编码设置不正确所引起的 解决办法 设置…

什么是分布式锁?他解决了什么样的问题?

相信对于朋友们来说&#xff0c;锁这个东西已经非常熟悉了&#xff0c;在说分布式锁之前&#xff0c;我们来聊聊单体应用时候的本地锁&#xff0c;这个锁很多小伙伴都会用 ✔本地锁 我们在开发单体应用的时候&#xff0c;为了保证多个线程并发访问公共资源的时候&#xff0c;…

网络编程day05(IO多路复用)

今日任务&#xff1a; TCP多路复用的客户端、服务端&#xff1a; 服务端代码&#xff1a; #include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netinet/in.h> #include <unistd.h> …

uniapp 内容展开组件

uni-collapse折叠面板并不符合需求&#xff0c;需要自己写一个。 效果展示&#xff1a; 代码&#xff1a; &#xff08;vue3版本&#xff09; <template><view class"collapse-view"><view class"collapse-content"><swiper:autopl…

OpenHarmony应用核心技术理念与需求机遇简析

一、核心技术理念 图片来源&#xff1a;OpenHarmony官方网站 二、需求机遇简析 新的万物互联智能世界代表着新规则、新赛道、新切入点、新财富机会;各WEB网站、客户端( 苹果APP、安卓APK)、微信小程序等上的组织、企业、商户等;OpenHarmony既是一次机遇、同时又是一次大的挑战&…

好用的记笔记app选哪个?

当你在日常生活中突然获得了一个灵感&#xff0c;或者需要记录会议的重要内容&#xff0c;或者是学校课堂上的笔记&#xff0c;你通常会拿出手机&#xff0c;因为它总是在你身边&#xff0c;随时可用。这时候&#xff0c;一款好的记笔记App可以让你事半功倍。 敬业签是一款全面…

「UG/NX」Block UI 从列表选择部件SelectPartFromList

✨博客主页何曾参静谧的博客📌文章专栏「UG/NX」BlockUI集合📚全部专栏「UG/NX」NX二次开发「UG/NX」BlockUI集合「VS」Visual Studio「QT」QT5程序设计「C/C+&#

Qt5开发及实例V2.0-第十五章-Qt单元测试框架

Qt5开发及实例V2.0-第十五章-Qt单元测试框架 第15章 Qt 5单元测试框架15.1 QTestLib框架15.2 简单的Qt单元测试15.3 数据驱动测试15.4 简单性能测试 本章相关例程源码下载1.Qt5开发及实例_CH1501.rar 下载2.Qt5开发及实例_CH1502.rar 下载3.Qt5开发及实例_CH1503.rar 下载4.Qt5…

构建个人云存储:本地电脑搭建SFTP服务器,开启公网访问,轻松共享与管理个人文件!

本地电脑搭建SFTP服务器&#xff0c;并实现公网访问 文章目录 本地电脑搭建SFTP服务器&#xff0c;并实现公网访问1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内…

stm32之GPIO库函数点灯分析

stm32官方为了方便开发者&#xff0c;利用CubeMX 生成HAL库有关的C代码。HAL库就是硬件抽象层(hardware abstraction layer)&#xff0c;生成一系列的函数帮助我们快速生成工程&#xff0c;脱离复杂的寄存器配置。stm32相对于51来功能强大&#xff0c;但是寄存器的数量也不是一…

C++核心编程——P22-练习案例2:点和圆的关系

在一个类中可以让另一个类作为这个类的成员 #include<iostream> using namespace std; class Point//点类 { public:void setx(int x){c_x x;}int getx(){return c_x;}void sety(int y){c_y y;}int gety(){return c_y;}//建议将属性设置为私有&#xff0c;对外提供接口…

pcl--第十二节 2D和3D融合和手眼标定

2D&3D融合 概述 截止目前为止&#xff0c;我们学习了机器人学&#xff0c;学习了2D和3D视觉算法。我们也学习了2D相机(图像数据的来源)和3D相机(点云数据的来源)工作原理。 实际上&#xff0c;我们最终要做的&#xff0c;是一个手眼机器人系统。在这个系统里&#xff0c…

pytorch学习------常见的优化算法

优化算法 优化算法就是一种调整模型参数更新的策略&#xff0c;在深度学习和机器学习中&#xff0c;我们常常通过修改参数使得损失函数最小化或最大化。 优化算法介绍 1、梯度下降算法&#xff08;batch gradient descent BGD&#xff09; 每次迭代都需要把所有样本都送入&…

深入了解队列数据结构:定义、特性和实际应用

文章目录 &#x1f34b;引言&#x1f34b;队列的定义&#x1f34b;队列的实现&#x1f34b;队列的应用&#x1f34b;练习题&#x1f34b;结语 &#x1f34b;引言 队列&#xff08;Queue&#xff09;是计算机科学中一种重要的数据结构&#xff0c;它常用于各种应用程序中&#x…

Hive【Hive(一)DDL】

前置准备 需要启动 Hadoop 集群&#xff0c;因为我们 Hive 是在 Hadoop 集群之上运行的。 从DataGrip 或者其他外部终端连接 Hive 需要先打开 Hive 的 metastore 进程和 hiveserver2 进程。metastore 和 hiveserver2 进程的启动过程比较慢&#xff0c;不要着急。 Hive DDL 数据…

基于SpringBoot的网上超市系统的设计与实现

目录 前言 一、技术栈 二、系统功能介绍 管理员功能实现 用户功能实现 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计…

微软在Windows 11推出Copilot,将DALL-E 3集成在Bing!

美东时间9月21日&#xff0c;微软在美国纽约曼哈顿举办产品发布会&#xff0c;生成式AI成为重要主题之一。 微软表示&#xff0c;Copilot将于9月26日在Windows 11中推出&#xff1b;Microsoft 365 Copilot 将于11 月1日向企业客户全面推出&#xff1b;将OpenAI最新的文本生成图…