在机器学习中,模型通常不是直接接收“房子”“邮件”“图像”这样的现实对象,而是接收一种更抽象、更统一的数据表示形式:输入部分记为 X,输出目标记为 y。在 Scikit-learn 中,这几乎是最基本、最频繁出现的接口约定:监督学习模型通常通过 fit(X, y) 进行训练,其中 X 保存样本的特征表示,y 保存对应的目标值或类别标签。
一、什么是特征矩阵
特征矩阵(Feature Matrix)通常记为 X,它表示模型的输入数据整体。其最常见形式是一个二维数组或矩阵(通常用 NumPy 数组或 Pandas 的 DataFrame 来表示)。其中:
• 每一行表示一个样本(sample)
• 每一列表示一个特征(feature)
图 1 特征矩阵的基本结构
X 的典型尺寸可写作 (n_samples, n_features)。
比如,在 Scikit-learn 内置的鸢尾花数据集中:
• 有 150 个样本
• 每个样本有 4 个特征,分别表示花萼长度(sepal length)、花萼宽度(sepal width)、花瓣长度(petal length)、花瓣宽度(petal width)
那么 X 的形状就是 (150, 4)。这正表明 X 是一个 n_samples × n_features 的数组。
要注意的是,模型通过 X 看到的是样本的特征表示,而不是现实对象本身。真正进入模型的,是对象经过抽象、提取和整理之后形成的特征矩阵。
因此,预处理与特征提取的目标,本质上就是把原始数据转换为适合下游估计器使用的样本矩阵 X。
二、什么是目标变量
目标变量(Target)通常记为 y,它表示监督学习中每个样本对应的目标结果。
在最典型的单输出监督学习问题中,y 往往是一维数组,通常用一维的 NumPy 数组或 Pandas 的 Series 表示,因此也常被称为“目标向量”(Target Vector)。例如:
• 在房价预测中,y 保存每套房屋的价格
• 在垃圾邮件识别中,y 保存每封邮件的类别标签
• 在手写数字识别中,y 保存每张图像对应的数字类别
如果 X 的形状是 (n_samples, n_features),那么 y 的形状通常就是 (n_samples,),它的长度与样本数一致。
比如,在 Scikit-learn 的鸢尾花数据集中:
• y 是一个长度为 150 的一维数组
• 每个元素取值:0、1 或 2
要注意的是,y 存储的是类别索引,而不是字符串名称。可以通过 iris.target_names[y] 将索引映射为对应类别名称。
图 2 鸢尾花数据集中的 y 值与对应类别名称
在分类任务中,目标变量里的值通常就是类别标签,因此 y 也常被理解为标签集合。在回归任务中,y 则通常是连续数值目标。
也就是说,“目标变量”是更一般的叫法;在单输出监督学习中,y 常表现为一维数组,此时也常称为“目标向量”。而“标签”更多用于分类场景。
三、特征矩阵与目标变量的对应关系
1、一一对应是最重要的约束
在监督学习中,X 和 y 最重要的关系就是:它们必须按样本一一对应。
图 3 目标变量与样本的一一对应关系
也就是说,X 的第 1 行对应 y 的第 1 个值,X 的第 2 行对应 y 的第 2 个值,依此类推。
如果 X 与 y 之间的一一对应关系被打乱,那么模型学到的就不再是“输入与正确输出之间的关系”,而会变成混乱的配对。此时训练结果即使能运行,也没有真实意义。
图 4 监督学习中 X 与 y 的共同作用
因此,数据划分、打乱顺序、交叉验证等操作之所以必须同时作用于 X 和 y,正是为了保证这种对应关系不被破坏。
需要特别说明的是,在无监督学习中,通常只有 X,没有监督意义上的 y。例如聚类任务只需要样本特征矩阵,目标是从 X 自身中发现潜在结构。
四、Python 示例:用鸢尾花数据集查看 X 与 y
下面用 Scikit-learn 自带的鸢尾花数据集来直观展示特征矩阵与目标变量。
像 load_iris() 这样的数据集加载函数,默认返回一个类似字典的 Bunch 对象;其中 .data 保存输入矩阵,.target 保存监督任务中的目标变量。
import pandas as pdfrom sklearn.datasets import load_iris # 1. 加载鸢尾花数据集iris = load_iris() X = iris.datay = iris.target # 2. 查看形状print("X 的形状:", X.shape)print("y 的形状:", y.shape) # 3. 转为 DataFrame 方便观察df_X = pd.DataFrame(X, columns=iris.feature_names)df_y = pd.Series(y, name="目标标签") print("\nX 的前 5 行:")print(df_X.head()) print("\ny 的前 5 个值:")print(df_y.head()) print("\n类别名称:", iris.target_names)运行这段代码后,通常会看到:
• X.shape 是 (150, 4),表示 150 个样本、4 个特征
• y.shape 是 (150,),表示每个样本有一个对应目标
• X 的前几行是一组组样本特征
• y 的前几个值是这些样本的类别编号
这说明,在监督学习里,X 和 y 的关系可以非常明确地理解为:
• X 负责描述样本
• y 负责提供这些样本对应的目标结果
五、Python 示例:用散点图直观看到 X 与 y 的关系
下面进一步把 X 的前两个特征取出来画成二维散点图,并根据 y 的类别对样本进行分组绘制。这样可以直观看到:一个样本在特征空间中的位置,由 X 决定;而它属于哪一类,由 y 决定。
import matplotlib.pyplot as plt# Windows 常用plt.rcParams["font.sans-serif"] = ["Microsoft YaHei"]# macOS 常用# plt.rcParams["font.sans-serif"] = ["PingFang SC"]# 解决负号显示问题plt.rcParams["axes.unicode_minus"] = False from sklearn.datasets import load_iris # 1. 加载鸢尾花数据集iris = load_iris()X = iris.datay = iris.target # 2. 取前两个特征x1 = X[:, 0] # 第一个特征:花萼长度x2 = X[:, 1] # 第二个特征:花萼宽度 # 3. 绘图plt.figure(figsize=(8, 5))for class_id, class_name in enumerate(iris.target_names): plt.scatter( x1[y == class_id], x2[y == class_id], label=class_name # 为图例设置当前类别的名称 ) plt.xlabel(iris.feature_names[0])plt.ylabel(iris.feature_names[1])plt.title("特征矩阵 X 与目标变量 y 的关系示意图")plt.legend() # 显示图例plt.show()输出示意图:
在这张图中,三个类别的样本会以不同颜色分组显示:
• 每个点对应 X 中的一行样本
• 横轴与纵轴分别对应 X 中的两个特征列
• 点所属的类别由 y 决定
这说明,X 和 y 虽然在代码中是两个独立对象,但它们共同描述的是同一批样本:X 负责“样本具有什么特征”,y 负责“样本对应什么目标”。
六、监督学习流程为何始终围绕 X 与 y 展开
1、训练阶段
在 Scikit-learn 中,几乎所有监督学习估计器都围绕 fit(X, y) 进行训练。
这意味着,训练阶段的本质就是:给模型输入一批样本特征 X,再告诉它这些样本的目标 y,让它学习两者之间的关系。
2、划分阶段
像 train_test_split(X, y, ...) 这样的函数之所以同时拆分 X 和 y,就是为了保持样本与目标之间的一一对应关系。
3、评估阶段
在评估时,常见做法是:
• 用模型对 X_test 做预测
• 再把预测结果与 y_test 进行比较
这再次说明,监督学习的整个流程始终围绕“输入矩阵 X”与“目标变量 y”展开。
七、常见误解与澄清
1、误以为 X 一定是 Pandas DataFrame
不是。
在 Scikit-learn 中,X 可以是 NumPy 数组、Pandas DataFrame、稀疏矩阵等多种 array-like 结构,只要满足接口要求即可。
2、误以为 y 只能是分类标签
不是。
在分类任务中,y 常常是类别标签;在回归任务中,y 可以是连续数值。更一般地说,y 表示监督学习中的目标变量。
3、误以为 X 的列数越多越好
不是。
特征数更多并不自动意味着信息更多。冗余特征、噪声特征甚至可能增加计算开销、降低模型效果,因此才会有特征选择(feature selection)与降维(dimensionality reduction)等后续步骤。
4、误以为 y 在无监督学习中也总是存在
不是。
许多无监督学习方法只需要 X,不需要监督目标 y。这也是监督学习与无监督学习最基础的接口差异之一。
📘 小结
特征矩阵 X 是监督学习中的输入结构,目标变量 y 是与样本一一对应的输出结果。理解这两个对象,实质上就是理解机器学习如何以统一的数据接口组织训练、划分与评估流程。
“点赞有美意,赞赏是鼓励”