机器学习(四)之无监督学习

news2025/1/15 19:50:44

前言:

前面写了监督学习的几种算法,下面就开始无监督啦!
如果文章有错误之处,小伙伴尽情在评论区指出来(嘿嘿),看到就会回复的。

 1.聚类(Clustering)

1.1 概述(Overview of clustering methods)

 

 当这个类有一定形状(图的最上两行),即非平面流体,并且标准的欧式距离不是正确的度量标准时,聚类是非常有用的。

1.2 K-means

1.2.1 概念

通过把样本分离成 n 个具有相同方差的类的方式来对数据进行聚类,最小化一个称为惯量或簇内平方和的准则(见下文)。该算法需要指定簇的数量。它可以很好地扩展到大量样本,并已经在许多不同领域的应用领域被广泛使用。

注:簇和类应该是一样的概念,我们一同使用。

 1.2.2 实现

X_{i}是样本,\displaystyle \mu _{i}是簇心。下面是误差公式:

  1. 输入K和数据集N,tol(阈值)
  2. 随意初始化一个K个样本作为一个簇的中心(质心)
  3. 将离质心近的样本归为一类,计算簇內平方和误差
  4. 计算簇內均值更新质心
  5. 重复3,4步骤直到误差<tol或者到了最大循环次数,跳出循环,返回簇心

 

说明:

这个K-Mean需要调参(比悲伤更悲伤的事) 

n_clusters(K值),

max_iter(最大收敛次数),

n_init(不同的初始化质心运行算法的次数,一般不需要修改,默认是10,如果你的K值较大,可以适当增大),

algorithm:有“auto”, “full” or “elkan”三种选择。"full"就是传统的K-Means算法, “elkan”是elkan K-Means算法。默认的"auto"则会根据数据值是否是稀疏的,来决定如何选择"full"和“elkan”。一般数据是稠密的,那么就是 “elkan”,否则就是"full"。一般来说建议直接用默认的"auto"

1.2.3 代码

import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d

import numpy as np

from sklearn import datasets
from sklearn.cluster import KMeans

np.random.seed(5)
iris=datasets.load_iris()
x=iris.data  #4个特征
y=iris.target

estimators=[
    ('K_means_iris_8',KMeans(n_clusters=8)),
    ('K_means_iris_3',KMeans(n_clusters=3)),
    ('K_means_iris_bad_init',KMeans(n_clusters=3,n_init=1,init='random')),
]
fig=plt.figure(figsize=(10,8))   #指定宽高:画一个1500*1200的图
titles=["8 clusters","3 clusters","3 clusters,bad initialization"]
for idx,((name,est),title) in enumerate(zip(estimators,titles)):  #使用每个不同 的方法进行训练和画图
    ax=fig.add_subplot(2,2,idx+1,projection="3d",elev=48,azim=134)
    est.fit(x)
    labels=est.labels_
    ax.scatter(x[:,3],x[:,0],x[:,2],c=labels.astype(float),edgecolor='k')  #取了三个特征进行画图
    ax.xaxis.set_ticklabels([])
    ax.yaxis.set_ticklabels([])
    ax.zaxis.set_ticklabels([])
    ax.set_xlabel('Patel width')
    ax.set_ylabel('Sepal length')
    ax.set_zlabel('Patel length')
    ax.set_title(title)

ax=fig.add_subplot(2,2,4,projection='3d',elev=48,azim=134)  #增加一个子图
for name,label in [("Setosa", 0), ("Versicolour", 1), ("Virginica", 2)]:
    ax.text3D(
        x[y==label, 3].mean(),   ###x[y==label, 3]中间有个空格,我找了半个小时!!!
        x[y==label, 0].mean(),
        x[y==label, 2].mean()+2,
        name,
        horizontalalignment="center",
        bbox=dict(alpha=0.2,edgecolor='w',facecolor='w'),
    )
ax.scatter(x[:,3],x[:,0],x[:,2],c=y,edgecolor='k')
ax.xaxis.set_ticklabels([])
ax.yaxis.set_ticklabels([])
ax.zaxis.set_ticklabels([])
ax.set_xlabel("Petal width")
ax.set_ylabel("Sepal length")
ax.set_zlabel("Petal length")
ax.set_title("Ground Truth")
plt.subplots_adjust(wspace=0.25,hspace=0.25)
plt.show()

 总结:

从上图中可以看出,K值很大影响了这个簇分的好不好,所以这个很重要。下面这个n_init比上面那个要差一点是因为值太小了。

模型好坏跟参数太息息相关啦!!!

1.2.4 拓展

Mini Batch K-Means:

这个和K-Means差不多,只是每次取小批量的数据进行训练。这些小批量极大减少了收敛到局部解所需的计算量。 与其他降低 k-means 收敛时间的算法相比,小批量 k-means 产生的结果一般只比标准算法略差。

1.3  AP聚类算法(Affinity propagation)

1.3.1 引入

概念:

通过在不同点之间不断的传递信息,从而最终选出聚类中心,完成聚类。

优点:
  1. 不需要指定最终聚类族的个数
  2. 已有数据点作为最终的聚类中心,而不是新生成一个族中心
  3. 模型对数据的初始值不敏感
  4. 对初始相似度矩阵数据的对称性没有要求
  5. 相比与K-centers聚类方法,其结果的平方差误差较小

1.3.2  实现

 好啦,后面有时间再填一些算法。

欢迎大家点赞,收藏!

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

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

相关文章

javaWeb-异常处理和事务管理

异常处理 我们的代码出现异常之后&#xff0c;异常会向上抛出&#xff0c;直到抛给Spring框架&#xff0c;会去响应一个错误结果 我们要想处理异常&#xff0c;可以在Controller的方法中去捕获异常&#xff0c;但这样做很繁琐&#xff0c;常常我们会定义一个全局异常处理器来…

每日两题 / 438. 找到字符串中所有字母异位词 238. 除自身以外数组的乘积(LeetCode热题100)

438. 找到字符串中所有字母异位词 - 力扣&#xff08;LeetCode&#xff09; 记录p串每个字符出现次数 维护与p串等长的滑动窗口&#xff0c;记录其中每个字符的出现次数 每次滑动后将当前次数与p串的次数比较即可 class Solution { public:vector<int> findAnagrams(s…

Java——继承与组合

和继承类似, 组合也是一种表达类之间关系的方式, 也是能够达到代码重用的效果。组合并没有涉及到特殊的语法 (诸如 extends 这样的关键字), 仅仅是将一个类的实例作为另外一个类的字段。 继承表示对象之间是is-a的关系&#xff0c;比如&#xff1a;狗是动物&#xff0c;猫是动…

API接口的用途以及接入示例

API接口的主要用途是允许不同的软件系统之间进行通信和数据交换。具体来说&#xff0c;API接口可以用于以下几个方面&#xff1a; 数据传输和交换&#xff1a;API接口可以用于不同系统之间的数据传输和交换&#xff0c;例如将数据从一个系统传递到另一个系统&#xff0c;或者从…

Modbus转Profinet网关接称重设备与工控机通讯

Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;是一种能够实现Modbus协议和Profinet协议之间转换的设备。Modbus转Profinet网关可提供单个或多个RS485接口&#xff0c;使得不同设备之间可以顺利进行通信&#xff0c;进一步提升了工业自动化程度。 通过使用Modbus转Pr…

Linux加强篇-Vim编辑器

目录 ⛳️推荐 Vim文本编辑器 编写简单文档 配置主机名称 配置网卡信息 配置软件仓库 ⛳️推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站 Vim文本编辑器 在Linux系统中一切都…

嵌入式面试-回答UART

说明&#xff1a; 此文章是在阅读了一些列面试相关资料之后对于一些常见问题的整理&#xff0c;主要针对的是嵌入式软件面试中涉及到的问答&#xff0c;努力精准的抓住重点进行描述。若有不足非常欢迎指出&#xff0c;感谢&#xff01;在总结过程中有些答案没标记参考来源&…

【Camera Sensor Driver笔记】五、点亮指南之Actuator配置

<slaveInfo> actuatorName dw9714v dirver IC 型号 slaveAddress 0x18 i2c write address i2cFrequencyMode FAST i2c 操作频率(400KHz) actuatorType VCM/BIVCM 马达类型 BIVCM&#xff08;中置马达&#xff…

一个小时学习javaScript

1 简介 1.1 什么是javascript JavaScript 是一种广泛使用的编程语言&#xff0c;最初被设计来增加网页的交互性&#xff0c;让用户能够与网页上的元素进行互动。自从1995年被引入以来&#xff0c;JavaScript已经发展成为Web开发中不可或缺的一部分&#xff0c;并且其用途已经…

qdbus

qdbus ## 一些简单的使用<font color red>(重要)QtDBus编程1、创建服务并创建对象2、通过QDBusMessage访问Service3、通过QDBusInterface 访问Service4、从D-Bus XML自动生成Proxy类5、使用Adapter注册Object6、自动启动Service qdbus是对dbus的进一步封装&#xff0c;d…

MS1000TA超声波测量模拟前端

产品简述 MS1000TA 是一款超声波测量模拟前端芯片&#xff0c;广 泛应用于汽车工业和消费类电子。该芯片具有高度 的灵活性&#xff0c;发射脉冲个数、频率、增益及信号阈值 均可配置。同时&#xff0c;接收通道参数也可以灵活配置&#xff0c; 从而适用于不同尺寸容器、不…

qt;lt;等xml|Html转义字符

在写Android布局文件时&#xff0c;左右尖括号<>&#xff0c;括号在XML中没办法直接使用&#xff0c;需要进行转义&#xff0c;收集一些转义符&#xff0c;以便查询使用。 常用表&#xff1a; **对于文章出现的任何问题请大家批评指出&#xff0c;一定及时修改 **可联系…

DOM4标准的事件监听与滚屏优化

EventTarget.addEventListener() 我们在学习addEventListener()时都只是知道它是用来给事件注册事件处理函数的。但是这种描述并不是很准确&#xff0c;MDN上给我们准确的描述了它的定义。EventTarget.addEventListener()方法将指定的监听器注册到EventTarget上&#xff0c;当…

ROS1 驱动USB摄像头 2024年亲测

安装 查看官网文档A ROS Driver for V4L USB Cameras 里面提供了github链接&#xff0c;链接如下&#xff0c;这里要选择develop分支 将这个文件包放到你的工作空间的src目录下&#xff0c;然后回到工作空间编译catkin_make 此时报错no package libv4l2 found 参考stack ov…

SpringCloud知识01

1、数据库创建选择 2、定时任务的实现方式 3、分片原理 4、框架图 5、XXL-Job报错Logback configuration error detected 解决&#xff1a; &#xff08;1&#xff09; <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-bo…

莫名锁表? --- mysql的事务隔离级别

前言 系统响应超时 系统访问数据库特别慢 莫名提示锁等待超时 数据库锁表 事务长时间等锁&#xff0c;直到超时 以上问题都可能是事务锁表导致的 问题 今天测试反馈系统批量处理莫名提示锁等待超时&#xff0c;再次操作查看数据库事务确实存在等锁情况&#xff0c;甚至死锁。…

SpringMVC请求和响应方式

1. SpringMVC的数据响应 1.1 SpringMVC的数据响应方式 页面跳转&#xff1a; 直接返回字符串通过ModelAndView对象返回 回写数据&#xff1a; 直接返回字符串返回对象或集合 1.2 页面跳转 - 直接返回字符串 1.3 页面跳转 - 通过ModelAndView对象返回 1.4 页面跳转 - 传递参数…

ZNS SSD+F2FS文件系统|如何降低GC开销?---1

ZNS出现的背景是什么&#xff1f;ZNS SSD的原理是把namespace空间划分多个zone空间&#xff0c;zone空间内部执行顺序读写。 在ZNS的场景下&#xff0c;不同应用按照Zone配置信息&#xff0c;相应存放业务数据。由于是Host管理数据的摆放和存取位置&#xff0c;会最大程度减少G…

制作识货的商品购买页面(注释加讲解)

在制作此页面时运用了浮动&#xff0c;绝对定位&#xff0c;固定定位&#xff0c;相对定位。这些可以让页面整洁美观。 商品购买页面里有很多的商品可大家观看最上面的搜索栏里可以打字下面的&#xff0c;首页&#xff0c;优惠&#xff0c;识物&#xff0c;登录注册都可以进行…

uniapp H5的弹窗滚动穿透解决

目录 方案一 事件修饰符 overscroll-behavior 修饰符 overscroll-behavior 属性 看个案例 兼容 方案二 overflow&#xff1a;hiden 有一层遮罩蒙层覆盖在body上时&#xff0c;当我们滚动遮罩层&#xff0c;它下面的内容也会跟着一起滚动&#xff0c;看起来好像是上面的…