秒懂算法 | 基于K-Means算法的汽车行驶运动学片段的分类

简介: 汽车在行进过程中会产生连续的一组数据,包含加速度,速度等参数,汽车形式运动学片段是指是从一个怠速开始到下一个怠速开始之间的运动行程,通常包括一个怠速部分和一个行驶部分。而怠速指的是汽车停止运动,但发动机保持最低转速运转的连续过程。行驶部分通常包含加速、巡航和减速三种运动模式。

640.jpg


如图1所示为汽车行进过程中产生的数据,图2为一个汽车行驶运动学的片段。

image.png

■ 图1 汽车行进中产生的数据

640.jpg


■ 图2 运动学片段


本文的任务是将汽车行进的数据切分为一个个的运动学片段,再对这些运动学片段进行分类,从而获得每一类运动学片段的代表片段,合成汽车工况。

01、基于K-Means的汽车行驶运动学片段分类

下面用K-Means来对运动学片段进行聚类。聚类时关键的一点在聚类数目的选取上,本文将采取两种方案来对聚类数目进行选取,如代码清单1所示。首先是定义并计算SSE的函数,并绘制出随着聚类数目变化,SSE变化的折线图。

代码清单1 绘制SSE变化曲线图函数

def getSSE(input):
    # 存储不同簇数的SSE值
    distortions = []
    for i in range(1, 11):
        km = KMeans(n_clusters=i, init="k-means++", n_init=10, max_iter=300, tol=1e-4, random_state=0)
        km.fit(input)
        distortions.append(km.inertia_)
    # 绘制结果
    plt.plot(range(1, 11), distortions, marker='o')
    plt.xlabel("Cluster_num")
    plt.ylabel("SSE")
    plt.show()

由于原始数据中,不同特征的量纲不尽相同,如果使用原始数据直接进行聚类,会存在量纲不一致的问题,即数字较大的特征会对模型产生较大影响,因此在进行聚类之前,还需要进行数据归一化的处理,如代码清单2修改main函数为

代码清单2 主函数1

if __name__ == "__main__":
    feature = cutPart()
    scaler = preprocessing.StandardScaler().fit(feature)
    feature = scaler.transform(feature)
    getSSE(feature)

运行main函数,可得SSE变化图如图3所示。

640.jpg


■ 图3 SSE随聚类数目变化折线图

如图3所示,随着聚类数目增多,并没有出现及其明显的手肘,但通过观察可得,当聚类数目为2或3时,误差下降的幅度是最为明显的,从4开始往后,基本上就处于线性递减的状态。因此,最优的聚类数目可能为2、3、4中的某一个。

下面通过轮廓图从另一个角度进行分析。首先是绘制轮廓图有关的函数,如代码清单2所示。

代码清单2 绘制轮廓图函数

def getSilehotte(input, n_cluster):
    km = KMeans(n_clusters=n_cluster, init="k-means++", n_init=10, max_iter=300, tol=1e-4, random_state=0)
    y_km = km.fit_predict(input, n_cluster)
    # 获取簇的标号
    cluster_labels = np.unique(y_km)
    silehoutte_vals = silhouette_samples(input, y_km, metric="euclidean")
    y_ax_lower, y_ax_upper = 0, 0
    y_ticks = []
    for i, c in enumerate(cluster_labels):
        # 获得不同簇的轮廓系数
        c_silhouette_vals = silehoutte_vals[y_km == c]
        c_silhouette_vals.sort()
        y_ax_upper += len(c_silhouette_vals)
        color = cm.jet(i / n_cluster)
        plt.barh(range(y_ax_lower, y_ax_upper), c_silhouette_vals, height=1.0, edgecolor="none", color=color)
        y_ticks.append((y_ax_lower + y_ax_upper) / 2)
        y_ax_lower += len(c_silhouette_vals)

    silehoutte_avg = np.mean(silehoutte_vals)
    plt.axvline(silehoutte_avg, color="red", linestyle="--")
    plt.yticks(y_ticks, cluster_labels + 1)
    plt.ylabel("Cluster")
    plt.xlabel("Silehotte_value")
plt.show()

该函数的输入为特征以及聚类数目,每个聚类数目可得一个轮廓图。如代码清单3修改main函数为

代码清单3 主函数2

if __name__ == "__main__":
    feature = cutPart()
    scaler = preprocessing.StandardScaler().fit(feature)
    feature = scaler.transform(feature)
    getSilehotte(feature, 2)
    getSilehotte(feature, 3)
    getSilehotte(feature, 4)

分别绘制聚类数目为2、3、4时的轮廓图帮助后期分析,运行脚本可得如图4、图5、图6所示。

640.jpg


■ 图4 聚类数目为2时轮廓图

640.jpg


■ 图5 聚类数目为3时轮廓图

640.jpg


■ 图6 聚类数目为4时轮廓图

如图4、图5、图6所示,当聚类个数为2时,轮廓系数表现不错,说明可以有效地聚类。当聚类数目上升到3时,第一类开始出现负值,即聚类效果开始下降,进一步上升到4时,出现了严重的数目不均等,第4类的数目远远小于前三类,基于对轮廓图的分析,可以选择聚类数目为2或者3。

倘若将运动学片段分为3类,并对每一类进行分析,可以发现这三类中,第1类平均速度最高,怠速时间比例最低,代表在畅通路段行驶的工况;第3类平均车速最低,怠速时间比例最高,代表拥堵路段行驶的工况;第2类代表一般工况。

对每一类按照距离聚类中心的距离从小到大进行排序,就可以得到每一类的典型运动学片段。在将这些运动学片段进行组合,就可以最终获得汽车行驶工况。

如图7所示为基于K-Means方法合成的汽车行驶工况。

640.jpg

■ 图7 合成代表工况

目录
相关文章
|
4月前
|
数据采集 机器学习/深度学习 算法
|
24天前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
76 4
|
4月前
|
数据采集 机器学习/深度学习 算法
【优秀设计案例】基于K-Means聚类算法的球员数据聚类分析设计与实现
本文通过K-Means聚类算法对NBA球员数据进行聚类分析,旨在揭示球员间的相似性和差异性,为球队管理、战术决策和球员评估提供数据支持,并通过特征工程和结果可视化深入理解球员表现和潜力。
171 1
【优秀设计案例】基于K-Means聚类算法的球员数据聚类分析设计与实现
|
4月前
|
数据采集 算法 数据可视化
基于Python的k-means聚类分析算法的实现与应用,可以用在电商评论、招聘信息等各个领域的文本聚类及指标聚类,效果很好
本文介绍了基于Python实现的k-means聚类分析算法,并通过微博考研话题的数据清洗、聚类数量评估、聚类分析实现与结果可视化等步骤,展示了该算法在文本聚类领域的应用效果。
137 1
|
2月前
|
监控 算法 数据安全/隐私保护
基于三帧差算法的运动目标检测系统FPGA实现,包含testbench和MATLAB辅助验证程序
本项目展示了基于FPGA与MATLAB实现的三帧差算法运动目标检测。使用Vivado 2019.2和MATLAB 2022a开发环境,通过对比连续三帧图像的像素值变化,有效识别运动区域。项目包括完整无水印的运行效果预览、详细中文注释的代码及操作步骤视频,适合学习和研究。
|
3月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
110 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
2月前
|
存储 缓存 分布式计算
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
这篇文章是关于数据结构与算法的学习指南,涵盖了数据结构的分类、数据结构与算法的关系、实际编程中遇到的问题以及几个经典的算法面试题。
40 0
数据结构与算法学习一:学习前的准备,数据结构的分类,数据结构与算法的关系,实际编程中遇到的问题,几个经典算法问题
|
2月前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
29 0
|
3月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
55 9
|
4月前
|
数据采集 机器学习/深度学习 算法
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
【python】python客户信息审计风险决策树算法分类预测(源码+数据集+论文)【独一无二】
下一篇
DataWorks