聚类算法实现之KMeans

K-means算法简述

K-means算法是机器学习中一种常用的非监督聚类算法,数据通常只有特征值,没有目标值,K-means算法通过提前设置的质点K值,可以把数据划分为各个不同的种类,简单来说,就是物以类聚,人以群分。

  • 图片说明
  • (a)获取样本数据
  • (b)随机选定2个质点,此时令K=2
  • (c)计算每一个样本点到两个质点之间的欧氏距离,并将样本点归到最近距离的质点中
  • (d)经过c步骤的计算,数据被划分为“红”和“蓝”两类,然后计算每一类所有样本点的平均值,得到的平均值为新一轮的质点
  • (e)重复c步骤:重新计算所有样本点到两个新质点之间的欧式距离,并将样本点归到最近距离的质点中,继续划分所有的样本点,计算平均值…
    经过若干次迭代之后,当两个质点的位置不再变化时,就完成了对数据的聚类
在此之前,K值为重要的超参数,K值的不同决定了聚类结果的好坏,因此要事先定义好K的值

接下来我们用python3代码实现一个简单的Kmeans

import pandas as pd
data_csv = pd.read_excel('D:/Software Setup/ChromeCore/ChromeCore,Downloads/test.xlsx') # 读入数据文件
print(data_csv)

在这里插入图片描述
*

如果特征比较多的话,可以考虑使用sklearn中的特征选择API:VarianceThreshold或者主成分分析PCA对特征进行删除和降维,此次实验数据只有四个特征,所以就不进行处理了

from sklearn.cluster import KMeans
data_x = data_csv[["calories", "sodium", "alcohol", "cost"]] # 提取特征

km = KMeans(n_clusters=2)# 设置K值为2
km.fit(data_x) # 训练数据,由于sklearn封装的比较完善,所有的计算过程都在这个API里面
predict_x = km.predict(data_x) # 划分数据点的类别
print(predict_x)

结果为:[0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 1 0 0 1 1]

# 显示结果
import matplotlib.pyplot as plt
plt.figure(figsize=(10,10)) # 显示画板大小
# 建立一个列表,里面包含两个颜色
color_data = ['red','blue']
# 将数据点的类别转换成相应的颜色
color_x = [color_data[i] for i in predict_x]
# 用散点图显示出其中两个特征的结果
plt.scatter(data_x.values[:,3],data_x.values[:,0],color = color_x)
plt.xlabel("cost") # x轴标签
plt.ylabel("calories") # y轴标签
plt.show()

在这里插入图片描述
选择的特征的不同显示出的结果也不一样,因为维度问题,无法显示过多特征。

  • 由于K-means的数据没有目标值,所以无法像其他监督学习那样得到具体的准确率或者是召回率。不过K-means也有自己的评估指标,它就是轮廓系数,计算公式是:
  • 在这里插入图片描述
  • 每个点 i 为已聚类数据中的样本点,bi为 i 样本点到其他族群的所有样本的距离最小值,ai为 i 到本身类所有点的距离平均值
  • 最终计算出所有的样本点的轮廓系数平均值
  • 根据公式可知最终的轮廓系数的平均值在-1和1之间,所以测试的结果越靠近1就说明聚类的效果越好,也代表内聚度和分离度较为完善,而越趋近于-1,效果越不好。

接下来介绍评估算法的API
sklearn.metrics.silhouette_score(X,labels)

  • 参数X为特征值
  • labels是划分后的目标值
# 评估模型
from sklearn.metrics import silhouette_score
print(silhouette_score(data_x,predict_x))

运行结果是:0.6917656034079486

这样的效果已经很不错了
当然这是K值为2的时候评判的结果,也可以试试当K等于3或者是4的情况,这里就不过多的赘述了。

标题“51单片机通过MPU6050-DMP获取姿态角例程”解析 “51单片机通过MPU6050-DMP获取姿态角例程”是一个基于51系列单片机(一种常见的8位微控制器)的程序示例,用于读取MPU6050传感器的数据,并通过其内置的数字运动处理器(DMP)计算设备的姿态角(如倾斜角度、旋转角度等)。MPU6050是一款集成三轴加速度计和三轴陀螺仪的六自由度传感器,广泛应用于运动控制和姿态检测领域。该例程利用MPU6050的DMP功能,由DMP处理复杂的运动学算法,例如姿态融合,将加速度计和陀螺仪的数据进行整合,从而提供稳定且实时的姿态估计,减轻主控MCU的计算负担。最终,姿态角数据通过LCD1602显示屏以字符形式可视化展示,为用户提供直观的反馈。 从标签“51单片机 6050”可知,该项目主要涉及51单片机和MPU6050传感器这两个关键硬件组件。51单片机基于8051内核,因编程简单、成本低而被广泛应用;MPU6050作为惯性测量单元(IMU),可测量设备的线性和角速度。文件名“51-DMP-NET”可能表示这是一个与51单片机及DMP相关的网络资源或代码库,其中可能包含C语言等适合51单片机的编程语言的源代码、配置文件、用户手册、示例程序,以及可能的调试工具或IDE项目文件。 实现该项目需以下步骤:首先是硬件连接,将51单片机与MPU6050通过I2C接口正确连接,同时将LCD1602连接到51单片机的串行数据线和控制线上;接着是初始化设置,配置51单片机的I/O端口,初始化I2C通信协议,设置MPU6050的工作模式和数据输出速率;然后是DMP配置,启用MPU6050的DMP功能,加载预编译的DMP固件,并设置DMP输出数据的中断;之后是数据读取,通过中断服务程序从DMP接收姿态角数据,数据通常以四元数或欧拉角形式呈现;再接着是数据显示,将姿态角数据转换为可读的度数格
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值