在监督学习算法中,我们给模型的任务通常是找到样本与标签之间的对应关系。在训练时,模型对样本给出预测,再通过损失函数计算与之间的偏差,从而优化模型。在这一过程中,真实标签保证我们可以根据模型的预测来调整模型,起到了“监督”模型的作用。因此这样的学习过程称为监督学习(supervised learning)。
另一类学习任务是,我们只有样本,却没有其标签。这类任务也不再是通过去预测,而是通过样本的特征,找到样本之间的关联。由于没有标签作为监督信号,这一过程也被称为无监督学习(unsupervised learning)。此类学习任务中研究最多、应用最广的是"聚类" (clustering)。
聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个"簇" (cluster)。通过这样的划分,每个簇可能对应于一些潜在的概念(类别)。,如"浅色瓜" "深色瓜","有籽瓜" "无籽瓜",甚至"本地瓜","外地瓜"等;需说明的是,这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。
另外值得一提的是,聚类既能作为一个单独过程,用于找寻数据内在的分布结构,也可作为分类等其他学习任务的前驱过程。例如,在一些商业应用中需对新用户的类型进行判别, 且定义"用户类型"对商家来说却可能不太容易,此时往往可先对用户数据进行聚类,根据聚类结果将每个簇定义为一类,然后再基于这些类训练分类模型,用于判别新用户的类型。
聚类算法根据实现方法不同,可分为以下类别:
- K-means:按照质心分类,主要介绍K-means,通用、普遍
- 层次聚类:对数据进行逐层划分,直到达到聚类的类别个数
- DBSCAN聚类是一种基于密度的聚类算法
- 谱聚类是一种基于图论的聚类算法
9.1 K均值算法(K-means)
K-means算法思想和KNN的思想雷系,通过距离计算来判断样本是否相似,把相似的样本(离得近的)聚类到同一个类别。
其应用场景:
- 用户分群
- 异常检测(电信诈骗等)
9.1.1 原理
- 给定样本集,其中每个样本的特征维数都是n,同时给定常数K,为最终聚类的类别数。
- 随机选取数据集中K个样本,将作为第个类别的初始中心点。
- 计算每个样本到K个中心点的的距离,根据距离的远近对它们进行分类,然后根据每个类别中的样本点,重新计算出新的聚类中心点(平均值,即质心)
- 重复上述步骤3,直到各个点的分类几乎不变或者达到预设的迭代次数为止。
质心作为聚类中心点的推导: 欧式距离的平方作为距离的度量标准,则将所有样本到其对应中心点距离之后作为损失函数:既然初始时,各类的中心点是随机选取的,那么我们应当再选取新的中心点作为中心点,使损失函数最小,将上式对求导得令偏导数为零,得到新的聚类中心点:。其中,为类别中样本个数。
9.1.2 案例:对1000个随机样本点进行聚类
9.1.3 性能度量
- 平方误差(SSE)
SSE越小,表示数据点越接近他们的中心点,聚类效果越好
- “肘”方法(Elbow method)
- 对于n个样本的数据集,迭代计算K (from 2 to n),每次聚类之后计算SSE
- SSE 是会逐渐变小的,因为每个点都是它所在的簇中心本身
- SSE 变化过程中会出现一个拐点,下降率突然变缓时即认为是最佳 n_clusters 值
- 在决定什么时候停止训练时,肘形判据同样有效,数据通常有更多的噪音,在增加分类无法带来更多回报时,我们停止增加类别。
- SC轮廓系数法(Silhouette Coefficient)
- 考虑簇内的内聚程度(Cohesion),簇外的分离程度(Separation),计算方法:
- 对计算每一个样本 到同簇内其他样本的平均距离 a,该值越小,说明簇内的相似程度越大
- 计算每一个样本到最近簇 内的所有样本的平均距离 b,该值越大,说明该样本越不属于其他簇
- 根据下面公式计算该样本的轮廓系数:
- 计算所有样本的平均轮廓系数。
案例:代码效果展示SSE、肘方法和SC系数
模块导入:
SSE系数和肘方法:
SC曲线:
9.1.4 案例-顾客数据聚类分析
数据:
- 已知:客户性别、年龄、年收入、消费指数
- 需求:对客户进行分析,找到业务突破口,寻找黄金客户
- 客户分群效果展示:
总结
- 数据读取后做特征工程(数据处理)
- one-hot编码
- 标准化(各特征之间特征值量纲不统一)
- …
- (若聚类数未知)循环遍历的方式查看不同K值的聚类效果,确定最佳聚类数K
- 训练模型
- fit 返回学习器
- 用于测试测试集
- fit_predict 返回经过学习器学习后各样本对应的分类簇
- 可以将返回的分类簇集添加到原数据中,给各样本添加类别标签
- 绘制样本分类散点图,查看效果