make_blobs() and plt.scatter()

本文介绍如何利用sklearn的make_blobs函数生成用于聚类的数据集,并使用matplotlib进行可视化展示。通过调整参数如样本数量、特征数、类别数等,可以灵活地创建适合不同场景的数据集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

eg.

from sklearn.datasets import make_blobs
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split

data = make_blobs(n_samples=200, centers=2, random_state=8)
X, y = data    #将data赋值给X, y
plt.scatter(X[:,0], X[:,1], c=y, cmap=plt.cm.spring, edgecolor='k')
plt.show()

--------------------------------------------

make_blobs()

make_blobs()函数用于生成一个样本数量, 为聚类产生数据集。

sklearn.datasets.make_blobs(n_samples, n_features, centers, cluster_std, center_box, shuffle, random_state)

  • n_samples:待生成的样本的总数。
  • n_features:每个样本的特征数,默认值是2。
  • centers:类别数,默认值3。
  • cluster_std:数据集的标准差,浮点数或者浮点数序列,默认值1.0。
  • center_box:中心确定之后的数据边界,默认值(-10.0, 10.0)
  • shuffle :洗乱,默认值是True
  • random_state:官网解释是随机生成器的种子

plt.scatter()

plt.scatter()用于绘制散点图

函数的原型:

matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs)
 

  • x,y:数组,散点图的数据点
  • c: color
  • marker: 标记的样式
  • cmap: Colormap实体或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用。如果没有申明就是image.cmap
  • norm: Normalize实体来将数据亮度转化到0-1之间,也是只有c是一个浮点数的数组的时候才使用。如果没有申明,就是默认为colors.Normalize。

 

在感知机模型中,其中有一条语句如下,x,y后面跟随一个属性,则表示只对该属性进行切片。(其中'sepal length' 是df的一个属性)

plt.scatter(df[:50]['sepal length'], df[:50]['sepal width'], label='0') #前50个数据
#df[:50]['sepal length'],只对'sepal length'这个标量进行切分

 

plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] import numpy as np import matplotlib.pyplot as plt from sklearn.datasets import make_circles, make_blobs from sklearn.cluster import KMeans, SpectralClustering from sklearn.metrics import normalized_mutual_info_score, adjusted_rand_score, silhouette_score # 生成数据:2个环形簇 + 1个球形簇 X_circles, _ = make_circles(n_samples=300, factor=0.5, noise=0.05, random_state=42) X_blobs, _ = make_blobs(n_samples=100, centers=[[1.5, 1.5]], cluster_std=0.2, random_state=42) X = np.vstack([X_circles, X_blobs]) # 生成真实标签 true_labels = np.concatenate([np.zeros(150), np.ones(150), 2 * np.ones(100)]) # 可视化原始数据 plt.scatter(X[:, 0], X[:, 1], s=10) plt.title("原始数据") plt.show() # 谱聚类 spectral = SpectralClustering(n_clusters=3, affinity='rbf', gamma=30, random_state=42) spectral_labels = spectral.fit_predict(X) plt.scatter(X[:, 0], X[:, 1], c=spectral_labels, s=10, cmap='viridis') plt.title("Spectral Clustering") plt.show() # K-means聚类 kmeans = KMeans(n_clusters=3, random_state=42) kmeans_labels = kmeans.fit_predict(X) plt.scatter(X[:, 0], X[:, 1], c=kmeans_labels, s=10, cmap='viridis') plt.title("K-means Clustering") plt.show() # 评估指标 kmeans_nmi = normalized_mutual_info_score(true_labels, kmeans_labels) kmeans_ari = adjusted_rand_score(true_labels, kmeans_labels) kmeans_silhouette = silhouette_score(X, kmeans_labels) spectral_nmi = normalized_mutual_info_score(true_labels, spectral_labels) spectral_ari = adjusted_rand_score(true_labels, spectral_labels) spectral_silhouette = silhouette_score(X, spectral_labels) # 打印对比结果 print("| 指标 | K-means | 谱聚类 |") print("|---------------|---------|--------|") print(f"| NMI | {kmeans_nmi:.3f} | {spectral_nmi:.3f} |") print(f"| ARI | {kmeans_ari:.3f} | {spectral_ari:.3f} |") print(f"| 轮廓系数 | {kmeans_silhouette:.3f} | {spectral_silhouette:.3f} |")该代码给出的指标不理想,但是图化的很好,有没有办法修改一下
03-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值