当前位置: 首页 > news >正文

python k-means聚类算法 物流分配预测实战(超详细,附源码)

数据集和地图可以点赞关注收藏后私信博主要

聚类是一类机器学习基础算法的总称。

聚类的核心计算过程是将数据对象集合按相似程度划分成多个类,划分得到的每个类称为聚类的簇

聚类不等于分类,其主要区别在于聚类所面对的目标类别是未知的

k-means聚类也称为K均值聚类算法,是典型的聚类算法,对于给定的数据集和需要划分的类数K,算法根据距离函数进行迭代处理,动态 的把数据划分成K个簇,直到收敛为止,簇中心也称为聚类中心

先来个小例子

这个是通过聚类算法对鸢尾花数据集的预测结果

 代码如下

from sklearn.cluster import  KMeans
from sklearn import  datasets
import  numpy as np
iris=datasets.load_iris()
x=iris.data
y=iris.target
clf=KMeans(n_clusters=3)
model=clf.fit(x)
predicted=model.predict(x)
print("预测值",predicted)
print("真实值",y)
print()

 同样地k-means聚类算法广泛地应用于人群分类,图像分割,物种聚类等等问题中

下面以一个物流配送问题为例进行详细讲解

问题描述:双十一期间,物流公司要给某城市的50个客户配送货物,假设公司只有5辆货车,客户的地理坐标在txt文件中,如何配送效率最高

问题分析:使用k-means算法,将地址数据分为5类,由于每一类客户地址相近,可以分配给同一台货车

原地图如下

 

经过聚类分析后结果如下

 很明显根据客户的地址分为5个簇,每个簇由一台货车集中配送

源代码如下

#coding=utf-8
from numpy import *
from matplotlib import pyplot as plt
import matplotlib; matplotlib.use('TkAgg')
def disteclud(veca,vecb):
    return sqrt(sum(power(veca-vecb,2)))
def initcenter(dataset,k):
    print('2.initalize cluster center')
    shape=dataset.shape
    n=shape[1]
    classcenter=array(zeros((k,n)))
    for j in range(n):
        firstk=dataset[:k,j]
        classcenter[:,j]=firstk
    return  classcenter
def mykmeans(dataset,k):
    m=len(dataset)
    clusterpoints=array(zeros((m,2)))
    classCenter=initcenter(dataset,k)
    clusterchanged=True
    print('3.recompute and reallocated')
    while clusterchanged:
        clusterchanged=False
        for i in range(m):
            mindist=inf
            minindex=-1
            for j in range(k):
                distji=disteclud(classCenter[j,:],dataset[i,:])
                if distji<mindist:
                    mindist=distji;minindex=j
            if clusterpoints[i,0]!=minindex:
                clusterchanged=True
            clusterpoints[i,:]=minindex,mindist**2
        for cent in range(k):
            ptsinclust=dataset[nonzero(clusterpoints[:,0]==cent)[0]]
            classCenter[cent,:]=mean(ptsinclust,axis=0)
    return classCenter,clusterpoints
def show(dataset,k,classCenter,clusterPoints):
    print('4.load the map')
    fig=plt.figure()
    rect=[0.1,0.1,1.0,1.0]
    axprops=dict(xticks=[],yticks=[])
    ax0=fig.add_axes(rect,label='ax1',frameon=False)
    imgp=plt.imread(r'C:\Users\Admin\Desktop\city.png')
    ax0.imshow(imgp)
    ax1=fig.add_axes(rect,label='ax1',frameon=False)
    print('5.show the clusters')
    numsamples=len(dataset)
    mark=['ok','^b','om','og','sc']
    for i in range(numsamples):
        markindex=int(clusterPoints[i,0])%k
        ax1.plot(dataset[i,0],dataset[i,1],mark[markindex])
    for i in range(k):
        markindex=int(clusterPoints[i,0])%k
        ax1.plot(classCenter[i,0],classCenter[i,1],'^r',markersize=12)
    plt.show()
print('1. load the dataset')
dataset=loadtxt(r'C:\Users\Admin\Desktop\testSet.txt')
k=5
classCenter,clssspoints=mykmeans(dataset,k)
show(dataset,k,classCenter,clssspoints)


数据集和地图可以点赞关注收藏后私信博主要

相关文章:

  • 源码硬讲HashMap结构及数据结构转换过程(图+文)
  • 优化程序性能
  • 【Java】【集合】集合框架Collection
  • 这些年,我与Google不得不说的那些事儿
  • Opencv——图像模板匹配
  • 【秋招面经】之神策数据
  • Spring 有几种事务隔离级别?
  • 若依(RuoYi )权限管理设计
  • 【024】 快速上手mongoose web服务器
  • DevOps自动化测试的原则和实践
  • `SpringBoot`+`axios`结合发送`ajax`请求
  • 电子元器件产业发展遇新机,SRM供应商协同管理系统实现与供应商的敏捷协同
  • C#基础入门教程-基本语法
  • TensorRT安装记录(8.2.5)
  • C++ 池式组件 线程池 内存池 异步请求池 MySQL连接池
  • android图片蒙层
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • Laravel核心解读--Facades
  • LeetCode算法系列_0891_子序列宽度之和
  • Promise面试题2实现异步串行执行
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 聚类分析——Kmeans
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何学习JavaEE,项目又该如何做?
  • 微信小程序设置上一页数据
  • 智能合约开发环境搭建及Hello World合约
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • $$$$GB2312-80区位编码表$$$$
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (七)Knockout 创建自定义绑定
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (生成器)yield与(迭代器)generator
  • (转)http-server应用
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • **python多态
  • .Net Core 中间件验签
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • 。Net下Windows服务程序开发疑惑
  • /3GB和/USERVA开关
  • @for /l %i in (1,1,10) do md %i 批处理自动建立目录
  • @RestControllerAdvice异常统一处理类失效原因
  • [51nod1610]路径计数
  • [C++][数据结构][算法]单链式结构的深拷贝
  • [daily][archlinux][game] 几个linux下还不错的游戏
  • [ERROR ImagePull]: failed to pull image k8s.gcr.io/kube-controller-manager失败
  • [HNOI2008]水平可见直线
  • [leetcode top100] 0924 找到数组中消失的数,合并二叉树,比特位计数,汉明距离
  • [leetcode] 103. 二叉树的锯齿形层次遍历
  • [LeetCode]剑指 Offer 40. 最小的k个数
  • [Matlab有限元分析] 2.杆单元有限元分析