python实现kmeans聚类
目录
一、先上手撸代码!
1、导库、导数据
2、核心算法
3、可视化部分
二、调库代码!(sklearn)
一、先上手撸代码!
1、首先是导入所需要的库和数据
import pandas as pd
import numpy as np
import random
import math
import matplotlib.pyplot as plt# 这两行代码解决 plt 中文显示的问题
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = Falsedf = pd.read_excel('13信科学生成绩.xlsx')
data = np.array(df)df.head(10)
先给大伙们看看数据集长啥样:
用matplotlib简单的可视化一下初始数据:
# 输入数据
x = data.T[0]
y = data.T[1]plt.scatter(x, y, s=50, c='r') # 画散点图
plt.xlabel('平时') # 横坐标轴标题
plt.ylabel('期末') # 纵坐标轴标题
plt.show()
2、接下来就是kmeans的核心算法了
k=3
i = 1min1 = data.min(axis = 0)
max1 = data.max(axis = 0)#在数据最大最小值中随机生成k个初始聚类中心,保存为t
centre = np.empty((k,2))
for i in range(k):centre[i][0] = random.randint(min1[0],max1[0])#平时成绩centre[i][1] = random.randint(min1[1],max1[1])#期末成绩while i<500:#计算欧氏距离def euclidean_distance(List,t):return math.sqrt(((List[0] - t[0])**2 + (List[1] - t[1])**2))#每个点到每个中心点的距离矩阵dis = np.empty((len(data),k))for i in range(len(data)):for j in range(k):dis[i][j] = euclidean_distance(data[i],centre[j])#初始化分类矩阵classify = []for i in range(k):classify.append([])#比较距离并分类for i in range(len(data)):List = dis[i].tolist()index = List.index(dis[i].min())classify[index].append(i)#构造新的中心点new_centre = np.empty((k,2))for i in range(len(classify)):new_centre[i][0] = np.sum(data[classify[i]][0])/len(classify[i])new_centre[i][1] = np.sum(data[classify[i]][1])/len(classify[i])#比较新的中心点和旧的中心点是否一样if (new_centre == centre).all():breakelse:centre = new_centrei = i + 1# print('迭代次数为:',i)
print('聚类中心为:',new_centre)
print('分类情况为:',classify)
注意!!!这里的k是指分成k类,读者可以自行选取不同的k值做实验
3、可视化部分(将不用类用不同颜色区分开来~~)
mark = ['or', 'ob', 'og', 'ok','sb', 'db', '<b', 'pb'] #红、蓝、绿、黑四种颜色的圆点
#mark=['sb', 'db', '<b', 'pb']
plt.figure(3)#创建图表1
for i in range(0,k):x=[]y=[]for j in range(len(classify[i])):x.append(data[classify[i][j]][0])y.append(data[classify[i][j]][1])plt.xlim(xmax=105,xmin=45)plt.ylim(ymax=85,ymin=-5)plt.plot(x,y,mark[i])#plt.show()
一起来康康可视化结果8!!
二、接下来是调库代码!(sklearn)
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn import metricsdf = pd.read_excel('13信科学生成绩.xlsx')
data = np.array(df)
y_pred=KMeans(n_clusters=3,random_state=9).fit_predict(data)
plt.scatter(data[:,0],data[:,1],c=y_pred)
plt.show()
print(metrics.calinski_harabasz_score(data,y_pred))
可视化结果和手撸的结果略有差别,有可能是数据集的问题,也有可能是k值选取的问题,各位亲们不需要担心!!!
呜呜呜本人第一次发博客记录自己的学习瞬间,有什么建议或者问题都可以提出来喔!copy了代码的小朋友不要忘了关注点赞么么哒!!
python实现kmeans聚类相关推荐
- Python使用K-means聚类算法进行分类案例一则
K-means算法是经典的基于划分的聚类方法,是十大经典数据挖掘算法之一,其基本思想是:以空间中k个点为中心进行聚类,对最靠近它们的对象归类.通过迭代的方法,逐次更新各聚类中心的值,直至得到最好的聚类 ...
- Python实现K-Means聚类算法
声明:代码的运行环境为Python3.Python3与Python2在一些细节上会有所不同,希望广大读者注意.本博客以代码为主,代码中会有详细的注释.相关文章将会发布在我的个人博客专栏<Pyth ...
- 基于python的K-means聚类提取图片主色
基于python+opencv的彩色图片主色提取--利用K-means聚类算法 一.K-means聚类算法 1.K-means算法原理 2. K-means聚类算法流程 3.sklearn库中skle ...
- [Python] 用K-means聚类算法进行客户分群
目录 一.背景 1.项目描述 2.数据描述 二.相关模块 三.数据可视化 1.数据读取 2.数据可视化 2.1 平行坐标图 2.2 年龄/年收入/消费分数的分布 2.3 年龄/年收入/消费分数的柱状图 ...
- 利用Python实现K-Means聚类并进行图形化展示
利用K-means进行聚类,显示聚类结果的各类别的数量,最终进行图形化展示 . import pandas as pd import numpy as np import matplotlib.pyp ...
- 手把手的K-means聚类算法教程(含简介及教育数据应用实例 Python实现)
手把手的K-means聚类算法教程(含简介及教育数据应用实例 Python实现) 1. K-MEANS的基本原理 2. 数据预处理 2.1 数据读取:from Excel 2.2 数据预处理:标准化Z ...
- kmeans聚类算法python实例
KMeans 聚类算法是一种基于距离的聚类算法,用于将数据点分成若干组.在 Python 中,可以使用 scikit-learn 库中的 KMeans 函数来实现 KMeans 聚类算法. 以下是一个 ...
- Python使用系统聚类方法进行数据分类案例一则
首先解释一下为啥最近发的文章中代码都是截图而不是文本,这样做主要是希望大家能对着代码敲一遍而不是直接复制运行得到结果就算了,这样可以加深印象,学到更多东西.当然,这样直接截图也节省了很多排版需要的时间 ...
- 魔方机器人02 使用opencv-python进行颜色识别及K-Means聚类算法
文章目录 安装opencv库 魔方状态识别 识别方案思路 识别方案简介 实践经验 在图像中标定位置 聚类算法 安装opencv库 如果你是Windows系统,在anaconda搭建的环境里运行以下命令 ...
最新文章
- 一个form表单,多个提交按钮(实现不同功能和地址的提交)
- 微信小程序中用setData修改一个对象的属性值
- Matrix Power Series
- apache的httpd.conf中文注释
- hdu 1159 Common Subsequence (dp)
- (转)千万别熬夜:身体器官晚上工作时间表一览
- [Java基础]File基础
- L Machining Disc Rotors
- Jupyter Notebook——夏侯南溪常用的快捷键
- ruby学习--block
- mysql主从同步破坏测试_mysql主从同步 错误测试(1)
- Android多媒体学习一:Android中Image的简单实例。
- Android NDK 入门与实践
- 机器学习_回归和分类的区别
- MAC地址及对应的厂商
- KVM虚拟化技术(理论知识+搭建虚拟化平台实验步骤)
- 学会php又忘了,要学会忘记的说说,学会忘记一个人的说说
- 前端架构--从入门到微前端
- 【安装+配置】Mac服务端svn
- 顾往前行,我的前端之路系列(二)