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


    数据集和地图可以点赞关注收藏后评论区留下QQ邮箱或者私信博主要

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

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

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

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

    先来个小例子

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

     代码如下

    1. from sklearn.cluster import KMeans
    2. from sklearn import datasets
    3. import numpy as np
    4. iris=datasets.load_iris()
    5. x=iris.data
    6. y=iris.target
    7. clf=KMeans(n_clusters=3)
    8. model=clf.fit(x)
    9. predicted=model.predict(x)
    10. print("预测值",predicted)
    11. print("真实值",y)
    12. print()

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

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

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

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

    原地图如下

    经过聚类分析后结果如下

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

    源代码如下

    1. #coding=utf-8
    2. from numpy import *
    3. from matplotlib import pyplot as plt
    4. import matplotlib; matplotlib.use('TkAgg')
    5. def disteclud(veca,vecb):
    6. return sqrt(sum(power(veca-vecb,2)))
    7. def initcenter(dataset,k):
    8. print('2.initalize cluster center')
    9. shape=dataset.shape
    10. n=shape[1]
    11. classcenter=array(zeros((k,n)))
    12. for j in range(n):
    13. firstk=dataset[:k,j]
    14. classcenter[:,j]=firstk
    15. return classcenter
    16. def mykmeans(dataset,k):
    17. m=len(dataset)
    18. clusterpoints=array(zeros((m,2)))
    19. classCenter=initcenter(dataset,k)
    20. clusterchanged=True
    21. print('3.recompute and reallocated')
    22. while clusterchanged:
    23. clusterchanged=False
    24. for i in range(m):
    25. mindist=inf
    26. minindex=-1
    27. for j in range(k):
    28. distji=disteclud(classCenter[j,:],dataset[i,:])
    29. if distji<mindist:
    30. mindist=distji;minindex=j
    31. if clusterpoints[i,0]!=minindex:
    32. clusterchanged=True
    33. clusterpoints[i,:]=minindex,mindist**2
    34. for cent in range(k):
    35. ptsinclust=dataset[nonzero(clusterpoints[:,0]==cent)[0]]
    36. classCenter[cent,:]=mean(ptsinclust,axis=0)
    37. return classCenter,clusterpoints
    38. def show(dataset,k,classCenter,clusterPoints):
    39. print('4.load the map')
    40. fig=plt.figure()
    41. rect=[0.1,0.1,1.0,1.0]
    42. axprops=dict(xticks=[],yticks=[])
    43. ax0=fig.add_axes(rect,label='ax1',frameon=False)
    44. imgp=plt.imread(r'C:\Users\Admin\Desktop\city.png')
    45. ax0.imshow(imgp)
    46. ax1=fig.add_axes(rect,label='ax1',frameon=False)
    47. print('5.show the clusters')
    48. numsamples=len(dataset)
    49. mark=['ok','^b','om','og','sc']
    50. for i in range(numsamples):
    51. markindex=int(clusterPoints[i,0])%k
    52. ax1.plot(dataset[i,0],dataset[i,1],mark[markindex])
    53. for i in range(k):
    54. markindex=int(clusterPoints[i,0])%k
    55. ax1.plot(classCenter[i,0],classCenter[i,1],'^r',markersize=12)
    56. plt.show()
    57. print('1. load the dataset')
    58. dataset=loadtxt(r'C:\Users\Admin\Desktop\testSet.txt')
    59. k=5
    60. classCenter,clssspoints=mykmeans(dataset,k)
    61. show(dataset,k,classCenter,clssspoints)

    数据集和地图可以点赞关注收藏后评论区留下QQ邮箱或者私信博主要

  • 相关阅读:
    element ui 下拉框 选择月份和天数
    第十七章·命令模式
    华为鲲鹏服务器
    Git的安装,安装git 2.37.2.2
    Elasticsearch安全又双叒叕出问题? 搜索引擎该怎么选
    jvm内存溢出溯源
    kubernetes学习笔记-namespace
    整车电子电器架构和自动驾驶架构的区别
    Spring和SpringBoot中的@Component 和@ComponentScan注解用法介绍和注意事项
    码农的转型之路-IoTBrowser(物联网浏览器)雏形上线
  • 原文地址:https://blog.csdn.net/jiebaoshayebuhui/article/details/126953494