资讯动态

机器学习08(黑马)-聚类

发布时间:2026/9/23 18:57:20 来源:尧图企业网站定制
聚类聚类算法简介学习目标1.知道什么是聚类2.了解聚类算法的应用场景3.知道聚类算法的分类【知道】聚类算法介绍一种典型的无监督学习算法主要用于将相似的样本自动归到一个类别中。在聚类算法中根据样本之间的相似性将样本划分到不同的类别中对于不同的相似度计算方法会得到不同的聚类结果常用的相似度计算方法有欧式距离法。【了解】聚类算法在现实中的应用用户画像广告推荐Data Segmentation搜索引擎的流量推荐恶意流量识别基于位置信息的商业推送新闻聚类筛选排序图像分割降维识别离群点检测信用卡异常消费发掘相同功能的基因片段【知道】分类聚类API的初步使用学习目标1.了解Kmeans算法的API2.动手实践Kmeans算法【了解】api介绍sklearn.cluster.KMeans(n_clusters8)参数:n_clusters:开始的聚类中心数量整型缺省值8生成的聚类数即产生的质心centroids数。方法:estimator.fit(x)estimator.predict(x)estimator.fit_predict(x)计算聚类中心并预测每个样本属于哪个类别,相当于先调用fit(x),然后再调用predict(x)【实践】 案例随机创建不同二维数据集作为训练集并结合k-means算法将其聚类你可以尝试分别聚类不同数量的簇并观察聚类效果1.创建数据集importmatplotlib.pyplotaspltfromsklearn.datasets.samples_generatorimportmake_blobsfromsklearn.clusterimportKMeansfromsklearn.metricsimportcalinski_harabaz_score# 创建数据集# X为样本特征Y为样本簇类别 共1000个样本每个样本2个特征共4个簇# 簇中心在[-1,-1], [0,0],[1,1], [2,2] 簇方差分别为[0.4, 0.2, 0.2, 0.2]X,ymake_blobs(n_samples1000,n_features2,centers[[-1,-1],[0,0],[1,1],[2,2]],cluster_std[0.4,0.2,0.2,0.2],random_state9)# 数据集可视化plt.scatter(X[:,0],X[:,1],markero)plt.show()2.使用k-means进行聚类,并使用CH方法评估y_predKMeans(n_clusters2,random_state9).fit_predict(X)# 分别尝试n_cluses2\3\4,然后查看聚类效果plt.scatter(X[:,0],X[:,1],cy_pred)plt.show()# 用Calinski-Harabasz Index评估的聚类分数print(calinski_harabasz_score(X,y_pred))Kmeans算法流程学习目标1、理解Kmeans算法的执行过程【掌握】k-means聚类流程1、随机设置K个特征空间内的点作为初始的聚类中心2、对于其他每个点计算到K个中心的距离未知的点选择最近的一个聚类中心点作为标记类别3、接着对着标记的聚类中心之后重新计算出每个聚类的新中心点平均值4、如果计算得出的新中心点与原中心点一样质心不再移动那么结束否则重新进行第二步过程通过下图解释实现流程k-means聚类动态效果图【练习】案例练习案例1、随机设置K个特征空间内的点作为初始的聚类中心本案例中设置p1和p22、对于其他每个点计算到K个中心的距离未知的点选择最近的一个聚类中心点作为标记类别3、接着对着标记的聚类中心之后重新计算出每个聚类的新中心点平均值注意这里P2′(2.3,3.3)下同。4、如果计算得出的新中心点与原中心点一样质心不再移动那么结束否则重新进行第二步过程【经过判断需要重复上述步骤开始新一轮迭代】5、当每次迭代结果不变时认为算法收敛聚类完成K-Means一定会停下不可能陷入一直选质心的过程。评价指标学习目标:了解 SSE 聚类评估指标了解 SC 聚类评估指标了解 CH 聚类评估指标了解肘方法的作用【了解】 SSE-误差平方和K 表示聚类中心的个数Ci表示簇p 表示样本mi表示簇的质心SSE 越小表示数据点越接近它们的中心聚类效果越好。【了解】SC 系数结合了聚类的凝聚度Cohesion和分离度Separation用于评估聚类的效果。其计算过程如下计算每一个样本 i 到同簇内其他样本的平均距离 ai该值越小说明簇内的相似程度越大计算每一个样本 i 到最近簇 j 内的所有样本的平均距离 bij该值越大说明该样本越不属于其他簇 j计算所有样本的平均轮廓系数轮廓系数的范围为[-1, 1]值越大聚类效果越好【了解】肘部法肘部法可以用来确定 K 值.对于n个点的数据集迭代计算 k from 1 to n每次聚类完成后计算 SSESSE 是会逐渐变小的因为每个点都是它所在的簇中心本身。SSE 变化过程中会出现一个拐点下降率突然变缓时即认为是最佳 n_clusters 值。在决定什么时候停止训练时肘形判据同样有效数据通常有更多的噪音在增加分类无法带来更多回报时我们停止增加类别。【了解】CH 系数CH 系数结合了聚类的凝聚度Cohesion和分离度Separation、质心的个数希望用最少的簇进行聚类。SSW 的含义Cpi表示质心xi表示某个样本SSW 值是计算每个样本点到质心的距离并累加起来SSW 表示表示簇内的内聚程度越小越好m 表示样本数量k 表示质心个数SSB 的含义Cj表示质心X 表示质心与质心之间的中心点nj表示样本的个数SSB 表示簇与簇之间的分离度SSB 越大越好【实践】聚类评估的使用fromsklearn.datasetsimportmake_blobsfromsklearn.clusterimportKMeansimportmatplotlib.pyplotaspltfromsklearn.metricsimportsilhouette_scorefromsklearn.metricsimportcalinski_harabasz_scoreif__name____main__:x,ymake_blobs(n_samples1000,n_features2,centers[[-1,-1],[0,0],[1,1],[2,2]],cluster_std[0.4,0.2,0.2,0.2],random_state9)plt.figure(figsize(18,8),dpi80)plt.scatter(x[:,0],x[:,1],cy)plt.show()estimatorKMeans(n_clusters4,random_state0)estimator.fit(x)y_predestimator.predict(x)# 1. 计算 SSE 值print(SSE:,estimator.inertia_)# 2. 计算 SC 系数print(SC:,silhouette_score(x,y_pred))# 3. 计算 CH 系数print(CH:,calinski_harabasz_score(x,y_pred))【实践】案例【了解】案例介绍已知客户性别、年龄、年收入、消费指数需求对客户进行分析找到业务突破口寻找黄金客户数据集共包含顾客的数据, 数据共有 4 个特征, 数据共有 200 条。接下来使用聚类算法对具有相似特征的的顾客进行聚类并可视化聚类结果。【实践】案例实现importmatplotlib.colorsimportmatplotlib.pyplotaspltfromsklearn.clusterimportKMeansimportpandasaspdfromsklearn.manifoldimportTSNEfromsklearn.preprocessingimportStandardScaler pd.set_option(display.max_columns,None)pd.set_option(display.max_rows,None)pd.set_option(display.width,1000)if__name____main__:# 1. 读取顾客数据datapd.read_csv(data/customers.csv)data.columns[CustomerID,Gender,Age,Annual Income,Spending Score]# print(data.head())# 2. 对 Gender 特征进行独热编码datapd.get_dummies(data,columns[Gender])# print(data.head())# 3. 数据标准化scalerStandardScaler()datascaler.fit_transform(data)print(data)# 4. 去除非 ID 列进行聚类分析datadata[:,1:]# print(data[:5])# 5. 肘部法寻找质心个数sse[]forkinrange(1,20):estimatorKMeans(n_clustersk,random_state0)estimator.fit(data)sse.append(estimator.inertia_)plt.plot(range(1,20),sse)plt.show()# 6. 确定质心的个数estimatorKMeans(n_clusters10,n_init10,random_state0)y_predestimator.fit_predict(data)# 7. 聚类结果可视化plt.scatter(X.values[y_kmeans0,0],X.values[y_kmeans0,1],s100,cred,labelStandard)plt.scatter(X.values[y_kmeans1,0],X.values[y_kmeans1,1],s100,cblue,labelTraditional)plt.scatter(X.values[y_kmeans2,0],X.values[y_kmeans2,1],s100,cgreen,labelNormal)plt.scatter(X.values[y_kmeans3,0],X.values[y_kmeans3,1],s100,ccyan,labelYouth)plt.scatter(X.values[y_kmeans4,0],X.values[y_kmeans4,1],s100,cmagenta,labelTA)plt.scatter(mykeans.cluster_centers_[:,0],mykeans.cluster_centers_[:,1],s300,cblack,labelCentroids’)plt.title(Clusters of customers)plt.xlabel(Annual Income (k$))plt.ylabel(Spending Score (1-100))plt.legend()plt.show()

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价