K-Means 聚类算法分析客户群价值
K-Means 算法是典型的基于距离的非层次聚类算法,在最小化误差函数的基础上将数据划分为预订的类树 K,采用距离作为相似性的评价指标,即认为两个对象的距离越近,其相似度越大。
度量样本之间的相似性最常用的是 欧几里得距离、曼哈顿距离和闵可夫斯基距离;(Scikit-Learn 中的 KMeans 算法仅仅支持欧氏距离,因为采用其他的距离并不一定能够保证算法的收敛性。)
度量聚类质量的目标函数:误差平方和 SSE。对于两种不同的聚类结果,选择误差平方和较小的分类结果。
算法评价:组内相似性越大,组间差别越大,聚类效果越好
#使用 K-Means 算法聚类消费行为特征数据
import pandas as pd#参数初始化
inputfile='../data/consumption_data.xls'
outputfile='../out/data_type.xls'k=3 #聚类的类别
iteration=500 #聚类最大循环次数
data=pd.read_excel(inputfile,index_col='Id')
data_zs=1.0*(data-data.mean())/data.std() #数据标准化,直接对每一列进行标准化计算,不需要单独提取每一列from sklearn.cluster import KMeans
model=KMeans(n_clusters=k, n_jobs=4, max_iter=iteration) #分为k类,并发数为4
model.fit(data_zs) #开始聚类#简单打印结果
r1=pd.Series(model.labels_).value_counts() #统计各个类别的数目
r2=pd.DataFrame(model.cluster_centers_) #找出聚类中心
r=pd.concat([r2,r1],axis=1) #横向连接(axis=0纵向连接),得到聚类中心对应的类别下的数目 连接 r1 和 r2
r.columns=list(data.columns)+[u'类别数目'] #重命名表头,data.columns是data的列标签
print(r)#详细输出原始数据及其类别
r=pd.concat([data,pd.Series(model.labels_,index=data.index)],axis=1) #详细输出每个样本对应的类别 连接中括号内的两项内容
r.columns=list(data.columns)+[u'聚类类别'] #重命名表头
r.to_excel(outputfile) #保存结果
sklearn.cluster.KMeans #KMeans 聚类
Parameters:
n_clusters: int, 可选项,default=8。要生成的聚类质量,以及要生成的聚类中心的数量。
n_jobs: int,用于计算的并行数量(并发数量)
n_jobs=-1,If -1 all CPUs are used ,所有cpu 用于计算;
n_jobs=1,no parallel computing code is used at all, which is useful for debugging,没有并行计算几点,用于调试
max_iter: int, default=300。聚类最大循环次数(单次运行 K-Means 算法的最大迭代次数)
Attributes:
labels_: array, [n_clusters, n_features]。 Labels of each point 类别标签
cluster_centers_: Coordinates of cluster centers 聚类中心
Methods:
fit (X[, y])
|
Compute k-means clustering. |
Parameters: |
X : array-like or sparse matrix, shape=(n_samples, n_features)
y : Ignored |
---|
Methods:
pandas.read_excel: 将 excel 表格读入 pandas DataFrame
Parameters:
index_col: int、list of int. default=None . Column (0-indexed) to use as the row labels of the DataFrame
列(0索引)用作 DataFrame 的行标签
io: string, path object 文件名,或文件地址
file-like object, pandas ExcelFile, or xlrd workbook. The string could be a URL. Valid URL schemes include http, ftp, s3, and file. For file URLs, a host is expected. For instance, a local file could be file://localhost/path/to/workbook.xlsx
DataFrame.columns: DataFrame 的列标签。
Returns:
parsed: DateFrame or Dict of DataFrame.
Methods:
pandas.cancat: Concatenate pandas objects along a particular axis with optional set logic along the other axes.
使用其他轴的可选设置逻辑 沿着特定坐标轴连接 pandas 对象
Parameters:
objs: Series、DataFrame、Panel 对象的序列或映射
axis: The axis to concatenate along 要连接的轴。 {0/’index’, 1/’columns’}, default 0 值为0,则纵向连接; 值为1,则横向连接
Returns:
concatenated: object,type of objs.
When concatenating all Series
along the index (axis=0), a Series
is returned. When objs
contains at least one DataFrame
, a DataFrame
is returned. When concatenating along the columns (axis=1), a DataFrame
is returned.
结果输出:
聚类中心:model.cluster_centers_
聚类标号:model.labels_
参考链接:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.concat.html
http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.columns.html#pandas.DataFrame.columns
Python 里面实现的聚类主要包括:KMeans 聚类、层次聚类、FCM、神经网络聚类。
不同模型的使用方法大同小异,基本都是先用对应的函数建立模型,然后使用 .fit()方法来训练模型,训练好之后,就可以用 .label_ 方法给出样本数据的标签,或者用 .predict() 方法预测新的输入的标签
聚类完成后,根据聚类中心点向量画出客户聚类向量图:
import numpy as np
import matplotlib.pyplot as pltlabels=data.columns #标签
k=5 #数据个数
plot_data=model.cluster_centers_
color=['b','g','r','c','y'] #指定颜色angles = np.linspace(0, 2*np.pi, k, endpoint=False) #闭合
plot_data = np.concatenate( (plot_data,plot_data[:,[0]]), axis=1)
angles=np.concatenate( (angles,[angles[0]]) ) #闭合fig=plt.figure()
ax=fig.add_subplot(111,polar=True) #polar参数
for i in range(len(plot_data)):ax.plot(angles, plot_data[i], 'o--', color=color[i], label=u'客户群'+str(i), linewidth=2) #画线ax.set_rgrids(np.arange(0.01,3.5,0.5), np.arange(-1,2.5,0.5), fontproperties="SimHei") #设置网格线
ax.set_thetagrids(angles*180/np.pi,labels,fontproperties="SimHei")
plt.legend(loc=4) #图例
plt.show()
Methods:
numpy.linspace: numpy..linspace(start, stop, num=50, endpoint=True, retstep=False, dType=None)
Return evenly spaced numbers over a specified interval. 在指定的间隔内返回均匀间隔的数字
Returns num evenly spaced samples, calculated over the interval [start, stop]. 在[start, stop]区间内计算,均匀间隔的样本,并返回 num。
The endpoint of the interval can optionally be excluded. 区间的终点,可以选择是否 exclude 排除
Parameters:
start: 序列的起始值; stop:在 endpoint=True时,stop是序列的终止值
num:要生成的样本数
endpoint: True, stop 是序列的终止值。False,则不包括stop那个值
retstep:True,则返回(sample,step),其中 step 是样本间距
dType:输出数组的类型。如果未给出类型,则从输入类型推断数据类型。
Returns:
sample: start与stop之间的样本
step:只在 retstep=True 时返回、
参考链接:https://docs.scipy.org/doc/numpy/reference/generated/numpy.linspace.html?highlight=linspace#numpy.linspace
Methods:
numpy.concatenate: numpy..concatenate((a1,a2,...,) , axis=0, out=None)
沿现有的轴,加入一系列数组。
Parameters:
a1,a2,...: 数组序列,除与轴对应的尺寸外,必须具有相同形状
axis:int,数组将连接的轴; 如果 axis=None,则在使用前将数组展平,default=0
out: 放置结果的目的地
Returns:
res: 连接数租
参考链接:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html?highlight=concatenate#numpy.concatenate
Methods:
numpy.arange: numpy.arange(start, stop, step, dType=None)
K-Means 聚类算法分析客户群价值相关推荐
- OpenCV的k - means聚类 -对图片进行颜色量化
OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...
- OpenCV官方文档 理解k - means聚类
理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...
- k means聚类算法_K-Means 聚类算法 20210108
说到聚类,应先理解聚类和分类的区别 聚类和分类最大的不同在于:分类的目标是事先已知的,而聚类则不一样,聚类事先不知道目标变量是什么,类别没有像分类那样被预先定义出来. K-Means 聚类算法有很多种 ...
- k means聚类算法_一文读懂K-means聚类算法
1.引言 什么是聚类?我们通常说,机器学习任务可以分为两类,一类是监督学习,一类是无监督学习.监督学习:训练集有明确标签,监督学习就是寻找问题(又称输入.特征.自变量)与标签(又称输出.目标.因变量) ...
- 机器学习(十四):K均值聚类(kmeans)
k均值聚类方法是一种无监督机器学习技术,用于识别数据集中的数据对象集群.有许多不同类型的聚类方法,但k -means是最古老和最平易近人的方法之一.这些特性使得在 Python 中实现k -means ...
- k均值聚类算法(K Means)及其实战案例
算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...
- k均值聚类算法考试例题_k means聚类算法实例
所谓聚类问题,就是给定一个元素集合D,其中每个元素具有n个可观察属性,使用某种算法将D划分成k个子集,要求每个子集内部的元素之间相异度尽可能低,而不同子集的元素相异度尽可能高.其中每个子集叫做一个簇. ...
- K均值聚类关于初始聚类中心的探讨
摘要:进入二十一世纪以来,科学技术的不断发展,使得数据挖掘技术得到了学者越来越多的关注.数据挖掘是指从数据库中发现隐含在大量数据中的新颖的.潜在的有用信息和规则的过程,是一种处理数据库数据的知识发现. ...
- k均值聚类算法python_K均值和其他聚类算法:Python快速入门
k均值聚类算法python This post was originally published here 这篇文章最初发表在这里 Clustering is the grouping of obje ...
最新文章
- python字符串类库_Python 常用类库
- urllib.parse
- 迷宫android游戏代码,C++打造迷宫游戏,直接上代码
- c语言switch编写计算器,超级新手,用switch写了个计算器程序,求指导
- MapReduce入门2-流量监控
- 【Python】处理 joblib.externals.loky.process_executor._RemoteTraceback:PermissionError:[WinError 5] 拒绝访问
- kali 安装KVM教程---》给自己的笔记
- Openstack命令
- Codeforces Round #493 (Div. 2):D. Roman Digits
- puppet进阶指南——cron资源详解
- 文本处理命令--uniq
- flowable理论(一)工作流理论
- React的受控组件和非受控组件
- 计算机中丢失msvcp140.dll无法启动此程序怎么办(修复教程)
- 6.10力扣 10号出去逛街了,11号补上! 打印n位数
- 扶贫?教育?地铁?这里有跨界也能实现的企业数字化新操作!
- 浅析FPGA局部动态可重构技术
- Linux内核移植流程 应该怎么开始着手
- mac安装Solr流程
- Linux 文件系统结构
热门文章
- 苹果手机html5摇一摇游戏戏码,利用HTML5的devicemotion事件实现手机摇一摇抽奖,年会抽奖,html5devicemotion...
- 记录一下HALCON基于可变形,利用CAD画dxf模板进行模板匹配(一)
- Database Meets AI: A Survey
- 佰锐AnyChat双录能力平台,助力度小满金融科技创新
- SQL注入 | 黑客入门篇(如何绕过密码登陆账号)
- 人生若只如初见(二)
- 计算机专业英语被动语态举例,第七讲被动语态的译法_计算机专业英语教程
- Logit Adjust
- CF1278B A and B
- 手工计算机视频教程,diy手工制作_DIY视频教程大全