K-mean算法实现客户分类
此项目是K-mean算法实现客户分类。
K-Means算法思想:(1)事先确定常数K,常数K意味着最终的聚类类别数,(2)首先随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),(3)将样本点归到最相似的类中,(4)接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,最终就确定了每个样本所属的类别以及每个类的质心。
应用介绍
import numpy as np
import matplotlib.pyplot as plt
import math
import pandas as pds
plt.rcParams['font.sans-serif'] = 'simHei'#正确显示中文
plt.rcParams['axes.unicode_minus'] = False#正确显示负号
#date = pds.DataFrame(pds.read_csv('company.csv',header=1))
x = [10,13,17,67,35,1,10,12,8,1,32,3,90,1,16,31,25]
y = [317,147,172,194,789,190,281,142,186,226,287,499,181,172,190,271,382]
sortColors = ['g','r','b']#三个类别的三种颜色
sortX = np.random.randint(10, 100, 3)#生成三个随机数x
sortY = np.random.randint(100, 700, 3)#生成三个随机数y
sortF = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] # 储存种类
sortM = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]#分别代表x,y,个数
#k-means算法
Mynum = 10
while(Mynum>0):
sortM = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]#清零
flag = 0#标记种类
for i in range(len(x)):
min = 1000#标记最短距离
for j in range(3):#找出距离最短的坐标
value = math.sqrt((x[i]-sortX[j])*(x[i]-sortX[j])+(y[i]-sortY[j])*(y[i]-sortY[j]))
if min>value:#判断距离是否是最短
min = value
flag = j
sortM[j][0] += x[i]
sortM[j][1] += y[i]
sortM[j][2] += 1
sortF[i] = flag
for i in range(3):#更新三个k值坐标
sortX[i] = sortM[i][0]//sortM[i][2]
sortY[i] = sortM[i][1]//sortM[i][2]
Mynum -= 1
#绘制
plt.figure()
plt.title('用户分类图')
plt.xlabel("平均消费周期(天)")
plt.ylabel("平均每次消费金额")
#显示坐标轴元素
plt.xticks([10,20,30,40,50,60,70,80,90,100])
plt.yticks([100,150,200,250,300,350,400,450,500,550,600,650,700,750,800])
©版权声明:本文内容由互联网用户自发贡献,版权归原创作者所有,本站不拥有所有权,也不承担相关法律责任。如果您发现本站中有涉嫌抄袭的内容,欢迎发送邮件至: www_apollocode_net@163.com 进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
转载请注明出处: apollocode » K-mean算法实现客户分类
文件列表(部分)
名称 | 大小 | 修改日期 |
---|---|---|
K-means╛█└α╦π╖¿.docx | 314.22 KB | 2018-07-02 |
k-means ╛█└α.py | 2.02 KB | 2018-07-50 |
K-mean╦π╖¿╩╡╧╓┐═╗º╖╓└α | 0.00 KB | 2019-07-12 |
发表评论 取消回复