聚类分析之迭代聚类——“K-Means聚类…

本文详细介绍了聚类算法的基础概念及K-Means算法的具体实现过程。对比了硬聚类与模糊聚类的区别,并探讨了隶属度的概念。此外,还解释了聚类与分类之间的区别,以及无监督学习的应用。

鲁棒是Robust,英 [rə(ʊ)'bʌst]的音译,也就是健壮、强壮、坚定、粗野的意思。鲁棒性(robustness)就是系统的健壮性。常使用如:算法的鲁棒性。

算法杂货铺转载学习

http://www.cnblogs.com/leoo2sk/archive/2010/09/20/k-means.html

算法杂货铺——k均值聚类(K-means)

 http://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html

算法杂货铺——分类算法之决策树(Decision tree)

 

http://www.dataguru.cn/article-3408-1.html

聚类算法实践(一)——层次聚类、K-means聚类

 

聚类之——“软硬”之别

分类标准可以进行不同的分类。就好像人按照性别可以分成男人和女人,按照年龄可以分为老中青一样。

聚类分析如果按照隶属度的取值范围可以分为两类,一类叫硬聚类算法,另一类就是模糊聚类算法隶属度的概念是从模糊集理论里引申出来的。

传统硬聚类算法隶属度只有两个值 0 和 1。也就是说一个样本只能完全属于某一个类或者完全不属于某一个类。举个例子,把温度分为两类,大于10度为热,小于或者等于10度为冷,这就是典型的“硬隶属度”概念。那么不论是5度还是负100度都属于冷这个类,而不属于热这个类的。

模糊集里的隶属度是一个取值在[0 1]区间内的数。一个样本同时属于所有的类,但是通过隶属度的大小来区分其差异。比如5度,可能属于冷这类的隶属度值为0.7,而属于热这个类的值为0.3。这样做就比较合理,硬聚类也可以看做模糊聚类的一个特例。

一些仅为个人倾向的分析(不严谨或不尽规范):所谓的动态模糊分析法我在文献里很少见到好像并不主流,似乎没有专门的这样一种典型聚类算法,可能是个别人根据自己需要设计并命名的一种针对模糊聚类的改进方法。有把每个不同样本加权的,权值自己确定,这样就冠以“动态"二字,这都是作者自己起的。也有别的也叫”动态“的,可能也不一样,似乎都是个别人自己提出的。

 

 

概念:聚类与分类(Classification)有别

 聚类(Clustering,属无监督学习): ['klʌstərɪŋ],聚集,收集;分类归并。
聚类是指根据“物以类聚”的原理,将本身 没有类别的样本聚集成不同的组,这样的一组数据对象的集合叫做 ,并且对每一个这样的簇进行描述的过程。
它的目的是使得属于 同一个簇的样本之间应该彼此相似,而不同簇的样本应该足够不相似
与分类规则不同,进行聚类前并不知道将要划分成几个组和什么样的组,也不知道根据哪些空间区分规则来定义组。
其目的旨在发现空间实体的属性间的函数关系,挖掘的知识用以属性名为变量的数学方程来表示。
当前,聚类技术正在蓬勃发展,涉及范围包括数据挖掘、统计学、机器学习、空间数据库技术、生物学以及市场营销等领域,聚类分析已经成为数据挖掘研究领域中一个非常活跃的研究课题。
常见的聚类算法包括:K-均值(K-Means)聚类算法、K-中心点聚类算法、CLARANS、BIRCH、CLIQUE、DBSCAN
 
就是把相似的东西分到一组。我们并不关心某一类是什么,实现的目标只是把相似的东西聚到一起。
因此,一个聚类算法通常只需要知道如何计算相似度就可以开始工作了,因此 clustering 通常并不需要使用训练数据进行学习,这在 Machine Learning 中被称作 unsupervised learning ( 无监督学习)。
 
分类 ( Classification   ),则不同,对于一个 classifier ,通常需要你告诉它“这个东西被分为某某类”这样一些例子,理想情况下,一个 classifier 会从它得到的训练集中进行“学习”,从而具备对未知数据进行分类的能力,这种提供训练数据的过程通常叫做 supervised learning (监督学习)。
例:拿来一个新水果,我们按着他的特征,把他分到橘子或者香蕉那类中,叫做分类?

监督学习(supervised learning):简单的说就是有输入和输出学习。
unsupervised :[,ʌn'sju:pəvaizd]无人监督的;无人管理的。

无监督学习(unsupervised learning):简单的说就是有输入没有输出的学习。
 
3.训练集和测试集?
一般就是把数据分成10份,9:1
9份作为训练数据,来学习一个模型;
1份作为测试数据,来测试这个模型。
  1. 聚类
    我们经常接触到的聚类分析,一般都是数值聚类,一种常见的做法是同时提取 N 种特征,将它们放在一起组成一个 N 维向量,从而得到一个从原始数据集合到 N 维向量空间的映射——你总是需要显式地或者隐式地完成这样一个过程,然后基于某种规则进行分类,在该规则下,同组分类具有最大的相似性。
      假设我们提取到原始数据的集合为(x1, x2, …, xn),并且每个xi为d维的向量,K-means聚类的目的就是,在给定分类组数k(k ≤ n)值的条件下,将原始数据分成k类
    S = {S1, S2, …, Sk},在数值模型上,即对以下表达式求最小值:
     
    这里μi 表示分类Si 的平均值。
      那么在计算机编程中,其又是如何实现的呢?其算法步骤一般如下:
    1、从D中随机取k个元素,作为k个簇的各自的中心。
    2、分别计算剩下的元素到k个簇中心的相异度,将这些元素分别划归到相异度最低的簇。
    3、根据聚类结果,重新计算k个簇各自的中心,计算方法是取簇中所有元素各自维度的算术平均数。
    4、将D中全部元素按照新的中心重新聚类。
    5、重复第4步,直到聚类结果不再变化。
    6、将结果输出。
      用数学表达式来说,
    设我们一共有 N 个数据点需要分为 K 个 cluster ,k-means 要做的就是最小化

 

————————————————————————————————

K-Means聚类算法

原文地址:http://blog.sina.com.cn/s/blog_62186b46010145ne.html

四种聚类方法之比较:http://www.cnblogs.com/William_Fire/archive/2013/02/09/2909499.html

深入浅出K-Means算法:http://www.youkuaiyun.com/article/2012-07-03/2807073-k-means

K-Means算法的基本思想是初始随机给定K个簇中心,按照最邻近原则把待分类样本点分到各个簇。然后按平均法重新计算各个簇的质心,从而确定新的簇心。一直迭代,直到簇心的移动距离小于某个给定的值。
 
K-Means聚类算法主要分为三个步骤:
(1)第一步是为待聚类的点寻找聚类中心
(2)第二步是计算每个点到聚类中心的距离,将每个点聚类到离该点最近的聚类中去
(3)第三步是计算每个聚类所有点的坐标平均值,并将这个平均值作为新的聚类中心
(4)反复执行(2)、(3),直到聚类中心不再进行大范围移动或者聚类次数达到要求为止
 
下图展示了对n个样本点进行K-means聚类的效果,这里k取2:
(a)未聚类的初始点集
(b)随机选取两个点作为聚类中心
(c)计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去
(d)计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心
(e)重复(c),计算每个点到聚类中心的距离,并聚类到离该点最近的聚类中去
(f)重复(d),计算每个聚类中所有点的坐标平均值,并将这个平均值作为新的聚类中心

 

聚类分析之迭代聚类——“K-Means聚类分析”

 Matlab实现:
详见:http://www.oschina.net/code/snippet_176897_10239



 

 

利用K-Means模型对淘购数据进行用户聚类分析,可参考以下方法与思路: ### 方法步骤 1. **数据准备**:收集淘购数据,包含用户的各类信息,如购买频率、购买金额、最近购买时间等。对数据进行清洗,处理缺失值、异常值等,确保数据质量。对数据进行标准化处理,消除不同特征之间量纲的影响,使模型能更好地学习数据特征。 2. **建立K - Means聚类分析模型**:从样本点中随机选择k个点作为初始簇中心。这里的k值需要根据业务需求和数据特点进行选择。可以通过一些方法,如手肘法(Elbow Method)来确定合适的k值。将每个样本点划分到距离它最近的中心点所代表的簇中。用各簇中所有样本的中心点代替原有的中心点。重复上述划分和更新中心点的步骤,直到中心点不变或达到预定迭代次数时,算法终止 [^3]。 3. **对观测数据进行测试**:使用训练好的K - Means模型对淘购数据进行聚类预测,得到每个用户所属的聚类类别。 4. **结果分析**:通过交叉表等方式显示聚类结果和其他相关因素(如用户的消费等级等)的关系,分析每个聚类的特征,如该聚类内用户的平均购买金额、购买频率等,以便为不同聚类的用户制定针对性的营销策略。 ### 案例 假设要解决RFM模型遗留的数据分箱局限性问题,使用K - Means聚类对淘购数据进行优化。RFM模型通过用户的最近一次购买时间(Recency)、购买频率(Frequency)和购买金额(Monetary)三个指标来对用户进行划分。传统的数据分箱根据等级进行划分,给定需要进行划分的区间个数,确定具体每一个区间的范围,但这种方法有局限性。可以使用K - Means聚类对RFM数据进行聚类分析,将用户划分为不同的簇。例如,可能会得到高价值用户簇(购买频率高、购买金额大、最近有购买行为)、潜在用户簇(购买频率和金额较低,但最近有购买行为)等。通过对不同簇的用户采取不同的营销策略,如对高价值用户提供专属优惠活动,对潜在用户进行精准营销推广,提高营销效果和用户满意度 [^2]。 ```python from sklearn.cluster import KMeans import pandas as pd import numpy as np # 假设这是处理好的淘购RFM数据 data = pd.DataFrame({ 'Recency': [10, 20, 30, 5, 15], 'Frequency': [5, 3, 2, 8, 4], 'Monetary': [200, 150, 100, 300, 180] }) # 数据标准化 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() scaled_data = scaler.fit_transform(data) # 使用手肘法确定k值 sse = [] for k in range(1, 11): kmeans = KMeans(n_clusters=k, random_state=42) kmeans.fit(scaled_data) sse.append(kmeans.inertia_) # 选择合适的k值,这里假设选择3 k = 3 kmeans = KMeans(n_clusters=k, random_state=42) kmeans.fit(scaled_data) # 预测每个用户的聚类标签 labels = kmeans.predict(scaled_data) data['Cluster'] = labels # 查看每个聚类的特征 cluster_summary = data.groupby('Cluster').mean() print(cluster_summary) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值