import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
iris_dataset = load_iris() #内置函数载入iris数据集
iris_fs = iris_dataset['data'] #取出iris数据集的特征
iris_lb = iris_dataset['target'] #取出iris数据集的标签
x1 = iris_dataset.data[:, 0] # X- Axis -sepal length
y1 = iris_dataset.data[:, 1] # Y- Axis - sepal width
x2 = iris_dataset.data[:, 2] # X- Axis - petal length
y2 = iris_dataset.data[:, 3] # Y- Axis - petal width
species = iris_dataset.target # Species 标签数据
# Scatterplot 对原始数据进行可视化,分别以花萼特征(长、宽)和花瓣特征(长、宽)进行二维绘图
plt.figure(figsize=(10,8))
plt.subplot(221)
plt.title("Iris Dataset - Classification By Sepal Sizes")
plt.scatter(x1, y1, c = species)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xticks(())
plt.yticks(()) # 根据Sepal(花萼)绘制散点图,观察原始信息
plt.subplot(222)
plt.title("Iris Dataset - Classification By Petal Sizes")
plt.scatter(x2, y2, c = species)
plt.xlabel('Petal length')
plt.ylabel('Petal width')
plt.xticks(())
plt.yticks(()) # 根据Petal(花瓣)绘制散点图,观察原始信息
# 通过k-means进行数据的聚类
kmeans = KMeans(n_clusters = 3, init = 'k-means++', algorithm = 'auto' , max_iter = 100, n_init = 10, random_state = 2022) #关键参数n_cluster,类别中心数
y_kmeans = kmeans.fit_predict(iris_fs)
#计算准确度
c = 0
for i in range(150):
if(y_kmeans[i] == iris_lb[i]):
c = c + 1
print("准确度:%.2f%%\n" %(c*100/150))
#计算轮廓系数,取值范围为[-1, 1],-1表示分类效果差,1表示分类效果好
print("轮廓系数:")
print(silhouette_score(iris_fs, iris_lb))
# 聚类结果用第1,2列(花萼)的特征表示
plt.subplot(223)
plt.scatter(iris_fs[y_kmeans == 0, 0], iris_fs[y_kmeans == 0, 1], c="red", marker='o', label = 'Iris-setosa')
plt.scatter(iris_fs[y_kmeans == 1, 0], iris_fs[y_kmeans == 1, 1], c="green", marker='o', label = 'Iris-versicolour')
plt.scatter(iris_fs[y_kmeans == 2, 0], iris_fs[y_kmeans == 2, 1], c="blue", marker='o', label = 'Iris-virginica') # 聚类结果可视化简化coding
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:,1], c = 'yellow', label = 'Center') # 聚类中心
plt.title("K-means clustering plot by Sepal")
plt.legend()
# 聚类结果用第3,4列(花瓣)的特征表示
plt.subplot(224)
fs0 = iris_fs[y_kmeans == 0]
fs1 = iris_fs[y_kmeans == 1]
fs2 = iris_fs[y_kmeans == 2]
plt.scatter(fs0[:, 2], fs0[:, 3], c="red", marker='o', label='Iris-setosa')
plt.scatter(fs1[:, 2], fs1[:, 3], c="green", marker='o', label='Iris-versicolour')
plt.scatter(fs2[:, 2], fs2[:, 3], c="blue", marker='o', label='Iris-virginica') # 聚类结果可视化细化coding
plt.scatter(kmeans.cluster_centers_[:, 2], kmeans.cluster_centers_[:,3], c = 'yellow', label = 'Center') # 聚类中心
plt.title("K-means clustering plot by Petal")
plt.legend()
plt.show()
天津理工大学辨识技术实验四 + 动态聚类(附源代码)
版权申诉
5星 · 超过95%的资源 160 浏览量
2022-06-18
12:16:18
上传
评论
收藏 566KB ZIP 举报
森诺Alyson
- 粉丝: 6625
- 资源: 18
最新资源
- (大赛作品)STM32实现的F072RB NUCLEO智能家居控制.zip
- STM32实现的数字示波器源码+数字信号处理教程、配套实例.zip
- 【cookie续续】【cookie续续】【cookie续续】
- 低功耗STM32实现的F411开发板(原理图+PCB源文件+官方例程+驱动等).zip
- 基于stm32实现的 nucleo-L476的智能灯(操作说明+源码).zip
- 基于STM32实现的 NUCLEO板设计彩色LED照明灯(纯cubeMX开发).zip
- 基于STM32实现的 的联合调试侦听设备解决方案(原理图、PCB源文件、调试工具、视频).zip
- 基于STM32实现的 人群定位、调速智能风扇设计(程序、设计报告、视频演示).zip
- 哔哩下载姬(DownKyi)
- 千纬认字app再次更新,增加部首、笔画动画功能
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
前往页