irpas技术客

一种使用Python自实现KMeans++聚类算法的写法_远哥挺乐_kmeans++ python实现

未知 5362

失踪人口回归

文章目录 前言一、关于KMeans聚类以及KMeans++的原理?二、核心内容1、数据集介绍2、核心代码3、完整项目 结语


前言

最近学的内容主要是Python,内容比较杂:numpy,pandas,PyQt,数据挖掘等等,正好找个机会写个小项目练练手。

先上效果图,(项目链接在文章最后):


提示:以下是本篇文章正文内容

一、关于KMeans聚类以及KMeans++的原理?

网上介绍这个最最基本的聚类方法的教程和视频等实在太多了,不便啰嗦。

推荐两个:

1、【机器学习】K-means(非常详细)这篇文章偏数学逻辑,建议反复阅读

2、什么是 K-Means(K均值聚类)?【知多少】这是个视频,简单易懂地理解KMeans的原理

二、核心内容 1、数据集介绍

链接:https://pan.baidu.com/s/1Se-RrBko7v-UdMvTK_I77g 提取码:ygtl 特征量有十维,target为聚类目标量,可用来后期校验结果正确性

2、核心代码 import numpy as np import pandas as pd import random # 读取数据 read_df = pd.read_csv('text_datas.csv') target = read_df.iloc[:, -1] data = read_df.iloc[:, 1:-1] k = 7 n = data.shape[0] dis = np.zeros([n, k + 1]) # 随机选取中心 center = np.array([data.iloc[random.randint(0, n - 1), :]]) while center.shape[0] <= k - 1: temp_dis = np.zeros([n, center.shape[0]]) # 求样本点到聚类中心点的距离 for i in range(center.shape[0]): temp_dis[::, i] = ((data - center[i]) ** 2).sum(axis=1) # 计算其和最近的一个“种子点”的距离 D = np.min(temp_dis, axis=1) # 把这些距离加起来,取一个能落在其中的随机值R R = random.uniform(0, D.sum()) for i in range(D.shape[0]): R -= D[i] if R <= 0: break # 此时的点就是下一个“种子点” center = np.append(center, np.array([data.iloc[i, :]]), axis = 0) iter_ = 500 while iter_ > 0: # 求样本点到聚类中心点的距离 for i in range(center.shape[0]): dis[::, i] = ((data - center[i]) ** 2).sum(axis=1) # 归类 dis[:, -1] = np.argmin(dis[:, :-1], axis=1) # 求新的聚类中心 new_center = np.zeros_like(center) for j in range(k): new_center[j, :] = data.values[dis[:, -1] == j, :].mean(axis=0) # 如果点簇不再变动 if (center==new_center).all(): break center = new_center iter_ -= 1 print('循环{}次'.format(500-iter_)) #pca降维 from sklearn.decomposition import PCA pca = PCA(n_components=2) newData = pca.fit_transform(data) newData = pd.DataFrame(newData) # 可视化 import matplotlib.pyplot as plt x = np.array(newData.iloc[:, 0]) y = np.array(newData.iloc[:, 1]) # 原数据 plt.subplot(2,1,1) plt.scatter(x, y, c=np.array(target)) # 预测数据 plt.subplot(2,1,2) plt.scatter(x, y, c=dis[:, -1]) plt.show()

运行结果截图:

3、完整项目

对核心代码做“亿点点”的改造和包装之后就做成了文章开头的样子,截图如下: 项目完整代码下载链接:

点击跳转


结语

创作不易,如果您觉得写得还行,还请点赞、评论、收藏走一波。


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #kmeans #python实现