大数据项目13(python实现聚类算法)(代码片段)

晨沉宸辰 晨沉宸辰     2022-12-18     540

关键词:

一、k-means 聚类算法思想

先随机选择k个聚类中心,把集合里的元素与最近的聚类中心聚为一类,得到一次聚类,再把每一个类的均值作为新的聚类中心重新聚类,迭代n次得到最终结果

1. 分步解析

  1. 初始化聚类中心
    首先随机选择集合里的一个元素作为第一个聚类中心放入容器,选择距离第一个聚类中心最远的一个元素作为第二个聚类中心放入容器,第三、四、、、N个同理,为了优化可以选择距离开方做为评判标准

  2. 迭代聚类
    依次把集合里的元素与距离最近的聚类中心分为一类,放到对应该聚类中心的新的容器,一次聚类完成后求出新容器里个类的均值,对该类对应的聚类中心进行更新,再次进行聚类操作,迭代n次得到理想的结果

  3. 可视化展示
    利用 python 第三方库中的可视化工具 matplotlib.pyplot 对聚类后的元素显示(散点图),方便查看结果

2. 代码

import numpy as np
import matplotlib.pyplot as plt

# 两点距离
def distance(e1, e2):
    return np.sqrt((e1[0]-e2[0])**2+(e1[1]-e2[1])**2)

# 集合中心
def means(arr):
    return np.array([np.mean([e[0] for e in arr]), np.mean([e[1] for e in arr])])

# arr中距离a最远的元素,用于初始化聚类中心
def farthest(k_arr, arr):
    f = [0, 0]
    max_d = 0
    for e in arr:
        d = 0
        for i in range(k_arr.__len__()):
            d = d + np.sqrt(distance(k_arr[i], e))
        if d > max_d:
            max_d = d
            f = e
    return f

# arr中距离a最近的元素,用于聚类
def closest(a, arr):
    c = arr[1]
    min_d = distance(a, arr[1])
    arr = arr[1:]
    for e in arr:
        d = distance(a, e)
        if d < min_d:
            min_d = d
            c = e
    return c


if __name__=="__main__":
    ## 生成二维随机坐标,手上有数据集的朋友注意,理解arr改起来就很容易了
    ## arr是一个数组,每个元素都是一个二元组,代表着一个坐标
    ## arr形如:[ (x1, y1), (x2, y2), (x3, y3) ... ]
    arr = np.random.randint(100, size=(100, 1, 2))[:, 0, :]

    ## 初始化聚类中心和聚类容器
    m = 5
    r = np.random.randint(arr.__len__() - 1)
    k_arr = np.array([arr[r]])
    cla_arr = [[]]
    for i in range(m-1):
        k = farthest(k_arr, arr)
        k_arr = np.concatenate([k_arr, np.array([k])])
        cla_arr.append([])

    ## 迭代聚类
    n = 20
    cla_temp = cla_arr
    for i in range(n):    # 迭代n次
        for e in arr:    # 把集合里每一个元素聚到最近的类
            ki = 0        # 假定距离第一个中心最近
            min_d = distance(e, k_arr[ki])
            for j in range(1, k_arr.__len__()):
                if distance(e, k_arr[j]) < min_d:    # 找到更近的聚类中心
                    min_d = distance(e, k_arr[j])
                    ki = j
            cla_temp[ki].append(e)
        # 迭代更新聚类中心
        for k in range(k_arr.__len__()):
            if n - 1 == i:
                break
            k_arr[k] = means(cla_temp[k])
            cla_temp[k] = []

    ## 可视化展示
    col = ['HotPink', 'Aqua', 'Chartreuse', 'yellow', 'LightSalmon']
    for i in range(m):
        plt.scatter(k_arr[i][0], k_arr[i][1], linewidth=10, color=col[i])
        plt.scatter([e[0] for e in cla_temp[i]], [e[1] for e in cla_temp[i]], color=col[i])
    plt.show()

3.结果

客快物流大数据项目(六十七):客户主题(代码片段)

文章目录客户主题一、背景介绍​​​​​​​二、指标明细三、​​​​​​​表关联关系1、​​​​​​​事实表2、​​​​​​​​​​​​​​维度表3、​​​​​​​​​​​​​​关联关系四、客户数据拉宽开发... 查看详情

客快物流大数据项目(七十二):impalasql语法(代码片段)

文章目录Impalasql语法一、数据库特定语言1、创建数据库2、删除数据库二、​​​​​​​表特定语句1、createtable语句2、insert语句3、select语句4、describe语句5、altertable6、delete、truncatetable7、view视图8、orderby子句9、groupby子句10、ha... 查看详情

基于echarts实现大数据项目实战一可视化分析(代码片段)

目录一、业务需求分析二、web系统数据处理服务层开发三、基于WebSocket协议的数据推送服务开发四、基于Echart框架的页面展示层开发五、运行展示一、业务需求分析根据业务需求,我们需要将spark处理过的数据写入到mysql数据... 查看详情

客快物流大数据项目(九十六):clickhouse的versionedcollapsingmergetree深入了解(代码片段)

文章目录ClickHouse的VersionedCollapsingMergeTree深入了解一、创建VersionedCollapsingMergeTree引擎表的语法二、折叠数据三、使用示例ClickHouse的VersionedCollapsingMergeTree深入了解该引擎继承自 MergeTree 并将折叠行的逻辑添加到合并数据部分的算... 查看详情

客快物流大数据项目(一百零二):业务和指数开发(代码片段)

文章目录业务和指数开发一、业务开发二、​​​​​​​​​​​​​​指标开发1、​​​​​​​​​​​​​​总网点数2、​​​​​​​各省份网点数3、​​​​​​​​​​​​​​各省份收件总单数4、各地区收... 查看详情

助力工业物联网,工业大数据项目介绍及环境构建(代码片段)

文章目录工业大数据项目介绍及环境构建01:专栏目标02:项目背景03:项目需求04:业务流程05:技术选型06:Docker的介绍07:Docker的网络08:Docker的使用09:Oracle的介绍10:集群软件规划11࿱... 查看详情

新手实践小项目--大数加减类的实现(c++实现)✨(代码片段)

文章目录为什么需要大数加减类?大数加减类实现详解一、流程图总览二、成员数据和构造函数详解三、(算法核心)静态成员函数和运算符重载详解staticSwap()staticcompare()staticisEqual()(*核心算法)staticadd()(*核心算法)staticminus()char&... 查看详情

大数据项目之电商数仓-用户行为数据采集(代码片段)

数据仓库简介数据仓库是为企业所有决策制定过程,提供所有系统数据支持的战略集合,通过数据仓库中的数据的分析,可以帮助企业改进业务流程、控制成本、提高产品质量等。项目需求实时采集买点的用户行为数... 查看详情

大数据分析师题库整理(partone)

Day0116.下列哪个属性是hdfs-site.xml中的配置dfs.replication17.以下不属于监督学习模型的是关联分析18.以下四项指标中,不能用于线性回归中的模型比较的是R方19.以下选项不属于原始数据来源的是统计年鉴20.以下选项哪个不属于分... 查看详情

大数据项目(基于spark)--新冠疫情防控指挥作战平台项目(代码片段)

大数据项目(基于spark)–新冠疫情防控指挥作战平台项目文章目录第一章项目介绍1.1项目背景1.2项目架构1.3项目截图1.4功能模块第二章数据爬取2.1数据清单2.2疫情数据爬取2.2.1环境准备2.2.1.1pom.xml2.2.1.2application.properties2.2... 查看详情

k-means聚类算法及python代码实现(代码片段)

K-means聚类算法(事先数据并没有类别之分!所有的数据都是一样的)1、概述K-means算法是集简单和经典于一身的基于距离的聚类算法采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度就越大。该算法认为类... 查看详情

我应该将哪个库用于大数据项目[关闭]

】我应该将哪个库用于大数据项目[关闭]【英文标题】:whichlibraryshouldIuseforbigdataproject[closed]【发布时间】:2013-11-2405:29:55【问题描述】:该项目旨在使用大数据技术分析患者的疾病细胞,以表明哪些治疗可以产生最好的结果和... 查看详情

机器学习:python实现聚类算法之总结(代码片段)

...以后续的几种聚类方法不再详细讲解原理,也不再写python实现的源代码,只介绍下算法的基本思路,使大家对每种算法有个直观的印象,从而可以更好的理解函数中参数的意义及作用,而重点是放在如何使用... 查看详情

助力工业物联网,工业大数据项目介绍及环境构建(代码片段)

文章目录工业大数据项目介绍及环境构建01:专栏目标02:项目背景03:项目需求04:业务流程05:技术选型06:Docker的介绍07:Docker的网络08:Docker的使用09:Oracle的介绍10:集群软件规划11࿱... 查看详情

客快物流大数据项目(四十二):java代码操作kudu(代码片段)

目录Java代码操作Kudu一、构建maven工程二、导入依赖三、​​​​​​​创建包结构四、​​​​​​​初始化方法五、​​​​​​​创建表六、​​​​​​​插入数据七、​​​​​​​查询数据八、修改数据九、​​​... 查看详情

数据挖掘学习——som网络聚类算法+python代码实现(代码片段)

目录1.SOM简述2.SOM训练过程(1)初始化(2)采样(抽取样本点)(3)竞争(4)合作和适应(更新权重值)(5)重复3.python代码实现(1)初始化(2 查看详情

客快物流大数据项目(八十九):clickhouse的数据类型支持(代码片段)

文章目录ClickHouse的数据类型支持一、整型二、​​​​​​​浮点型三、​​​​​​​​​​​​​​Decimal四、布尔型五、字符串类型六、​​​​​​​​​​​​​​UUID七、​​​​​​​Date类型八、​​​​​​​Da... 查看详情

大数据项目8(sklearn决策树)

决策树一、了解什么是决策树二、决策树模型三、决策树-信息增益四、信息增益比五、ID3算法六、决策树的剪枝一、了解什么是决策树分类分类树:分类标签值(天气?是否垃圾网页?)定性决策树:定... 查看详情