深度学习笔记

文章目录

聚类

我们用 sklearn 实现一个二维数据的 K-Means 聚类并可视化:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

# 1. 生成模拟数据(3个簇)
X, y_true = make_blobs(n_samples=300, centers=3, cluster_std=0.6, random_state=42)

# 2. 训练K-Means模型
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

# 3. 可视化聚类结果
plt.figure(figsize=(8, 6))
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.7, marker='X', label='Centers')
plt.title("K-Means Clustering Result")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.legend()
plt.grid(True)
plt.show()

当然,下面是对前面那段 K-Means 聚类 Python 示例的逐行解释,适合初学者理解:


import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

导入模块

  • numpy:用于数值计算;
  • matplotlib.pyplot:用于绘图;
  • make_blobs:生成模拟聚类数据(内置在 sklearn.datasets);
  • KMeans:K-Means 聚类模型(sklearn.cluster 模块)。

# 1. 生成模拟数据(3个簇)
X, y_true = make_blobs(n_samples=300, centers=3, cluster_std=0.6, random_state=42)

生成模拟数据

  • n_samples=300:共生成 300 个样本;
  • centers=3:将数据划分为 3 个簇;
  • cluster_std=0.6:每个簇内部的散布程度(标准差);
  • random_state=42:确保每次运行结果一致(设置随机种子);
  • X:二维数组,形状为 (300, 2),表示 300 个二维数据点;
  • y_true:每个样本的真实簇标签(仅用于可视化参考,不参与训练)。

# 2. 训练K-Means模型
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)
y_kmeans = kmeans.predict(X)

建立并训练 K-Means 聚类模型

  • KMeans(n_clusters=3):告诉模型我们期望分成 3 个簇;
  • .fit(X):根据数据 X 训练模型,学习出每个簇的中心;
  • .predict(X):为每个点预测所属的簇编号(0、1 或 2);
  • y_kmeans:模型预测的簇标签数组,形状为 (300,)。

# 3. 可视化聚类结果
plt.figure(figsize=(8, 6))

创建图形

  • 设置画布大小为 8x6 英寸。

plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')

绘制散点图(聚类结果)

  • X[:, 0]:第1列(x坐标),X[:, 1]:第2列(y坐标);
  • c=y_kmeans:根据聚类标签着色;
  • s=50:点的大小;
  • cmap='viridis':颜色映射(紫→绿)。

centers = kmeans.cluster_centers_

获取聚类中心

  • cluster_centers_:返回每个簇的二维坐标中心点(形状为 (3, 2))。

plt.scatter(centers[:, 0], centers[:, 1], c='black', s=200, alpha=0.7, marker='X', label='Centers')

可视化聚类中心

  • 黑色大 X 点表示每个簇的中心;
  • s=200:点很大;
  • alpha=0.7:透明度;
  • label='Centers':用于图例说明。

plt.title("K-Means Clustering Result")
plt.xlabel("Feature 1")
plt.ylabel("Feature 2")
plt.legend()
plt.grid(True)
plt.show()

设置图形标题和标签

  • title():图标题;
  • xlabel() / ylabel():轴标签;
  • legend():显示图例(簇中心);
  • grid(True):添加网格线;
  • show():显示图形。

输出效果

你运行这段代码后会看到一个 2D 散点图,分为三类,每类用不同颜色表示,中心点用黑色 X 表示。


数据降维

**数据降维(Dimensionality Reduction)**是将高维数据映射到低维空间的技术,同时尽可能保留原始数据的关键信息。常用于:

  • 可视化高维数据(如二维/三维展示)
  • 降低计算复杂度
  • 去除噪声、冗余特征
  • 解决“维数灾难”

一、常见的数据降维方法

方法 说明
PCA(主成分分析) 保留数据方差最大方向的投影(线性降维)
t-SNE 保留局部结构,适合可视化(非线性降维)
UMAP 比 t-SNE 更快、更能保持全局结构(非线性)
LDA 有监督降维,最大化类间差异

二、Python 降维示例(用 PCA 将 3D 数据降至 2D)

这段代码的作用是:生成一个3维、3类的模拟分类数据集,用 PCA 将其降维为2维,并用散点图可视化降维后的结果。

我们用 PCA + matplotlib 可视化:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.decomposition import PCA

# 1. 生成模拟的 3D 数据(含3个特征)
X, y = make_classification(n_samples=300, n_features=3, n_redundant=0,
                           n_informative=3, n_clusters_per_class=1, n_classes=3, random_state=42)

# 2. 使用PCA将数据从3维降到2维
pca = PCA(n_components=2)
X_reduced = pca.fit_transform(X)

# 3. 可视化降维后的数据
plt.figure(figsize=(8, 6))
plt.scatter(X_reduced[:, 0], X_reduced[:, 1], c=y, cmap='Set1', s=40, edgecolor='k')
plt.title("PCA: 3D data reduced to 2D")
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.grid(True)
plt.show()


import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.decomposition import PCA

✅ 第1部分:导入模块

  • numpy:用于数值计算;
  • matplotlib.pyplot:用于绘图;
  • make_classification:生成模拟分类数据;
  • PCA:主成分分析类,用于降维。

# 1. 生成模拟的 3D 数据(含3个特征)
X, y = make_classification(n_samples=300, n_features=3, n_redundant=0,
                           n_informative=3, n_clusters_per_class=1, n_classes=3, random_state=42)

✅ 第2部分:生成模拟数据

  • n_samples=300:生成 300 个样本;
  • n_features=3:每个样本有 3 个特征(即 3 维);
  • n_informative=3:3 个特征中全是“有用的”;
  • n_redundant=0:没有冗余特征;
  • n_clusters_per_class=1:每个类别一个簇;
  • n_classes=3:共分为 3 个类别;
  • random_state=42:设置随机种子,使结果可重复;
  • X:特征矩阵,形状为 (300, 3);
  • y:标签数组,包含每个样本所属的类别(0, 1, 2)。

# 2. 使用 PCA 将数据从 3维降到 2维
pca = PCA(n_components=2)
X_reduced = pca.fit_transform
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值