本文的数据集:

number,density,sugercontent
1,0.697,0.460
2,0.774,0.376
3, 0.634,0.264
4,0.608,0.318
5,0.556,0.215
6,0.403,0.237
7,0.481,0.149
7,0.666,0.091
8,0.437,0.211
9,0.666,0.091

文章的加载路径也是电脑本地的路径,所以应用时注意路径和读取数据的名称的关系

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt

未优化中心点
数据加载和预处理


class Data_processing(object):def __init__(self,path):self.path=pathdef load(self):'''加载数据集'''data_train=pd.read_csv(self.path)data_train=data_train.loc[0:,['density','sugercontent']]data_train=np.array(data_train)return data_traindef Norm(self):'''标准化'''data_train=self.load()data_max=data_train.max(axis=0)data_min=data_train.min(axis=0)final_data=(data_train-data_min)/(data_max-data_min)return final_data

加载数据

data=Data_processing('./相关资料/watermelon.csv').Norm()

k-means


class k_means(object):def __init__(self,data,k,maxiter,center1,center2):'''data:数据集k(这里没用到,默认是两个)maxiter:最大迭代次数center1,center2:初始化的点'''self.data=dataself.k=kself.maxiter=maxiterself.center=[center1,center2]def get_new_centers(self):distance1=np.linalg.norm(self.data-self.center[0],axis=1).reshape(-1,1)distance2=np.linalg.norm(self.data-self.center[1],axis=1).reshape(-1,1)distances=np.concatenate((distance1,distance2),axis=1)indexs=distances.argmin(axis=1)label1=np.where(indexs==0)label2=np.where(indexs==1)group1=self.data[label1]group2=self.data[label2]center1=np.mean(group1,axis=0)center2=np.mean(group2,axis=0)return center1,center2   def get_final_center(self):for i in range(self.maxiter):self.center[0],self.center[1]=self.get_new_centers()return self.center[0],self.center[1]

得到中心点

center1,center2=k_means(data,2,100,data[0],data[15]).get_final_center()

可视化

class visual(object):def __init__(self,center1,center2,data):self.center=[center1,center2]self.data=datadef get_two_groups(self):distance1=np.linalg.norm(self.data-self.center[0],axis=1).reshape(-1,1)distance2=np.linalg.norm(self.data-self.center[1],axis=1).reshape(-1,1)distances=np.concatenate((distance1,distance2),axis=1)indexs=distances.argmin(axis=1)label1=np.where(indexs==0)label2=np.where(indexs==1)group1=self.data[label1]group2=self.data[label2]return group1,group2def vis(self):group1,group2= self.get_two_groups()plt.scatter(group1[:,0],group1[:,1],color='red')plt.scatter(group2[:,0],group2[:,1],color='blue')

可视化应用

visual(center1,center2,data).vis()

优化中心点

def get_good_center(data):'''寻找相距最远的两个点,来作为初始化的点'''m,n=data.shapeindex_distance=np.zeros((m,n))for i in range(m):distance=np.linalg.norm(data-data[i],axis=1).reshape(-1,1)max_dis=max(distance)[0]index=distance.argmax(axis=0)index_distance[i,0],index_distance[i,1]=index,max_discenter1_index=index_distance[:,1].argmax(axis=0)center2_index=index_distance[center1_index,0]center11=data[int(center1_index)]center22=data[int(center2_index)]return center11,center22

得到中心点和可视化

center1,center2=get_good_center(data)
center1,center2=k_means(data,2,100,center1,center2).get_final_center()
visual(center1,center2,data).vis()

k-means python实现相关推荐

  1. k均值聚类算法(K Means)及其实战案例

    算法说明 K均值聚类算法其实就是根据距离来看属性,近朱者赤近墨者黑.其中K表示要聚类的数量,就是说样本要被划分成几个类别.而均值则是因为需要求得每个类别的中心点,比如一维样本的中心点一般就是求这些样本 ...

  2. OpenCV的k - means聚类 -对图片进行颜色量化

    OpenCV的k - means聚类 目标 学习使用cv2.kmeans()数据聚类函数OpenCV 理解参数 输入参数 样品:它应该的np.float32数据类型,每个特性应该被放在一个单独的列. ...

  3. OpenCV官方文档 理解k - means聚类

    理解k - means聚类 目标 在这一章中,我们将了解k - means聚类的概念,它是如何工作等. 理论 我们将这个处理是常用的一个例子. t恤尺寸问题 考虑一个公司要发布一个新模型的t恤. 显然 ...

  4. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  5. 文献记录(part89)--I-k-means-+:An iterative clustering algorithm based on an enhanced k -means

    学习笔记,仅供参考,有错必究 关键词:k均值:解决方案改进:准确的k均值:迭代改进 I-k-means-+:An iterative clustering algorithm based on an ...

  6. K means 图片压缩

    k-means的基本原理较为清晰,这里不多赘述,本次博客主要通过基础的k means算法进行图像的压缩处理. 原理分析 在彩色图像中,每个像素的大小为3字节(RGB),可以表示的颜色总数为256 * ...

  7. 为了联盟还是为了部落 | K means

    1. 问题 人类有个很有趣的现象,一群人在一起,过一段时间就会自发的形成一个个的小团体.好像我们很擅长寻找和自己气质接近的同类.其实不只是人类,数据也有类似情况,这就是聚类(Clustering)的意 ...

  8. python 聚类分析 k means

    Kmeans 是一种动态聚类方法,其基本思想是:首先随机选取 K 个点作为初始凝聚点,按照距离最近原则划分为 K 类:然后重新计算 K 个类的重心作为新的凝聚点,再按照距离最近原则重新分类:重复这一过 ...

  9. 剑指offer 40.最小的 K 个数 python代码

    题目 寻找数组中的最小的k个数,也叫topk问题. 牛客网测试地址 注意: 牛客网的提交需要将最终的结果排序 思路 快速排序的 partition() 方法,会返回一个整数 j 使得 a[l-j-1] ...

  10. kmeans聚类选择最优K值python实现

    Kmeans算法中K值的确定是很重要的. 下面利用python中sklearn模块进行数据聚类的K值选择 数据集自制数据集,格式如下: ①手肘法 手肘法的核心指标是SSE(sum of the squ ...

最新文章

  1. 继承和多态 1.0 -- 继承概念(is-a、has-a,赋值兼容规则,隐藏重定义)
  2. 圣诞节!教你用Python画棵圣诞树
  3. sicily 1004 I Conduit!
  4. Keycloak宣布不再适配Spring Boot和Spring Security
  5. HDU 1019 Least Common Multiple
  6. CentOS/Linux 卸载MATLAB
  7. 机器学习笔记(十三):降维
  8. C和C++实务精选丛书
  9. zabbix v3.0安装部署【转】
  10. java hashmap 去重_java数组去重的两种方法
  11. C 标准库中输出到字符串、到文件的相关函数
  12. 高等代数期末考试题库及答案_高等代数Ⅱ答案期末答案
  13. 希尔密码(原理+代码)
  14. WCF学习记录【一】
  15. 关于手画猫,耳朵涂颜色
  16. 国内无代码平台数据统计功能对比
  17. 最热门的国人开发开源软件 TOP 50
  18. Pycharm导入同级目录模块解决办法汇总
  19. ode45 求常微分非线性方程
  20. IPSEC VPN相关问题

热门文章

  1. 猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一
  2. 一个事物两个方面的对比举例_对比属于修辞手法吗
  3. 如何给多个Word文档创建一个有连续页码的目录
  4. JAVA file列出所有文件_用Java代码列出一个目录下所有的文件
  5. 题目:给定一个数组并查找数组里边的元素(C实现),每日一题防止颓废~达咩~~
  6. 用python判断是否为闰年
  7. jmeter+csv+ant接口自动化测试--利用apache-ant执行测试用例并生成HTML格式测试报告(二)
  8. 中儒集团董事长朱宝先生一行到访亚信总部!
  9. 面试笔记 如何3秒钟看出一个人的实力?| 奸商行走江湖7年的经验分享
  10. FBI的阅人术_如何在一开始谈话的几分钟内,了解这个人?