机器学习 | 解析聚类算法在数据检测中的应用

目录

初识聚类算法

聚类算法实现流程

模型评估

算法优化

特征降维

探究用户对物品类别的喜好细分(实操)


初识聚类算法

聚类算法是一种无监督学习方法,用于将数据集中的对象按照相似性分组。它旨在发现数据中的内在结构和模式,将具有相似特征的数据点聚集到同一组中,并将不同组之间的差异最大化。使用不同的聚类法则,产生的聚类结果也不尽相同:

机器学习 | 解析聚类算法在数据检测中的应用_第1张图片

聚类算法在现实中的应用

1)用户画像,广告推荐,DataSegmentation,搜索引l擎的流量推荐,恶意流量识别

2)基于位置信息的商业推送,新闻聚类,筛选排序

3)图像分割,降维,识别;离群点检测;信用卡异常消费;发掘相同功能的基因片段

聚类算法是无监督的学习算法,而分类算法属于监督的学习算法。

接下来我们随机创建不同二维数据集作为训练集,并结合k-means算法将其聚类,尝试分别聚类不同数量的,并观察聚类效果:

首先我们先导入相关使用的第三方库:

import matplotlib.pyplot as plt
from sklearn.datasets._samples_generator import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import calinski_harabasz_score
# n_clusters:开始的聚类中心数量,省值=8,生成的聚类数,即产生的质心(centroids)数。
# estimator.fit_predict(x): 计算聚类心并预测每个样本属于哪个类别,相当于先调用fitx),然后再调用predict(x)

# 创建数据
X, Y = make_blobs(n_samples=1000, n_features=2, centers=[[-1, -1], [0, 0], [1, 1], [2, 2]], cluster_std=[0.4, 0.2, 0.2, 0.2], random_state=9)
# 可视化展示
plt.scatter(X[:, 0], X[:, 1], marker="o")
plt.show()

最终呈现的效果如下所示:

机器学习 | 解析聚类算法在数据检测中的应用_第2张图片

接下来这段代码使用了K-means聚类算法对给定数据集X进行聚类,聚成两个簇:

# KMeans是Scikit-learn库中的K-means聚类算法实现;
# n_clusters=2表示要将数据划分为2个簇;
# n_init=10表示运行算法的次数,以选择最佳结果;
# random_state=9表示随机数生成器的种子,确保结果可以被重复。

# kmeans训练 聚类=2
y_pre = KMeans(n_clusters=2, n_init=10, random_state=9).fit_predict(X)
# 可视化展示
plt.scatter(X[:, 0], X[:, 1], c=y_pre)
plt.show()
# 用ch_scale查看最后效果
print(calinski_harabasz_score(X, y_pre))

呈现的效果如下所示:

机器学习 | 解析聚类算法在数据检测中的应用_第3张图片

接下来我们改变聚类中心的数量得到的结果如下所示: 

机器学习 | 解析聚类算法在数据检测中的应用_第4张图片

聚类算法实现流程

根据上面的案例,我们了解到 K-means 聚类步骤如下:

1)随机设置K个特征空间内的点作为初始的聚类中心

机器学习 | 解析聚类算法在数据检测中的应用_第5张图片

2)对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别

机器学习 | 解析聚类算法在数据检测中的应用_第6张图片

3)接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值),如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程:

机器学习 | 解析聚类算法在数据检测中的应用_第7张图片

接下来通过动态图进行演示实现上面的过程:

接下来通过一个案例数据来进行演示:

机器学习 | 解析聚类算法在数据检测中的应用_第8张图片

1)随机设置K个特征空间内的点作为初始的聚类中心(本案例中设置p1和p2):

机器学习 | 解析聚类算法在数据检测中的应用_第9张图片

2)对于其他每个点计算到K个中心的距离,未知的点选择最近的一个聚类中心点作为标记类别:

机器学习 | 解析聚类算法在数据检测中的应用_第10张图片

3)接着对着标记的聚类中心之后,重新计算出每个聚类的新中心点(平均值):

机器学习 | 解析聚类算法在数据检测中的应用_第11张图片

4)如果计算得出的新中心点与原中心点一样(质心不再移动),那么结束,否则重新进行第二步过程【经过判断,需要重复上述步骤,开始新一轮迭代】

机器学习 | 解析聚类算法在数据检测中的应用_第12张图片

5)当每次迭代结果不变时,认为算法收敛,聚类完成,K-Means一定会停下,不可能陷入一直选质心的过程。

机器学习 | 解析聚类算法在数据检测中的应用_第13张图片

K-means聚类实现流程总结

1)事先确定常数K,常数K意味着最终的聚类类别数;

2)随机选定初始点为质心,并通过计算每一个样本与质心之间的相似度(这里为欧式距离),将样本点归到最相似的类中,

3)接着,重新计算每个类的质心(即为类中心),重复这样的过程,直到质心不再改变,

4)最终就确定了每个样本所属的类别以及每个类的质心。

注意:由于每次都要计算所有的样本与每一个质心之间的相似度,故在大规模的数据集上,K-Means算法的收敛速度比较慢。

K-means聚类算法优缺点

优点:原理简单(靠近中心点),实现容易;聚类效果中上 (依赖K的选择);空间复杂度o(N),时间复杂度o(IKN)

缺点:对离群点,噪声敏感(中心点易偏移);很难发现大小差别很大的簇及进行增量计算;结果不一定是全局最优,只能保证局部最优(与K的个数及初值选取有关)

模型评估

在聚类算法中,模型评估是通过一些内部或外部指标来衡量聚类质量的过程。这些指标可以帮助我们了解聚类模型对数据集的可靠性和有效性。在聚类算法中,有一些常用的模型评估指标,包括SSE(Sum of Squared Errors,误差平方和)、"肘"部法(Elbow Method)、轮廓系数(Silhouette Coefficient,SC)和Calinski-Harabasz指标(CH)。这些指标可以帮助我们选择最佳的聚类数量和评估聚类模型的质量。但需要注意的是,它们仅供参考,具体选择还需结合实际问题和经验。以下是模型评估指数介绍:

SSE:SSE衡量了每个数据点到其所属簇的质心的距离的平方和。SSE越小,表示数据点越接近其所属簇的质心,聚类效果越好。然而,SSE不能直接用于比较不同聚类数量的模型,因为随着聚类数量的增加,SSE通常会减小。

机器学习 | 解析聚类算法在数据检测中的应用_第14张图片

"肘"部法:肘部法是一种通过绘制聚类数量与对应的SSE之间的关系图来选择最佳聚类数量的方法。图形通常呈现出一个弯曲的曲线,在聚类数量逐渐增加时,SSE下降的速度会变缓。选择"肘"部的聚类数量,即找到SSE曲线的拐点,可以认为是最佳的聚类数量。

机器学习 | 解析聚类算法在数据检测中的应用_第15张图片

SC轮廓系数:轮廓系数是一种用于评估聚类结果的紧密度和分离度的指标。它计算每个数据点的轮廓系数,该系数考虑了数据点与其所属簇的距离以及与其他簇的距离。轮廓系数的取值范围在[-1, 1]之间,越接近1表示聚类结果越好。

机器学习 | 解析聚类算法在数据检测中的应用_第16张图片

CH系数:Calinski-Harabasz指标是另一种用于评估聚类结果的指标,它基于簇内方差和簇间方差的比率。较高的Calinski-Harabasz指标表示聚类结果具有较好的紧密度和分离度。

机器学习 | 解析聚类算法在数据检测中的应用_第17张图片

机器学习 | 解析聚类算法在数据检测中的应用_第18张图片

算法优化

通过算法优化,可以改善聚类算法的性能、稳定性和准确性,以更好地发现数据中的结构和模式。以下是几种算法优化的简介:

Canopy算法:将数据点分配到不同的组中,可以有效减少K-means算法计算负担。同时,Canopy算法还可以为K-means算法提供初始质心,并且在保证聚类效果的情况下,可以通过调整T1和T2的值来控制聚类数量。

在给定的所有点中选择其中一个点当作质心,以当前质点为圆心t1为半径画圆,在圆内的点标记为黄色,再以当前质点为圆心t2为半径画圆,把落在圆环内的点加粗,如下:

机器学习 | 解析聚类算法在数据检测中的应用_第19张图片

接下来把圆外的点随机选一个作为圆心继续画圆,操作步骤与上面类似,直到把所有点都包括进去

机器学习 | 解析聚类算法在数据检测中的应用_第20张图片

Canopy算法的优缺点

优点

1)Kmeans对噪声抗干扰较弱,通过Canopy对比,将较小的NumPoint的Cluster直接去掉有利于抗干扰。

2)Canopy选择出来的每个Canopy的centerPoint作为K会更精确。

3)只是针对每个Canopy的内做Kmeans聚类,减少相似计算的数量。

缺点

1)算法中T1、T2的确定问题,依旧可能落入局部最优解

K-means++算法:通过选择合适的初始质心,可以加速K-means算法的收敛速度,减少聚类结果受到初始值的影响,并且在一定程度上提高聚类效果。

机器学习 | 解析聚类算法在数据检测中的应用_第21张图片

如下图中,如果第一个质心选择在圆心,那么最优可能选择到的下一个点在P(A)这个区域(根据颜色进行划分):

机器学习 | 解析聚类算法在数据检测中的应用_第22张图片

二分K-means算法:通过动态地选择聚类数量和质心,可以避免K-means算法陷入局部最优解,并且在一定程度上提高聚类效果。

实现流程:

1)所有点作为一个簇。

2)将该簇一分为二。

3)择能最大限度降低聚类代价函数(也就是误差平方和)的簇划分为两个簇。

4)以此进行下去,直到簇的数目等于用户给定的数目k为止。

机器学习 | 解析聚类算法在数据检测中的应用_第23张图片

因为聚类的误差平方和能够衡量聚类性能,该值越小表示数据点越接近于他们的质心,聚类效果就越好。所以需要对误差平方和最大的簇进行再一次划分,因为误差平方和越大,表示该簇聚类效果越不好,越有可能是多个簇被当成了一个簇,所以我们首先需要对这个簇进行划分。 

二分K均值算法可以加速K-means算法的执行速度,因为它的相似度计算少了并且不受初始化问题的影响,因为这里不存在随机点的选取,且每一步都保证了误差最小。

K-medoids算法:通过选择代表性对象作为质心,可以避免出现非数据点的质心,从而提高聚类结果的可解释性。同时,选择medoid作为质心可以减少聚类结果受到异常值的影响。

机器学习 | 解析聚类算法在数据检测中的应用_第24张图片

特征降维

特征降维是指通过某种数学变换或算法,将原始数据集中的高维特征转化为低维表示的过程。在机器学习和数据分析中,特征降维可以帮助减少数据集的维度,提取最具代表性的特征,去除冗余信息,并且有助于可视化和理解数据。

降维是指在某些限定条件下,降低随机变量(特征)个数,得到一组“不相关”主变量的过程:

机器学习 | 解析聚类算法在数据检测中的应用_第25张图片

降维有两种方式 :特征选择和主成分分析(特征提取的方式),以下进行讲解:

特征选择:数据中包含余或无关变量(或称特征、属性、指标等),旨在从原有特征中找出主要特征。其对应的方法如下:

机器学习 | 解析聚类算法在数据检测中的应用_第26张图片

低方差特征过滤:通过如下代码进行演示:

机器学习 | 解析聚类算法在数据检测中的应用_第27张图片

最终呈现的效果如下:

机器学习 | 解析聚类算法在数据检测中的应用_第28张图片

其相关系数的主要实现方式有 皮尔逊相关系数和斯皮尔曼相关系数:

皮尔逊相关系数:反映变量之间相关关系密切程度的统计指标

机器学习 | 解析聚类算法在数据检测中的应用_第29张图片

其案例实现的代码如下:

from scipy.stats import pearsonr

def pea_demo():
    # 准备数据
    x1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
    x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]
    # 判断
    ret = pearsonr(x1, x2)
    print("皮尔逊相关系数的结果是:\n", ret)

pea_demo()

最终呈现的效果如下所示:

机器学习 | 解析聚类算法在数据检测中的应用_第30张图片

斯皮尔曼相关系数:反映变量之间相关关系密切程度的统计指标

其案例实现的代码如下:

from scipy.stats import spearmanr

def pea_demo():
    # 准备数据
    x1 = [12.5, 15.3, 23.2, 26.4, 33.5, 34.4, 39.4, 45.2, 55.4, 60.9]
    x2 = [21.2, 23.9, 32.9, 34.1, 42.5, 43.2, 49.0, 52.8, 59.4, 63.5]
    # 判断
    ret = spearmanr(x1, x2)
    print("斯皮尔曼相关系数的结果是:\n", ret)

pea_demo()

最终呈现的效果如下所示:

机器学习 | 解析聚类算法在数据检测中的应用_第31张图片

主成分分析

定义:高维数据转化为低维数据的过程,在此过程中可能会舍弃原有数据、创造新的变量。

作用:是数据维数压缩,尽可能降低原数据的维数(复杂度),损失少量信息。

应用:回归分析或者聚类分析当中。

这里拿一个简单的数据进行测试一下:

from sklearn.decomposition import PCA

def pca_demo():
    data = [[2, 8, 4, 5], [6, 3, 0, 8], [5, 4, 9, 1]]
    # pca小数保留百分比
    transfer = PCA(n_components=0.9)
    trans_data = transfer.fit_transform(data)
    print("保留0.9的数据最后维度为: \n", trans_data)

    # pca小数保留百分比
    transfer = PCA(n_components=3)
    trans_data = transfer.fit_transform(data)
    print("保留三列数据最后维度为: \n", trans_data)

pca_demo()

最终呈现的效果如下所示:

机器学习 | 解析聚类算法在数据检测中的应用_第32张图片

探究用户对物品类别的喜好细分(实操)

接下来通过kaggle平台中的:竞赛 中的一道题目:应用 PCA 和 K-means 实现用户对物品类别的喜好细分划分,来加强我们聚类算法的学习:

机器学习 | 解析聚类算法在数据检测中的应用_第33张图片

数据集当中对应的数据如下:

机器学习 | 解析聚类算法在数据检测中的应用_第34张图片

根据竞赛提供的信息:

机器学习 | 解析聚类算法在数据检测中的应用_第35张图片

得到的最终结果需求是:

机器学习 | 解析聚类算法在数据检测中的应用_第36张图片

接下来我们开始正式对竞赛题目开始操作,以下是项目操作的具体步骤:

获取数据

机器学习 | 解析聚类算法在数据检测中的应用_第37张图片

数据基本处理

机器学习 | 解析聚类算法在数据检测中的应用_第38张图片

交叉表(Cross Tabulations)是一种常用的分类汇总表格,用于频数分布统计,主要价值在于描述了变量间关系的深刻含义。它可以计算两个(或更多)因子的简单交叉表。默认情况下,它会计算因子的频率表,除非传递了值数组和聚合函数。 

机器学习 | 解析聚类算法在数据检测中的应用_第39张图片

特征工程

机器学习(K-means聚类)

机器学习 | 解析聚类算法在数据检测中的应用_第40张图片

模型评估

你可能感兴趣的:(#,机器学习,机器学习,算法,聚类,k-means,人工智能)