聚类问题建模

一、什么是聚类?

1、聚类的定义

将所有观测值通过相似度评价方法分成不同的类。

2、应用场景

  • 给商品做分组,为用户推荐他喜欢的商品所属分组内的其他商品

网易云音乐中,给曲库中的所有歌曲聚类。当用户喜欢了一首歌,会接着为他推荐该聚类中的其他歌曲。
淘宝猜你喜欢,当搜索“数据分析”后,会推荐数据分析分组中的其他商品。

  • 给用户分组,为不同组的用户做个性化营销

明日之后中,为正在想加入营地的玩家推荐与其基本信息相似的营地。

二、常见的聚类算法

(一)k均值聚类

1、原理

k均值聚类原理

距离采用欧氏距离计算。在二维空间中,两点之间的欧式距离就是三角形的斜边长,用勾股定理计算。

聚类的结果和随机选择的初始重心相关,为了避免初始重心选择过于临近,导致聚类效果不好,K-Means通常初始时要重复运行十几次甚至上百次。每次重复时,它会随机的从不同的位置开始初始化。最后把最小的成本函数对应的重心位置作为初始化位置。

2、成本函数

K-Means参数的最优解是以成本函数最小化为目标.


k均值成本函数

μk是第k个类的重心位置。

  • 成本函数是各个类畸变程度(distortions)之和。
  • 每个类的畸变程度:该类重心与其内部成员位置距离的平方和。

若类内部的成员彼此间越紧凑则类的畸变程度越小,反之,若类内部的成员彼此间越分散则类的畸变程度越大。

3、代码实现

import pandas as pd
from sklearn.model_selection import train_test_split,cross_val_score
from sklearn import datasets

rawfile = datasets.load_iris()
rawfile.feature_names # 获取自变量名称
rawfile.data # 获取自变量取值
rawfile.target # 获取因变量取值,0=setosa,1=versicolor,2=virginica
file = pd.DataFrame(data=rawfile.data, columns=rawfile.feature_names)
x = file
y = rawfile.target

建模

from sklearn.cluster import KMeans
model = KMeans(n_clusters = 3)
model.fit(x)
y_model = model.predict(x) 

评估

# 方法一:畸变程度,越小越好(n_clusters可以=1)
from scipy.spatial.distance import cdist
sum(np.min(cdist(x, model.cluster_centers_, 'euclidean'), axis=1)) / x.shape[0] # 计算每个点距离其类别重心的欧氏距离的平均值

# 方法二:轮廓系数,越大越好(n_clusters不可以=1)
from sklearn import metrics
metrics.silhouette_score(x, model.labels_, metric='euclidean')

轮廓系数(Silhouette Coefficient) [ˌsɪluˈet][](javascript:;)是类的密集与分散程度的评价指标。它会随着类的规模增大而增大。彼此相距很远,本身很密集的类,其轮廓系数较大,彼此集中,本身很大的类,其轮廓系数较小。轮廓系数是通过所有样本计算出来的,计算每个样本分数的均值

超参数

n_clusters,表示聚类的数量.总和肘部法则和轮廓系数来看。
启发式方法来估计最优聚类数量,称为肘部法则(Elbow Method)。肘部法则会把不同值的成本函数值画出来。随着值的增大,平均畸变程度会减小;每个类包含的样本数会减少,于是样本离其重心会更近。但是,随着 值继续增大,平均畸变程度的改善效果会不断减低。 值增大过程中,畸变程度的改善效果下降幅度最大的位置对应的值就是肘部。

from scipy.spatial.distance import cdist
from matplotlib.font_manager import FontProperties
font = FontProperties(fname=r"c:\windows\fonts\msyh.ttc", size=10)
meandistortions = []
for i in list(range(1,10)):  
    model = KMeans(n_clusters=i)
    model.fit(x)
    meandistortions.append(sum(np.min(cdist(x, model.cluster_centers_, 'euclidean'), axis=1)) / x.shape[0]) # 计算每个点距离其类别重心的欧氏距离的平均值
    if i == 1:
        continue
    else:
        print('i=',i,'轮廓系数是:',metrics.silhouette_score(x, model.labels_,metric='euclidean'))
plt.plot(list(range(1,10)), meandistortions, 'bx-')
plt.xlabel('n_clusters')
plt.ylabel('平均畸变程度',fontproperties=font)
plt.title('用肘部法则来确定最佳的K值',fontproperties=font)
K值从1到2时,平均畸变程度变化最大。超过2以后,平均畸变程度变化显著降低。因此肘部就是2
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容