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

news2025/1/11 3:57:59

目录

一、无监督学习 

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

三、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 inline

df = 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_predicted

km.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.coloradmin.cn/o/1359320.html

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

相关文章

机器学习--回归算法

🌳🌳🌳小谈:一直想整理机器学习的相关笔记,但是一直在推脱,今天发现知识快忘却了(虽然学的也不是那么深),但还是浅浅整理一下吧,便于以后重新学习。 &#x1…

Eclipse设置不依赖系统环境变量,设置lombok

设置不依赖系统环境变量,如图首行添加 -vm. lombok配置在最后两行

企业老旧档案怎么处理?

不管选择何种处理方式处理企业老旧档案,都要先制定一份详细的档案处理计划,明确处理的目标、方式和时间,并确保有足够的人力和物力资源来完成处理工作。 一般来说,常用的企业老旧档案有以下几种方法: 1. 整理归档&…

半导体Memory的分类

文章目录 略图introRAM & ROM 略图 intro 存储器是嵌入式系统中用于存放数据和程序的模块。有些存储器是MCU内置的,有些是扩展的。 存储器嵌入式系统中常见且重要的外设模块。搞清楚存储器的分类是从事嵌入式开发工作的一项基本功。 从功能上,存储器…

2023高级人工智能期末总结

1、人工智能概念的一般描述 人工智能是那些与人的思维相关的活动,诸如决策、问题求解和学习等的自动化; 人工智能是一种计算机能够思维,使机器具有智力的激动人心的新尝试; 人工智能是研究如何让计算机做现阶段只有人才能做得好的…

DNs服务学习笔记

DNS:域名系统(英文:Domain Name System)是一个域名系统,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。类似于生活中的11…

基于帝国主义竞争算法优化的Elman神经网络数据预测 - 附代码

基于帝国主义竞争算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于帝国主义竞争算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于帝国主义竞争优化的Elman网络5.测试结果6.参考文献7.Matl…

P11 FFmpe时间基和时间戳

前言 从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《Linux C应用编程(概念类)_C…

C/C++输入函数总结

1、cin 2、cin.get 3、cin.getline 4、getline 5、gets 6、getchar 1、cin 可以接受单个字符和字符串,但遇空格,"TAB","回车"结束!!! 若不跳过空白字符,使用 noskipws 流控制。 使用方法如…

数据结构学习 jz56数组中数字出现的次数

关键词:位运算 异或性质 虽然有两道题,但是其实应该分成三个级别的题目。 题目一: 一个整型数组 sockets 里除 一个 数字之外,其他数字都出现了两次。 思路:异或的性质 复杂度计算: 时间复杂度O(n) 空…

C语言全面学习基础阶段01—C生万物

如何学好 C 语言 1. 鼓励你,为你叫好。 C 生万物 编程之本 长远 IT 职业发展的首选 C 语言是母体语言,是人机交互接近底层的桥梁 学会 C/C ,相当于掌握技术核心 知识点一竿子打通。 IT 行业,一般每 10 年就有一次变革 40 年间&a…

智慧校园全空间三维电子沙盘系统

一、概述 易图讯科技(www.3dgis.top)采用大数据、云计算、虚拟现实、物联网、AI等先进技术,自主可控高性能WebGIS可视化引擎,支持多用户客户端通过网络请求访问服务器地图和专题数据,提供地理信息数据、专题数据的并发…

数据迁移怎么测,都有哪些步骤?

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢软件测试面试题分享: 1000道软件测试面试题及答案📢软件测试实战项目分享: 纯接口项目-完…

【机器学习】卷积神经网络----GoogLeNet网络(pytorch)

代码是一个使用PyTorch实现的GoogLeNet模型,该模型是一个深度卷积神经网络(CNN)用于图像分类任务。 1. 定义基本卷积模块 BasicConv2d 类是一个基本的卷积块,包含一个卷积层、批归一化层和ReLU激活函数。该类用于构建Inception模块…

亚马逊云科技基于 listmonk 的电子邮件营销解决方案

本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 亚马逊云科技开发者社区, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道。 背景 电子邮件营销(EDM)在广告、电商、供应链物流等行业应用…

MR实战:网址去重

文章目录 一、实战概述二、提出任务三、完成任务(一)准备数据1、在虚拟机上创建文本文件2、上传文件到HDFS指定目录 (二)实现步骤1、创建Maven项目2、添加相关依赖3、创建日志属性文件4、创建网址去重映射器类5、创建网址去重归并…

怎么选择一款好用的ERP企业管理软件?看这六点就够了!

在目前高度信息化的环境中,ERP系统已成为生产制造企业管理的心脏。它集财务、人力资源、采购、生产、销售和库存等多个业务功能于一身,为企业提供了一个统一的、高效的、实时的管理平台。然而,市场上的ERP软件繁多,选择一款真正适…

WPF美化ItemsControl1:不同颜色间隔

首先我们有的是一个绑定好数据的ItemsControl <ItemsControl ItemsSource"{Binding Starts}"> </ItemsControl> 运行后呢是朴素的将数据竖着排列 如果想要数据之间有间距&#xff0c;可以使用数据模板&#xff0c;将数据放到TextBlock中显示&#xff0…

【Python可视化实战】钻石数据可视化

一、项目引言 1.背景和目标 钻石作为一种珍贵的宝石&#xff0c;其价格受到多种因素的影响。为了深入了解钻石价格的决定因素&#xff0c;我们收集了大量关于钻石的数据&#xff0c;并希望通过数据可视化来揭示钻石特征与价格之间的关系。 2.内容 收集钻石的各项特征数据&a…

【NR技术】 NR多连接处理流程(Multi-Connectivity operation)

1 概述 本文描述NR多连接处理流程。 2 辅节点添加Secondary Node Addition 2.1 EN-DC en-gNB由gNB-CU和gNB-DU组成&#xff0c;下图给出了EN-DC中SgNB的添加过程。 图1 SgNB addition procedure in EN-DC MN决定请求SN为特定的E-RAB分配资源&#xff0c;表明E-RAB的特征(E…