文章目录
- 聚类
- 数据降维
- 数据降维的作用
- 模型性能的度量
-
- 🟢 一、背景:鸢尾花数据集简介(Iris Dataset)
- 🟠 二、为什么做二分类?
- 🔵 三、机器学习流程(逻辑回归模型)
- 逐行解释代码
- ✅ **整体功能:**
- 🧠 举个例子帮助理解:
- 🏁 训练完成后你可以做:
- ✅ 1. `model.predict(X_test)`
- ✅ 2. `model.predict_proba(X_test)`
- ✅ 3. `model.coef_`
- ✅ 4. `model.score(X_test, y_test)`
- 📊 总结表:
- ✅ 总结一句话:
- ✅ 总结一下:这段代码完成了什么?
- ✅ 一、什么是 R²(决定系数)
- ✅ 二、Python 示例:线性回归 + R² 可视化
- ✅ 第一步:模拟带噪声的线性数据
- ✅ 第二步:拟合线性回归模型
- ✅ 第三步:预测 + 可视化结果
- ✅ 第四步:输出 R² 评分
- 🧠 总结:整个流程图
- ✅ 想深入?你可以进一步学习:
- ✅ 完整代码 + 逐行解释
- ✅ 总结流程
- ✅ 三、运行结果说明
- ✅ 四、适用场景
- 无监督学习与监督学习
聚类
我们用 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