kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
一.分散性聚类(kmeans)
算法流程:
1.选择聚类的个数k.
2.任意产生k个聚类,然后确定聚类中心,或者直接生成k个中心。
3.对每个点确定其聚类中心点。
4.再计算其聚类新中心。
5.重复以上步骤直到满足收敛要求。(通常就是确定的中心点不再改变。
优点:
1.是解决聚类问题的一种经典算法,简单、快速
2.对处理大数据集,该算法保持可伸缩性和高效率
3.当结果簇是密集的,它的效果较好
缺点
1.在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用
2.必须事先给出k(要生成的簇的数目),而且对初值敏感,对于不同的初始值,可能会导致不同结果。
3.不适合于发现非凸形状的簇或者大小差别很大的簇
4.对躁声和孤立点数据敏感
这里为了看鸢尾花的三种聚类算法的直观区别,所以不用具体算法实现,只需要调用相应函数即可。
程序如下:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from sklearn import datasets
iris = datasets.load_iris()
X = iris.data[:, :4] # #表示我们取特征空间中的4个维度
print(X.shape)
# 绘制数据分布图
plt.scatter(X[:, 0], X[:, 1], c="red", marker='o', label='see')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend(loc=2)
plt.show()
estimator = KMeans(n_clusters=3) # 构造聚类器
estimator.fit(X) # 聚类
label_pred = estimator.labels_ # 获取聚类标签
# 绘制k-means结果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0')
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1')
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend(loc=2)
plt.show()
运行结果:
二.结构性聚类(层次聚类)
1.凝聚层次聚类:AGNES算法(自底向上)
首先将每个对象作为一个簇,然后合并这些原子簇为越来越大的簇,直到某个终结条件被满足
2.分裂层次聚类:DIANA算法(自顶向下)
首先将所有对象置于一个簇中,然后逐渐细分为越来越小的簇,直到达到了某个终结条件。
这里我选择的AGNES算法。
程序如下:
from sklearn import datasets
from sklearn.cluster import AgglomerativeClustering
import matplotlib.pyplot as plt
from sklearn.metrics import confusion_matrix
import pandas as pd
iris = datasets.load_iris()
irisdata = iris.data
clustering = AgglomerativeClustering(linkage='ward', n_clusters=3)
res = clustering.fit(irisdata)
print ("各个簇的样本数目:")
print (pd.Series(clustering.labels_).value_counts())
print ("聚类结果:")
print (confusion_matrix(iris.target, clustering.labels_))
plt.figure()
d0 = irisdata[clustering.labels_ == 0]
plt.plot(d0[:, 0], d0[:, 1], 'r.')
d1 = irisdata[clustering.labels_ == 1]
plt.plot(d1[:, 0], d1[:, 1], 'go')
d2 = irisdata[clustering.labels_ == 2]
plt.plot(d2[:, 0], d2[:, 1], 'b*')
plt.xlabel("Sepal.Length")
plt.ylabel("Sepal.Width")
plt.title("AGNES Clustering")
plt.show()
运行结果:
三.密度聚类之DBSCAN算法:
算法:
需要两个参数:ε (eps) 和形成高密度区域所需要的最少点数 (minPts)
它由一个任意未被访问的点开始,然后探索这个点的 ε-邻域,如果 ε-邻域里有足够的点,则建立一个新的聚类,否则这个点被标签为杂音。注意这个点之后可能被发现在其它点的 ε-邻域里,而该 ε-邻域可能有足够的点,届时这个点会被加入该聚类中。
程序如下:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans
from sklearn import datasets
from sklearn.cluster import DBSCAN
iris = datasets.load_iris()
X = iris.data[:, :4] # #表示我们只取特征空间中的4个维度
print(X.shape)
# 绘制数据分布图
plt.scatter(X[:, 0], X[:, 1], c="red", marker='o', label='see')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend(loc=2)
plt.show()
dbscan = DBSCAN(eps=0.4, min_samples=9)
dbscan.fit(X)
label_pred = dbscan.labels_
# 绘制k-means结果
x0 = X[label_pred == 0]
x1 = X[label_pred == 1]
x2 = X[label_pred == 2]
plt.scatter(x0[:, 0], x0[:, 1], c="red", marker='o', label='label0')
plt.scatter(x1[:, 0], x1[:, 1], c="green", marker='*', label='label1')
plt.scatter(x2[:, 0], x2[:, 1], c="blue", marker='+', label='label2')
plt.xlabel('sepal length')
plt.ylabel('sepal width')
plt.legend(loc=2)
plt.show()
运行结果:
改变参数后:
四、结果分析
从上面三种实验截图可以看出,k-means聚类和AGNES层次聚类分析结果差不多的三类,与DBSCAN的结果不一样。为啥不一样,这就取决于算法本身的优缺点了。
k-means对于大型数据集也是简单高效、时间复杂度、空间复杂度低。 最重要是数据集大时结果容易局部最优;需要预先设定K值,对最先的K个点选取很敏感;对噪声和离群值非常敏感;只用于numerical类型数据;不能解决非凸数据。
DBSCAN对噪声不敏感;能发现任意形状的聚类。 但是聚类的结果与参数有很大的关系;DBSCAN用固定参数识别聚类,但当聚类的稀疏程度不同时,相同的判定标准可能会破坏聚类的自然结构,即较稀的聚类会被划分为多个类或密度较大且离得较近的类会被合并成一个聚类。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
本文标题: python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
本文地址: http://www.cppcns.com/jiaoben/python/263818.html
kmeans鸢尾花分类python代码_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)相关推荐
- python音频聚类_python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan)
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 发布时间:2020-08-31 21:23:24
- 随机森林分类算法python代码_Python机器学习笔记:随机森林算法
随机森林算法的理论知识 随机森林是一种有监督学习算法,是以决策树为基学习器的集成学习算法.随机森林非常简单,易于实现,计算开销也很小,但是它在分类和回归上表现出非常惊人的性能,因此,随机森林被誉为&q ...
- 第k大的数python代码_Python实现查找数组中任意第k大的数字算法示例
本文实例讲述了Python实现查找数组中任意第k大的数字算法.分享给大家供大家参考,具体如下: 模仿partion方法,当high=low小于k的时候,在后半部分搜索,当high=low大于k的时候, ...
- python 三种聚类算法(K-means,AGNES,DBScan)
python实现鸢尾花三种聚类算法(K-means,AGNES,DBScan) 更新时间:2019年06月27日 14:44:44 作者:weixin_42134141 这篇文章主要介绍了pyth ...
- python代码的注释贿一种方式、那就是使用井符号号_Python 代码的注释只有一种方式,那就是使用 # 符号。 (2.0分)_学小易找答案...
[判断题]Python 变量名区分大小写,所以 student 和 Student 不是同一个变量. (2.0分) [判断题]在 Python 中可以使用 for 作为变量名. (2.0分) [填空题 ...
- 【Java后台】Java执行Python代码的3类5种情况测试【Java源码+Python源码举例】
1.why python拥有的某些库要比Java强大,也拥有一些比Java更擅长的领域,python可以搭建后端让Java调用接口,但某些时候我们用到的python代码可能并不多也许只有一个算法,此时 ...
- python代码的注释只有一种方式、那就是使用_尔雅学习通APP2020年细胞的奥秘答案查题公众号...
[填空题]饱和水蒸气通过间壁加热空气,间壁温度接近于 的温度. [判断题]Python代码的注释只有一种方式,那就是使用 # . A. 正确 B. 错误 [单选题]胚胎最易受病毒感染而造成胎儿发育畸形 ...
- python代码的注释只有一种方式、那就是使用_[多选] 《建立世贸组织协定》附件4包括的诸边贸易协议有()....
Python代码的注释只有一种方式,那就是使用#符号 [填空题]Some young people like pop music, while still others like music. 以能源 ...
- python运行时很卡-Python代码运行速度慢?这五种方法很管用
对于Python很多人还是比较了解的,虽然说Python有很多优势但同样具有劣势,Python最大的劣势就是运行效率慢,那么如何提高Python代码运行速度呢?这五种方法很管用. 1.PyPy:在选择 ...
最新文章
- linux网卡钩子,linux-Netfilter钩子注册与网络子系统
- Java:希望每天叫醒你的不是闹钟而是梦想!
- Android更新平台架构方案
- 数据结构与算法 | 带头双向循环链表
- python函数应用(1)
- UI设计干货素材|滑动动效设计模板
- React Router V6 新特性
- CC2640R2学习笔记—CCS环境最简单配置、下载运行第一个程序(OLED)
- 求解不定方程 (扩展欧几里得算法)
- 【MINI2440】linux系统下载全流程
- Java多文件生成并压缩下载
- Python项目实战:银行信用卡客户流失预测
- css 有关边框的属性_边框样式(CSS属性)
- 25. Green Living 绿色生活
- 第三方登陆--QQ登陆
- 用计算机专业起情侣网名,带对方名字的情侣网名最新精选
- 测试用例颗粒度实例列举
- HtmlUnit入门教程
- 毕业设计一周一记04
- python答案大全_大学慕课2020用Python玩转数据答案大全
热门文章
- 【渝粤教育】电大中专幼儿园课程论 (7)作业 题库
- 【渝粤教育】电大中专幼儿园课程论 (1)作业 题库
- 【渝粤教育】广东开放大学 会展营销 形成性考核 (56)
- 【渝粤题库】国家开放大学2021春2718动物生理基础题目
- 马尔可夫蒙特卡罗 MCMC 原理及经典实现
- 计算机二级web题目(7.1)--综合选择题1
- 基于锁相环的定时误差调整
- 持久化技术SharedPreferences存储
- 有没有查计算机组成的答案得,计算机组成答案.doc
- cypress测试脚本_Cypress 自动化测试学习使用