如何在Python中绘制聚类散点图?
在数据挖掘和机器学习领域中,聚类分析是一种重要的技术手段,它的主要目的是将数据集中的样本按照不同的特征进行自动分组,以便于我们进一步发现数据中的规律和结构。而在实际操作中,聚类结果的可视化展示也非常重要,可以帮助我们更好地理解和分析数据,较为常见的可视化方式就是聚类散点图。本篇文章将介绍如何在Python中使用matplotlib和seaborn这两个常见的可视化库,展示聚类散点图。
阅读更多:Python 教程
1. 导入数据
在编写代码前,我们需要先导入需要使用的Python库,并且读取我们的数据集。在这里,我们使用一个简单的鸢尾花数据集作为例子。这个数据集包含150个样本,每个样本包含4个特征:花萼长度,花萼宽度,花瓣长度和花瓣宽度,以及其对应的真实标签(即鸢尾花的种类,可分为Setosa、Versicolour和Virginica三种)。
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 读取数据集
df = pd.read_csv('iris.csv')
# 打印数据集前5行
print(df.head())
运行上面的代码,我们可以看到鸢尾花数据集的前5行如下:
SepalLength SepalWidth PetalLength PetalWidth Species
0 5.1 3.5 1.4 0.2 Iris-setosa
1 4.9 3.0 1.4 0.2 Iris-setosa
2 4.7 3.2 1.3 0.2 Iris-setosa
3 4.6 3.1 1.5 0.2 Iris-setosa
4 5.0 3.6 1.4 0.2 Iris-setosa
2. 数据预处理
在进行聚类分析前,我们需要先进行数据的预处理。这里我们将使用一些简单的方法,包括:
– 将字符串类型的标签转化成数字类型
– 将数据归一化
– 去除无用的标签列
# 将字符串类型的标签转化成数字类型
df['Species'] = pd.factorize(df['Species'])[0]
# 将数据归一化
from sklearn.preprocessing import StandardScaler
features = ['SepalLength', 'SepalWidth', 'PetalLength', 'PetalWidth']
df[features] = StandardScaler().fit_transform(df[features])
# 去除无用的标签列
df = df.drop(['Species'], axis=1)
# 打印数据集统计信息
print(df.describe())
运行上面的代码,我们可以看到经过数据预处理后,鸢尾花数据集的前5行如下:
SepalLength SepalWidth PetalLength PetalWidth
0 -0.900681 1.032057 -1.341272 -1.312977
1 -1.143017 -0.124958 -1.341272 -1.312977
2 -1.385353 0.337848 -1.398138 -1.312977
3 -1.506521 0.106445 -1.284407 -1.312977
4 -1.021849 1.263460 -1.341272 -1.312977
3. 聚类分析
有了预处理好的数据之后,我们就可以进行聚类分析了。这里我们将使用k-means算法进行聚类。k-means算法是一种基于距离的聚类算法,它根据样本之间的距离将样本划分为k个簇,使得同簇内的样本距离尽可能小,不同簇之间的距离尽可能大。在这里,我们将根据数据集的四个特征将其划分为3个簇。
from sklearn.cluster import KMeans
# 进行k-means聚类
kmeans = KMeans(n_clusters=3, random_state=0).fit(df)
# 将聚类结果存储在数据集中
df['Cluster'] = kmeans.labels_
# 打印每个簇的样本数量
print(df['Cluster'].value_counts())
运行上面的代码,我们可以看到聚类结果的信息,其中Cluster列表示聚类结果的簇标签(从0到2),对应于每个样本被分到的簇的标签。同时我们可以发现,每个簇的样本数量不完全相同,这也表明了不同簇之间存在一定的差异。
0 62
1 50
2 38
Name: Cluster, dtype: int64
4. 绘制聚类散点图
在得到聚类结果后,我们来尝试将其可视化。这里我们将使用matplotlib和seaborn库来绘制聚类散点图。聚类散点图的横轴和纵轴分别表示数据集中的两个特征,不同簇之间会用不同的颜色来进行区分。
# 绘制聚类散点图
sns.scatterplot(data=df, x="PetalLength", y="PetalWidth", hue="Cluster", palette="deep")
plt.show()
运行上面的代码,我们就可以得到一个简单的聚类散点图
从上图中可以看出,我们的聚类结果虽然有一定的错误,但是已经较为明显地将数据点分为三个不同的簇。同时,我们也能够直观地了解到不同簇之间的差异和相似之处。
结论
本篇文章介绍了如何使用Python中的两个库matplotlib和seaborn绘制聚类散点图。我们以鸢尾花数据集和k-means算法为例演示了聚类散点图的绘制过程,并解释了数据预处理和聚类分析的基本原理。在实际应用中,聚类分析和聚类散点图是数据挖掘和机器学习领域中非常有用的工具,它们可以帮助我们更好地发现数据中的规律和结构,进一步提高数据的分析和挖掘效率。
极客笔记