AI K-means算法对数据进行聚类分析-实验报告

简介: AI K-means算法对数据进行聚类分析-实验报告

1、 问题描述及实验要求


K-means算法对data中数据进行聚类分析

(1)算法原理描述

(2)算法结构

(3)写出K-means具体功能函数(不能直接调用sklearn.cluster(Means)功能函数)具体函数功能中返回值包括 数据类标签,累中心,输入包括:数据,类别数

(4)可视化画图,不同类数据采用不同颜色

(5)算法分析

类类方差,平均方差,不同初始点对聚类结果的影响?

如何解决?

2、 算法原理描述


K-means算法原理:

1、首先输入分组k 的值,即通过指定分组数目得到 k 个分组;

2、从数据集中随机选取 k 个数据点作为初始中心;

3、对集合中每一数据点,计算与每一个中心点的距离,离哪个中心点距离近,就加入中心点对应的组。

4、对k个组计算距离的平均值

5、如果两次求得的均值距离小于某一个设置的阈值(表示重新计算的质心的位置变化不大,趋于稳定,或者说收敛),可以认为我们进行的聚类已经达到期望的结果,算法终止。

6、果两次求得的均值距离大于某一个设置的阈值,继续迭代,如果迭代次数大于设定的值,那么终止。

3、 算法结构


1) 首先定义了一个类:K_Means,该类中有5个属性以及2个方法。5个属性包括:k是分组数,tolerance最小误差,max_iter最大迭代次数,centers_存放中心点坐标,clf_存放分组坐标;2个方法是:_init_构造函数,fit执行迭代。

2) 对于fit函数。首先从数据集data中取出k个点作为中心点,然后遍历数据集中的每个点,计算这个点与k个中心点坐标的距离,把最小的距离添加到对应的分组中去。然后根据k个分组的内容,更新出k个新的中心点坐标,与上一次中心点坐标比对,如果误差值都小于设定值,那么结束,如果不小于,那么继续迭代,如果迭代超过了指定次数,那么也停止。

4、 K-means算法代码


总代码在文末

class K_Means(object):
    def __init__(self, k=2, tolerance=0.0001, max_iter=300):
        self.k_ = k
        self.tolerance_ = tolerance
        self.max_iter_ = max_iter
    def fit(self, data):
        self.centers_ = {}
        for i in range(self.k_):
            self.centers_[i] = data[i]
        for i in range(self.max_iter_):
            self.clf_ = {}
            for i in range(self.k_):
                self.clf_[i] = []
            for feature in data:
                distances = []
                for center in self.centers_:
                    distances.append(np.linalg.norm(feature - self.centers_[center]))
                classification = distances.index(min(distances))
                self.clf_[classification].append(feature)
            prev_centers = dict(self.centers_)
            for c in self.clf_:
                self.centers_[c] = np.average(self.clf_[c], axis=0)
            optimized = True
            for center in self.centers_:
                org_centers = prev_centers[center]
                cur_centers = self.centers_[center]
                if np.sum((cur_centers - org_centers) / org_centers * 100.0) > self.tolerance_:
                    optimized = False
            if optimized:
                break

5、 实验结果


实验结果截图:

image.png

图1-散点图观察特征

image.png

图2-聚类分析图

6、 算法分析


如果想看初始点、方差等对结果的影响,可以采用初中最常用的控制变量法:

①算法相同,初始点对结果的影响:

image.png

结论1:可以看出,初始点选取的不同,中心点的坐标会有略微变化(不应该一一对应)

②初始点相同,类间方差与平均方差对结果的影响:

image.png

**结论2:**可以看出,算法的不同,中心点的坐标会有略微变化(不应该一一对应)

总结论:(如果没有发生偶然性)**对于中心点的不同选择、算法不同的选择,都会导致结果产生一些改变。**由于结果是由各个分组算出来的均值,所以也意味着:对于中心点的不同选择、算法不同的选择,都会导致分组划分不一样。

7、 所有代码


import numpy as np
from matplotlib import pyplot as plt
plt.rcParams['font.family'] = ['Microsoft YaHei']
class K_Means(object):
    def __init__(self, k=2, tolerance=0.0001, max_iter=300):
        self.k_ = k
        self.tolerance_ = tolerance
        self.max_iter_ = max_iter
    def fit(self, data):
        self.centers_ = {}
        for i in range(self.k_):
            self.centers_[i] = data[i+19]
        for i in range(self.max_iter_):
            self.clf_ = {}
            for i in range(self.k_):
                self.clf_[i] = []
            for feature in data:
                distances = []
                for center in self.centers_:
                    distances.append(np.linalg.norm(feature - self.centers_[center]))
                classification = distances.index(min(distances))
                self.clf_[classification].append(feature)
            prev_centers = dict(self.centers_)
            for c in self.clf_:
                self.centers_[c] = np.average(self.clf_[c], axis=0)
            optimized = True
            for center in self.centers_:
                org_centers = prev_centers[center]
                cur_centers = self.centers_[center]
                if np.sum((cur_centers - org_centers) / org_centers * 100.0) > self.tolerance_:
                    optimized = False
            if optimized:
                break
# 读取data.txt里面的值
data = np.loadtxt('data.txt', dtype=float, delimiter=" ")
X = data[..., 0]
Y = data[..., 1]
plt.title("散点图观察特诊")
plt.xlabel("X轴")
plt.ylabel("Y轴")
plt.plot(X, Y, 'ob')
plt.show()
if __name__ == '__main__':
    k_means = K_Means(k=4)
    k_means.fit(data)
    print(k_means.centers_)
    rgb = ['r', 'g', 'b', 'y']
    for center in k_means.centers_:
        plt.scatter(k_means.centers_[center][0], k_means.centers_[center][1], marker='*', s=150)
    for cat in k_means.clf_:
        for point in k_means.clf_[cat]:
            plt.scatter(point[0], point[1], c=rgb[cat])
    plt.show()


相关文章
|
9天前
|
传感器 人工智能 监控
智慧电厂AI算法方案
智慧电厂AI算法方案通过深度学习和机器学习技术,实现设备故障预测、发电运行优化、安全监控和环保管理。方案涵盖平台层、展现层、应用层和基础层,具备精准诊断、智能优化、全方位监控等优势,助力电厂提升效率、降低成本、保障安全和环保合规。
智慧电厂AI算法方案
|
21天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
20天前
|
机器学习/深度学习 人工智能 算法
整合海量公共数据,谷歌开源AI统计学专家DataGemma
【10月更文挑战第28天】谷歌近期开源了DataGemma,一款AI统计学专家工具,旨在帮助用户轻松整合和利用海量公共数据。DataGemma不仅提供便捷的数据访问和处理功能,还具备强大的数据分析能力,支持描述性统计、回归分析和聚类分析等。其开源性质和广泛的数据来源使其成为AI研究和应用的重要工具,有助于加速研究进展和推动数据共享。
47 6
|
5天前
|
机器学习/深度学习 传感器 人工智能
智慧无人机AI算法方案
智慧无人机AI算法方案通过集成先进的AI技术和多传感器融合,实现了无人机的自主飞行、智能避障、高效数据处理及多机协同作业,显著提升了无人机在复杂环境下的作业能力和安全性。该方案广泛应用于航拍测绘、巡检监测、应急救援和物流配送等领域,能够有效降低人工成本,提高任务执行效率和数据处理速度。
智慧无人机AI算法方案
|
9天前
|
传感器 人工智能 监控
智慧化工厂AI算法方案
智慧化工厂AI算法方案针对化工行业生产过程中的安全风险、效率瓶颈、环保压力和数据管理不足等问题,通过深度学习、大数据分析等技术,实现生产过程的实时监控与优化、设备故障预测与维护、安全预警与应急响应、环保监测与治理优化,全面提升工厂的智能化水平和管理效能。
智慧化工厂AI算法方案
|
20天前
|
存储 人工智能 调度
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
12天前
|
人工智能 自然语言处理 关系型数据库
从数据到智能,一站式带你了解 Data+AI 精选解决方案、特惠权益
从 Data+AI 精选解决方案、特惠权益等,一站式带你了解阿里云瑶池数据库经典的AI产品服务与实践。
|
15天前
|
存储 人工智能 大数据
阿里云吴结生:高性能计算持续创新,响应数据+AI时代的多元化负载需求
在数字化转型的大潮中,每家公司都在积极探索如何利用数据驱动业务增长,而AI技术的快速发展更是加速了这一进程。
|
21天前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
22天前
|
存储 编解码 负载均衡
数据分片算法
【10月更文挑战第25天】不同的数据分片算法适用于不同的应用场景和数据特点,在实际应用中,需要根据具体的业务需求、数据分布情况、系统性能要求等因素综合考虑,选择合适的数据分片算法,以实现数据的高效存储、查询和处理。
下一篇
无影云桌面