2020.4.14 K均值算法
1). 扑克牌手动演练k均值聚类过程:>30张牌,3类
2). *自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。(加分题)
3). 用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示.
4). 鸢尾花完整数据做聚类并用散点图显示.
5).想想k均值算法中以用来做什么?
答:
1)扑克牌手动演练k均值聚类过程:>30张牌,3类
随机选取三个中心(8,3,2);
经过第一步后,变为(9,4,2);
经过第二步后,变为(10,6,2),一直不变,聚类中心为(10,6,2);
2)自主编写K-means算法 ,以鸢尾花花瓣长度数据做聚类,并用散点图显示。
# -*- coding:utf-8 -*- from sklearn.datasets import load_iris import pandas as pd import numpy as np import matplotlib.pyplot as plt #选取数据空间中的K个对象作为初始中心,每个对象代表一个聚类中心; def initcenter(data, k): m = data.shape[1] # 样本的属性个数 center = [] temp = 0 temptemp = 0 for i in range(k): temp = np.random.randint(0, len(data)) if temp != temptemp: center.append(data[temp, :]) temptemp = temp else: print("重复啦") i -= 1 center = np.array(center) return center def nearest(center, x): distance = [] for j in range(k): distance.append(sum((x - center[j,:]) ** 2)) # print(np.argmin(distance)) y = np.argmin(distance) return y def xclassify(data, y, center): for index,x in enumerate(data): y[index] = nearest(center, x) return y def kcmean(data, y, center, k): m = data.shape[1] center_new = np.zeros([k, m]) for i in range(k): index = y == i center_new[i, :] = np.mean(data[index, :], axis=0) if np.all(center_new == center): return center,False else: center = center_new return center,True #初始化;调用生成center if __name__ == '__main__': data = load_iris().data center = initcenter(data,3) k = int(input("请输入质心个数:")) y = np.zeros(len(data)) flag = True while flag: y = xclassify(data, y, center) center, flag = kcmean(data, y, center, k) print("聚类结果:",y) for x in range(len(data)): plt.scatter(data[x][0], data[x][1], s=30, c='b', marker='.') for k in range(len(center)): plt.scatter(center[k][0], center[k][1], s=60, c='r', marker='D') plt.show()
运行结果:
可视化结果:
3)用sklearn.cluster.KMeans,鸢尾花花瓣长度数据做聚类,并用散点图显示.
# -*- coding:utf-8 -*- from sklearn.datasets import load_iris from sklearn.cluster import KMeans import matplotlib.pyplot as plt data_iris = load_iris().data speal_width = data_iris[:,2] X = speal_width.reshape(-1,1) X.shape kmeans_model = KMeans(n_clusters=3) kmeans_model.fit(X) kmeans_model.predict([[3.5]]) y_predict = kmeans_model.predict(X) kmeans_model.cluster_centers_ kmeans_model.labels_ plt.scatter(X[:,0],X[:,0],c=y_predict,s=50,cmap="rainbow") plt.show()
可视化结果:
4)鸢尾花完整数据做聚类并用散点图显示.
# -*- coding:utf-8 -*- from sklearn.datasets import load_iris from sklearn.cluster import KMeans import matplotlib.pyplot as plt data_iris = load_iris().data kmeans_model = KMeans(n_clusters=3) kmeans_model.fit(data_iris) y_predict1 = kmeans_model.predict(data_iris) kmeans_model.cluster_centers_ kmeans_model.labels_ plt.scatter(data_iris[:,2],data_iris[:,3],c=y_predict1,s=50,cmap="rainbow") plt.show()
可视化结果:
5)想想k均值算法中以用来做什么?
1.文档分类器
根据标签、主题和文档内容将文档分为多个不同的类别。这是一个非常标准且经典的K-means算法分类问题。首先,需要对文档进行初始化处理,将每个文档都用矢量来表示,并使用术语频率来识别常用术语进行文档分类,这一步很有必要。然后对文档向量进行聚类,识别文档组中的相似性。
2.客户分类
聚类能过帮助营销人员改善他们的客户群(在其目标区域内工作),并根据客户的购买历史、兴趣或活动监控来对客户类别做进一步细分。
3.球队状态分析
分析球员的状态一直都是体育界的一个关键要素。随着竞争越来愈激烈,机器学习在这个领域也扮演着至关重要的角色。如果你想创建一个优秀的队伍并且喜欢根据球员状态来识别类似的球员,那么K-means算法是一个很好的选择。
4.乘车数据分析
面向大众公开的Uber乘车信息的数据集,为我们提供了大量关于交通、运输时间、高峰乘车地点等有价值的数据集。分析这些数据不仅对Uber大有好处,而且有助于我们对城市的交通模式进行深入的了解,来帮助我们做城市未来规划。
5.网络分析犯罪分子
网络分析是从个人和团体中收集数据来识别二者之间的重要关系的过程。网络分析源自于犯罪档案,该档案提供了调查部门的信息,以对犯罪现场的罪犯进行分类。
6.呼叫记录详细分析
通话详细记录(CDR)是电信公司在对用户的通话、短信和网络活动信息的收集。将通话详细记录与客户个人资料结合在一起,这能够帮助电信公司对客户需求做更多的预测。
原文地址:https://www.cnblogs.com/Azan1999/p/12695951.html
- 微信小游戏:无法进行网络请求的解决方案
- 微信跳一跳之深度实践
- 前端工程师在业余时间如何提高自身能力——造轮子
- 我是如何Hack掉一个机器人!
- SliferMenu详解
- Android 深入ViewPager补间动画,实现类京东商城首页广告Banner切换效果
- android抓屏
- android 仿qq手写板涂鸦
- listview动态获取数据
- toggbutton
- android软件开发之webView.addJavascriptInterface循环渐进【一】
- android的listview item点击详解
- android之surfaceview画图
- viewgroup实现item拖动效果
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 第004课 vi编辑器的使用详解
- 【前端JQ】jQuery赋值checked的几种写法,attr()方法不好使,建议使用prop()方法。
- 达梦数据库适配问题
- Angular Component UI单元测试的隔离策略
- 第005课 linux进阶命令(文件查找,文件解压操作详解)
- 没有这 29 款插件的 Chrome 是没有灵魂的
- 第006课 开发板熟悉与体验
- Angular Observable数据类型的单元测试数据准备
- 第007课 裸机开发步骤和工具使用(SourceInght NotePad++使用)
- Angular jasmine.expect单步调试
- 第008课 第1个ARM裸板程序及引申(点亮LED灯)
- SharedPreferences VS MMKV
- 第009课 gcc和arm-linux-gcc和Makefile
- Go 每日一库之 quicktemplate
- 第010课 掌握Jz2440_ARM芯片时钟体系