一.评价指标简介SSE考虑了簇内因素SSE越越小越好SSE肘部法常用来确定聚类的最佳K值SC轮廓系数法考虑了簇内和簇间因素数值越大越好CH考虑簇内簇间以及K值因素数值越大越好二.代码部分详解1.SSE肘部法#1.演示SSE肘部法 def dm01_SSE(): #1.定义sse列表记录每个k值的SSE值 sse_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的sse值并添加到sse_list 列表中 for k in range(1,100): #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 #3.4获取到每个簇的sse值 sse_value estimator.inertia_ #3.5将每个K值对应的sse添加到sse_list中 sse_list.append(sse_value) #绘制SSE曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(SSE) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(SSE) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的sse值 plt.plot(range(1, 100), sse_list) plt.show()2.SC#2.演示SC轮廓系数法 def dm02_SC(): #1.定义sc列表记录每个k值的sc值 sc_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的sc值并添加到sc_list 列表中 for k in range(2, 100): #考虑簇外至少两个簇 #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 y_pred estimator.predict(x) #3.4获取到每个簇的sc值 sc_value silhouette_score(x, y_pred) #3.5将每个K值对应的sc添加到sc_list中 sc_list.append(sc_value) #绘制sc曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(sc) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(sc) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的sc值 plt.plot(range(2, 100), sc_list) plt.show()3.CH#3.演示CH轮廓系数法 def dm03_ch(): #1.定义ch列表记录每个k值的ch值 ch_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的ch值并添加到ch_list 列表中 for k in range(2, 100): #考虑簇外至少两个簇 #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 y_pred estimator.predict(x) #3.4获取到每个簇的ch值 ch_value calinski_harabasz_score(x, y_pred) #3.5将每个K值对应的ch添加到ch_list中 ch_list.append(ch_value) #绘制ch曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(ch) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(ch) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的ch值 plt.plot(range(2, 100), ch_list) plt.show()4.完整代码 SSE:只考虑簇内部 值越小越好 SC:考虑了簇内和簇间 值越大越好 CH考虑了簇内 簇间 以及K值 值越大越好 #导包 from sklearn.cluster import KMeans import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.metrics import calinski_harabasz_score, silhouette_score import matplotlib matplotlib.use(TkAgg) # 解决后端错误 #1.演示SSE肘部法 def dm01_SSE(): #1.定义sse列表记录每个k值的SSE值 sse_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的sse值并添加到sse_list 列表中 for k in range(1,100): #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 #3.4获取到每个簇的sse值 sse_value estimator.inertia_ #3.5将每个K值对应的sse添加到sse_list中 sse_list.append(sse_value) #绘制SSE曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(SSE) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(SSE) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的sse值 plt.plot(range(1, 100), sse_list) plt.show() #2.演示SC轮廓系数法 def dm02_SC(): #1.定义sc列表记录每个k值的sc值 sc_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的sc值并添加到sc_list 列表中 for k in range(2, 100): #考虑簇外至少两个簇 #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 y_pred estimator.predict(x) #3.4获取到每个簇的sc值 sc_value silhouette_score(x, y_pred) #3.5将每个K值对应的sc添加到sc_list中 sc_list.append(sc_value) #绘制sc曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(sc) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(sc) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的sc值 plt.plot(range(2, 100), sc_list) plt.show() #3.演示CH轮廓系数法 def dm03_ch(): #1.定义ch列表记录每个k值的ch值 ch_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的ch值并添加到ch_list 列表中 for k in range(2, 100): #考虑簇外至少两个簇 #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 y_pred estimator.predict(x) #3.4获取到每个簇的ch值 ch_value calinski_harabasz_score(x, y_pred) #3.5将每个K值对应的ch添加到ch_list中 ch_list.append(ch_value) #绘制ch曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(ch) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(ch) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的ch值 plt.plot(range(2, 100), ch_list) plt.show() #4.测试 if __name__ __main__: #dm01_SSE() #dm02_SC() dm03_ch()三.总结加强了对于对于聚类算法评价指标的练习。
机器学习——聚类评价指标SSE、SC、CH演示案例
一.评价指标简介SSE考虑了簇内因素SSE越越小越好SSE肘部法常用来确定聚类的最佳K值SC轮廓系数法考虑了簇内和簇间因素数值越大越好CH考虑簇内簇间以及K值因素数值越大越好二.代码部分详解1.SSE肘部法#1.演示SSE肘部法 def dm01_SSE(): #1.定义sse列表记录每个k值的SSE值 sse_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的sse值并添加到sse_list 列表中 for k in range(1,100): #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 #3.4获取到每个簇的sse值 sse_value estimator.inertia_ #3.5将每个K值对应的sse添加到sse_list中 sse_list.append(sse_value) #绘制SSE曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(SSE) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(SSE) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的sse值 plt.plot(range(1, 100), sse_list) plt.show()2.SC#2.演示SC轮廓系数法 def dm02_SC(): #1.定义sc列表记录每个k值的sc值 sc_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的sc值并添加到sc_list 列表中 for k in range(2, 100): #考虑簇外至少两个簇 #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 y_pred estimator.predict(x) #3.4获取到每个簇的sc值 sc_value silhouette_score(x, y_pred) #3.5将每个K值对应的sc添加到sc_list中 sc_list.append(sc_value) #绘制sc曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(sc) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(sc) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的sc值 plt.plot(range(2, 100), sc_list) plt.show()3.CH#3.演示CH轮廓系数法 def dm03_ch(): #1.定义ch列表记录每个k值的ch值 ch_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的ch值并添加到ch_list 列表中 for k in range(2, 100): #考虑簇外至少两个簇 #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 y_pred estimator.predict(x) #3.4获取到每个簇的ch值 ch_value calinski_harabasz_score(x, y_pred) #3.5将每个K值对应的ch添加到ch_list中 ch_list.append(ch_value) #绘制ch曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(ch) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(ch) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的ch值 plt.plot(range(2, 100), ch_list) plt.show()4.完整代码 SSE:只考虑簇内部 值越小越好 SC:考虑了簇内和簇间 值越大越好 CH考虑了簇内 簇间 以及K值 值越大越好 #导包 from sklearn.cluster import KMeans import matplotlib.pyplot as plt from sklearn.datasets import make_blobs from sklearn.metrics import calinski_harabasz_score, silhouette_score import matplotlib matplotlib.use(TkAgg) # 解决后端错误 #1.演示SSE肘部法 def dm01_SSE(): #1.定义sse列表记录每个k值的SSE值 sse_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的sse值并添加到sse_list 列表中 for k in range(1,100): #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 #3.4获取到每个簇的sse值 sse_value estimator.inertia_ #3.5将每个K值对应的sse添加到sse_list中 sse_list.append(sse_value) #绘制SSE曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(SSE) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(SSE) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的sse值 plt.plot(range(1, 100), sse_list) plt.show() #2.演示SC轮廓系数法 def dm02_SC(): #1.定义sc列表记录每个k值的sc值 sc_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的sc值并添加到sc_list 列表中 for k in range(2, 100): #考虑簇外至少两个簇 #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 y_pred estimator.predict(x) #3.4获取到每个簇的sc值 sc_value silhouette_score(x, y_pred) #3.5将每个K值对应的sc添加到sc_list中 sc_list.append(sc_value) #绘制sc曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(sc) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(sc) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的sc值 plt.plot(range(2, 100), sc_list) plt.show() #3.演示CH轮廓系数法 def dm03_ch(): #1.定义ch列表记录每个k值的ch值 ch_list [] #生成数据 参1样本数量 参2特征数 参34个簇 参4标准差 参5随机种子 x, y make_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_state23) #3.for循环遍历获取到每个K值计算对应的ch值并添加到ch_list 列表中 for k in range(2, 100): #考虑簇外至少两个簇 #3.1 创建k-means对象指定K值迭代次数随机种子 estimator KMeans(n_clustersk, max_iter100, random_state23) #3.2训练模型 estimator.fit(x) #3.3模型预测 y_pred estimator.predict(x) #3.4获取到每个簇的ch值 ch_value calinski_harabasz_score(x, y_pred) #3.5将每个K值对应的ch添加到ch_list中 ch_list.append(ch_value) #绘制ch曲线-》数据的可视化 #4.1创建画布指定尺寸 plt.figure(figsize(20, 10)) #4.2设计标题 plt.title(ch) #4.3设置x的 刻度 plt.xticks(range(0, 100, 3) ) #4.4添加x轴 y轴的标签 plt.xlabel(K) plt.ylabel(ch) #4.5绘制网格 plt.grid() #4.6绘制折线图 #参1K值 参2K对应的ch值 plt.plot(range(2, 100), ch_list) plt.show() #4.测试 if __name__ __main__: #dm01_SSE() #dm02_SC() dm03_ch()三.总结加强了对于对于聚类算法评价指标的练习。