iris聚类算法应用实例
算法前提iris数据集已经具备
导包
import pygal
from sklearn.cluster import KMeans
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
获取iris数据集
前四个变量分别为花萼的长度,宽度,及花瓣的长度,宽度。最后一个变量为鸢尾花所属的种类,可将其聚为三类
iris = pd.read_csv('irisS.csv', names=["Sepal_Length", "Sepal_Width", "Petal_Length", "Petal_Width", "Species"])
print(iris)
提取出用于建模的数据集x
x = iris.drop(labels='Species', axis=1)
构建KMeans模型,设置KMeans类的n_clusters为3
kmeans = KMeans(n_clusters=3)
kmeans.fit(x)
聚类结果标签
x['cluster'] = kmeans.labels_
各类频数统计
print(x['cluster'].value_counts())
三个簇的簇中心
centers = kmeans.cluster_centers_
绘制聚类算法的散点图
sns.lmplot(x='Sepal_Length', y='Sepal_Width', hue='cluster', markers=['^', 's', 'o'], data=x, fit_reg=False, scatter_kws={'alpha': 0.8}, legend_out=False)
plt.scatter(centers[:, 2], centers[:, 3], marker='*', color='black', s=130)
plt.xlabel('花瓣的长度')
plt.ylabel('花瓣宽度')
中文乱码和坐标轴负号得处理
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False
图形显示
plt.show()
图片展示
增加一个辅助列, 将不同的花种映射到10,1,2三种值,目的是方便后面图形的对比
iris['Species_map'] = iris.Species.map({'Iris-setosa': 0, 'Iris-versicolor': 1, 'Iris-virginica': 2})
绘制原始数据三个类别的散点图
sns.lmplot(x='Sepal_Length', y='Sepal_Width', hue='Species_map', markers=['^', 's', 'o'], data=iris, fit_reg=False, scatter_kws={'alpha': 0.8}, legend_out=False)
plt.xlabel('花瓣的长度')
plt.ylabel('花瓣宽度')
图形显示
plt.show()
图片展示
调用Radar这个类, 并设置雷达图的填充及数据范围
radar_chart = pygal.Radar(fill=True)
添加雷达图各项顶点的名称
radar_chart.x_labels = ['花萼长度', '花萼宽度', '花瓣长度', '花瓣宽度']
绘制三个雷达图区域,代表三个簇中心的指标值
radar_chart.add('c1', centers[0])
radar_chart.add('c2', centers[1])
radar_chart.add('c3', centers[2])
保存图形
不能用plt.show展示
radar_chart.render_to_file('radar_chart.svg')
图片