sklearn使用KMeans聚类算法对消费行为特征数据进行分类
样本数据选取的是消费行为数据,包括4列:主键,最近一次消费间隔,消费频率,消费总金额。k-means算法在收敛时采用的是欧式距离算法。
代码如下:
import pandas as pd |
In [2]:
inputfile = '/Users/frontc/book/ppdam/consumption_data.xls' |
In [3]:
outputfile = '/Users/frontc/book/ppdam/data_type.xls' |
In [4]:
k = 3 # 分成3类 |
In [5]:
iteration = 500 # 聚类最大循环次数 |
In [6]:
data = pd.read_excel(inputfile,index_col='Id') # 读取样本数据 |
In [8]:
data[:3] # 样本示例,r为最近一次消费时间间隔,f为消费频率,m为消费的总金额 |
Out[8]:
R | F | M | |
---|---|---|---|
Id | |||
1 | 27 | 6 | 232.61 |
2 | 3 | 5 | 1507.11 |
3 | 4 | 16 | 817.62 |
In [9]:
data_zs = 1.0 * (data - data.mean())/data.std() #采用零均值法对数据进行标准化,标准化后的数据均值为0,标准差为1 |
In [10]:
from sklearn.cluster import KMeans # 导入kmeans算法包 |
In [11]:
model = KMeans(n_clusters=k,n_jobs=4,max_iter=iteration) #初始化模型.分成3类,并发4,最大迭代500次 |
In [12]:
model.fit(data_zs) # 开始聚类 |
Out[12]:
KMeans(copy_x=True, init='k-means++', max_iter=500, n_clusters=3, n_init=10, |
In [19]:
r = pd.concat([data,pd.Series(model.labels_,index=data.index)],axis=1) # 将分类结果model.labels_打到数据data上去,axis=1代表横向连接 |
In [23]:
r[:3] # 查看一下 |
Out[23]:
R | F | M | 聚类类别 | |
---|---|---|---|---|
Id | ||||
1 | 27 | 6 | 232.61 | 2 |
2 | 3 | 5 | 1507.11 | 2 |
3 | 4 | 16 | 817.62 | 1 |
In [20]:
r.to_excel(outputfile) # 输出到excel中 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LeFer!
评论