无监督学习(K-Means)的认识

目录

一、无监督学习 

二、无监督学习和有监督学习的区别 

三、K-Means 

3.1数据分析

3.2k-meas算法 

3.3数据正态化后k-means 

3.4找最佳k(Elbow Plot) 

四、k-means算法的优缺点

一、无监督学习 

无监督学习是一种机器学习的方法,与监督学习不同,无监督学习不需要标记好的训练数据作为输入。在无监督学习中,算法根据输入数据的内在结构和模式来自动学习。这种学习的目标是发现数据中的隐藏模式、结构或关系,而不是根据预定义的标签进行分类或预测。无监督学习算法可以用于聚类、降维、异常检测等任务,可以帮助我们理解数据的特点和相似性,挖掘数据的潜在知识,以及发现数据中的异常情况。

二、无监督学习和有监督学习的区别 

无监督学习和有监督学习是机器学习中两种常见的学习方式,它们的区别如下:

  1. 数据类型:无监督学习是在没有标签的情况下训练模型,只使用输入数据。有监督学习则需要标记好的输入数据和对应的输出标签。

  2. 目标:无监督学习的目标是发现数据中的潜在模式和结构,或者进行数据的聚类和降维等任务。有监督学习的目标是根据输入数据预测对应的输出标签。

  3. 训练方式:无监督学习中的训练是基于数据间的相似度或相关性进行的,例如聚类算法和关联规则挖掘等。有监督学习中的训练则是通过最小化预测结果与真实标签之间的差距来进行的。

  4. 性能评估:无监督学习的性能评估较为主观,通常依赖于领域知识或人工判断。有监督学习的性能评估则可以通过与真实标签进行比较来进行客观评估。

总的来说,无监督学习更侧重于数据的特征提取和发现,而有监督学习更关注于数据的预测和分类。

三、K-Means 

k-means是一种常见的聚类算法,也是一种迭代的划分聚类方法。它的基本思想是将n个样本对象划分成k个簇,使得簇内的样本尽可能相似,而簇间的样本差异较大。具体实现上,k-means通过不断迭代的方式来更新簇中心,直到满足停止条件。在每次迭代中,k-means会计算每个样本与各个簇中心的距离,并将样本归到距离最近的簇中心所对应的簇中。然后,更新每个簇的中心为该簇内所有样本的均值,再次进行迭代直到收敛为止。

k-means算法的优点是简单、易于理解和实现,而且效果通常较好。它可以用于数据的聚类分析、图像压缩、文本挖掘等领域。然而,k-means算法需要预先设置簇的个数k,并且对于初始簇中心的选择比较敏感,有可能陷入局部最优。同时,k-means对于异常值和噪声数据比较敏感,可能会产生错误的聚类结果。因此,在实际应用中,需要根据具体问题来选择合适的聚类算法。

具体流程如下:

  1. 选择k个初始的质心,可以是随机选择或者通过其他方式选择。

  2. 将每个数据点分配给离它最近的质心,形成k个簇。

  3. 更新每个簇的质心,将质心更新为簇内所有点的平均值。

  4. 重复步骤2和步骤3,直到簇的分配不再发生变化或达到预定的迭代次数。

3.1数据分析

from sklearn.cluster import KMeans
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from matplotlib import pyplot as plt
%matplotlib inlinedf = pd.read_csv("income.csv")

plt.scatter(df.Ag,df['Income($)'])#散点分布
plt.xlabel('Ag')
plt.ylabel('Income($)')

3.2k-meas算法 

km = KMeans(n_clusters=3)#通过可视化图形,大致判断出3
y_predicted = km.fit_predict(df[['Ag','Income($)']])#基于两个变量kmeans
y_predicted#分成三组,各点的组别#结果:array([2, 2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1])df['cluster']=y_predictedkm.cluster_centers_#中心点
'''结果:
array([[3.85714286e+01, 1.50000000e+05],[3.20909091e+01, 5.61363636e+04],[3.40000000e+01, 8.05000000e+04]])
'''
df1 = df[df.cluster==0]
df2 = df[df.cluster==1]
df3 = df[df.cluster==2]
plt.scatter(df1.Ag,df1['Income($)'],color='green')#标识点
plt.scatter(df2.Ag,df2['Income($)'],color='red')
plt.scatter(df3.Ag,df3['Income($)'],color='black')
plt.scatter(km.cluster_centers_[:,0],km.cluster_centers_[:,1],color='purple',marker='*',label='centroid')#中心点
plt.legend()

3.3数据正态化后k-means 

#preprocessing using min max scaler(kmeans 对偏离值比较敏感,对数据进行进一步的正态化,标准化)
scaler = MinMaxScaler()scaler.fit(df[['Income($)']])
df['Income($)'] = scaler.transform(df[['Income($)']])scaler.fit(df[['Ag']])
df['Ag']= scaler.transform(df[['Ag']])km = KMeans(n_clusters=3)#通过可视化图形,大致判断出3
y_predicted = km.fit_predict(df[['Ag','Income($)']])#基于两个变量kmeans
y_predicted#分成三组,各点的组别#结果:array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 2, 2, 2, 2, 2, 0])df['cluster']=y_predicted

df1 = df[df.cluster==0]
df2 = df[df.cluster==1]
df3 = df[df.cluster==2]
plt.scatter(df1.Ag,df1['Income($)'],color='green')#标识点
plt.scatter(df2.Ag,df2['Income($)'],color='red')
plt.scatter(df3.Ag,df3['Income($)'],color='blue')
plt.scatter(km.cluster_centers_[:,0],km.cluster_centers_[:,1],color='purple',marker='*',label='centroid')#中心点
plt.legend()#中心点要相对距离远

3.4找最佳k(Elbow Plot) 

k-means的inertia(惯性)是一种评估聚类结果好坏的指标。它是每个样本到其最近聚类中心的距离的平方和,表示了聚类的紧密度。

具体地,假设有k个聚类中心和n个样本点,用d(i, j)表示样本点i和聚类中心j之间的距离。那么样本点i到其最近的聚类中心的距离可以表示为min{d(i,j)},而样本点i到所有聚类中心的距离的平方和可以表示为∑min{d(i,j)}^2。这个平方和就是inertia。

k-means算法的目标是最小化inertia值。较小的inertia值表示较紧密的聚类,说明聚类结果比较好。因此,在应用k-means算法时,我们通常会根据inertia值来评估不同聚类数量的效果,选择使inertia值最小的k值。

需要注意的是,inertia值受到数据集的大小和维度的影响。一般来说,数据集越大,inertia值越大;数据维度越高,inertia值越大。当使用inertia来比较不同聚类结果时,应该确保数据集和维度相对一致,或者使用其他调整的指标来进行比较。

在k-means算法中,Error Sum of Squares(ESS)是用来衡量聚类结果的紧密度的指标。它代表了每个数据点与其所属簇的中心点之间的距离的总和的平方。

具体地说,对于给定的数据集和k个簇,k-means算法迭代地将数据点分配到最近的簇,并通过重新计算每个簇的中心点来优化簇的位置。在每次迭代过程中,计算每个数据点与其所属簇的中心点之间的距离,并将这些距离的平方累加起来,得到ESS。

ESS的计算公式为:

ESS = Σ(distance(x, center))^2

其中,distance()代表计算两个点之间的距离的函数,x表示数据点,center表示簇的中心点。

k-means算法的目标是通过最小化ESS来找到最优的聚类结果,使得簇内的差异最小。在算法迭代过程中,不断优化簇的位置和分配数据点的过程就是为了降低ESS的值。

#Elbow Plot肘部
sse = []
k_rng = range(1,10)
for k in k_rng:km = KMeans(n_clusters=k)km.fit(df[['Ag','Income($)']])sse.append(km.inertia_)#添加SSE(Error Sum of Squares)sse
'''结果:
[5.476320414158672,1.8312770324770151,0.4446643017599456,0.32491398139743455,0.23872357386187126,0.18333099202476363,0.14326134350385375,0.1105453573143515,0.07977903629169414]plt.xlabel('K')
'''plt.xlabel('K')
plt.ylabel('Sum of squared error')
plt.plot(k_rng,sse)#很明显3为肘部的点

四、k-means算法的优缺点

K-Means算法的优点包括简单易实现、计算效率高、可扩展性强等。缺点包括对初始中心点的选择敏感、对异常值敏感、需要预先指定聚类数量等。

K-Means算法的优点:

  1. 简单易实现:K-Means算法是一种简单且易于理解的聚类算法,容易实现并且计算效率高。
  2. 计算效率高:K-Means算法的计算复杂度较低,适用于大规模数据集。
  3. 可扩展性强:K-Means算法可以很容易地扩展到高维数据集和大规模数据集。

K-Means算法的缺点:

  1. 对初始中心点的选择敏感:K-Means算法的聚类结果受初始中心点的选择影响较大,不同的初始中心点可能导致不同的聚类结果。
  2. 对异常值敏感:K-Means算法对异常值敏感,异常值可能会影响聚类结果。
  3. 需要预先指定聚类数量:K-Means算法需要预先指定聚类数量k,但在实际应用中,往往很难事先确定合适的聚类数量。

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

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

相关文章

车载 Android之 核心服务 - CarPropertyService 的VehicleHAL

前言: 本文是车载Android之核心服务-CarPropertyService的第二篇,了解一下CarPropertyService的VehicleHAL, 第一篇在车载 Android之 核心服务 - CarPropertyService 解析-CSDN博客,有兴趣的 朋友可以去看下。 本节介绍 AndroidAutomotiveOS中对于 Veh…

【大数据】Zookeeper 集群及其选举机制

Zookeeper 集群及其选举机制 1.安装 Zookeeper 集群2.如何选取 Leader 1.安装 Zookeeper 集群 我们之前说了,Zookeeper 集群是由一个领导者(Leader)和多个追随者(Follower)组成,但这个领导者是怎么选出来的…

PTA——逆序的三位数

程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。 输入格式: 每个测试是一个3位的正整数。 输出格式: 输出按位逆序…

2025年考研数学题型、题量预测和真题(送35页考研数学大纲详解)

2024年考研的分数线在陆续发布中,在此,六分成长祝福所有努力奋斗的学子们都能进入考研的复试,并顺利录取,2024年9月进入自己心目中的高校、院系和专业继续深造。 与此同时,2025年的考研大幕已经徐徐拉开,现…

书生·浦语大模型全链路开源体系(陈恺|上海人工智能实验室 青年科学家)-听课笔记

大模型重要性 大模型确实已成为发展通用人工智能(AGI)的重要途径。它们通过整合和处理大量数据,学习语言、图像、声音等多种模式的表示,以此来模拟人类的学习和思维方式。通过不断地学习和优化,这些模型能够在各种任…

DBeaver配置达梦数据库连接

随着信创逐渐推广,达梦数据库也成为流行。下面展示如何使用dbeaver配置达梦数据库连接 1 驱动新建 菜单,数据库->驱动管理器 2 驱动信息填写 选择新建之后,弹出一个填写页面 需要填写的几个关键信息: 驱动名称:…

zookeeper应用场景之分布式的ID生成器

1. 分布式ID生成器的使用场景 在分布式系统中,分布式ID生成器的使用场景非常之多: 大量的数据记录,需要分布式ID。大量的系统消息,需要分布式ID。大量的请求日志,如restful的操作记录,需要唯一标识&#x…

新手学习易语言中文编程,易语言从入门到精通教学

一、教程描述 本套教程共有100集,并且有大量的课件资料,可能是截止到目前为止,最为全面系统的易语言教程了,其中有些视频是.exe文件,可以下载到本地播放。本套易语言教程,大小14.59G,共有6个压…

【Java并发】深入浅出 synchronized关键词原理-下

上一篇文章,简要介绍了syn的基本用法和monter对象的结构,本篇主要深入理解,偏向锁、轻量级锁、重量级锁的本质。 对象内存布局 Hotspot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header)、实例数据 (Instance Da…

互联网广告行业发展历程

在20年的历程中,广告主与媒体方持续面对着一些问题,一些核心问题推动了行业的迭代。 互联网广告经过了20年左右的高速发展,已愈发成熟,其历程是有趣的。 对互联网广告发展的理解,网上的文章并不多,已有的…

第12课 利用openCV检测物体是否运动了

FFmpeg与openCV绝对是绝配。前面我们已经基本熟悉了FFmpeg的工作流程,这一章我们重点来看看openCV。 在前面,我们已经使用openCV打开过摄像头并在MFC中显示图像,但openCV能做的要远超你的想像,比如可以用它来实现人脸检测、车牌识…

【Netapp数据恢复】Netapp存储lun被删除如何恢复数据?

Netapp存储数据恢复环境&故障情况: 某单位一台Netapp存储,该Netapp存储内共有数十块SAS硬盘。 工作人员误操作删除了Netapp存储中12个lun,删除的数据包括客户信息和其他重要数据。 Netapp存储数据恢复过程: 1、将故障存储中所…

C#利用openvino部署PP-TinyPose人体姿态识别

【官方框架地址】 github.com/PaddlePaddle/PaddleDetection 【算法介绍】 关键点检测算法往往需要部署在轻量化、边缘端设备上,因此长期以来都存在一个难题:精度高、速度则慢、算法体积也随之增加。而PP-TinyPose的出世彻底打破了这个僵局&#xff0c…

43 tmpfs/devtmpfs 文件系统

前言 在 linux 中常见的文件系统 有很多, 如下 基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 闪存文件系统, ubifs, jffs2, yaffs 文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用…

Selenium库和ChromeDriver谷歌驱动最新版安装

1.安装selenium库 使用pip安装第三方库selenium,速度较慢。 pip install selenium 使用国内清华源安装第三方库selenium,速度较快。 pip install selenium -i https://pypi.tuna.tsinghua.edu.cn/simple 2.安装谷歌浏览器驱动 驱动下载链接&#x…

【生成人工智能】Ray如何解决生成人工智能基础设施的常见生产挑战

这是我们生成人工智能博客系列的第一部分。在这篇文章中,我们讨论了如何使用Ray来生产常见的生成模型工作负载。即将发布的一篇博客将深入探讨Alpa等项目为什么要使用Ray来扩展大型模型。 生成的图像和语言模型有望改变企业的设计、支持、开发等方式。本博客重点关…

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变,Kotlin

Android ValueAnimator属性动画ObjectAnimator使View颜色渐变,Kotlin 设置背景颜色渐变: private var iv: ImageView? nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activit…

如何使用 Python、Node.js 和 Go 创建基于 YOLOv8 的对象检测 Web 服务

1. 介绍 这是有关 YOLOv8 系列文章的第二篇。在上一篇文章中我们介绍了YOLOv8以及如何使用它,然后展示了如何使用 Python 和基于 PyTorch 的官方 YOLOv8 库创建一个 Web 服务来检测图像上的对象。 在本文中,将展示如何在不需要PyTorch和官方API的情况下…

IDEA 2023快捷键

1、main | sout | psvm 2、CTALD 复制当前行 3、ALT SHIFT ↕ 可以把当前行代码进行移动 4、CTRLH 类的继承继承结构 5、CTRLF12 类的成员 6、 SHIFTF6 统一修改变量 7、CTRLATLH 方法调用层级 8、ALT1 是否展示左侧菜单 9、ALTinsert 生成一些代码 10、CTRLP 提示参数…

【React系列】Redux(二)中间件

本文来自#React系列教程:https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 中间件的使用 1.1. 组件中异步请求 在之前简单的案例中,redux中保存的counter是一个本地定义的数据…