news 2026/4/21 5:23:37

Scikit-learn:特征矩阵与目标变量

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Scikit-learn:特征矩阵与目标变量

在机器学习中,模型通常不是直接接收“房子”“邮件”“图像”这样的现实对象,而是接收一种更抽象、更统一的数据表示形式:输入部分记为 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 是与样本一一对应的输出结果。理解这两个对象,实质上就是理解机器学习如何以统一的数据接口组织训练、划分与评估流程。

“点赞有美意,赞赏是鼓励”

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 5:23:34

ddraw.dll文件丢失找不到 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/21 5:23:32

dinput8.dll文件丢失或损坏找不到问题 免费下载方法分享

在使用电脑系统时经常会出现丢失找不到某些文件的情况,由于很多常用软件都是采用 Microsoft Visual Studio 编写的,所以这类软件的运行需要依赖微软Visual C运行库,比如像 QQ、迅雷、Adobe 软件等等,如果没有安装VC运行库或者安装…

作者头像 李华
网站建设 2026/4/21 5:22:24

李慕婉-仙逆-造相Z-Turbo与YOLOv5目标检测结合应用

李慕婉-仙逆-造相Z-Turbo与YOLOv5目标检测结合应用 当AI绘画遇上智能识别,会碰撞出怎样的火花? 最近在做一个有趣的项目尝试:把专门生成仙逆动漫角色的李慕婉-仙逆-造相Z-Turbo模型,和目标检测领域的YOLOv5结合起来用。没想到效果…

作者头像 李华
网站建设 2026/4/21 5:18:21

Qwen3-Reranker参数详解:max_length、batch_size与显存占用关系

Qwen3-Reranker参数详解:max_length、batch_size与显存占用关系 1. 理解Qwen3-Reranker的核心参数 在实际使用Qwen3-Reranker进行语义重排序时,有三个关键参数直接影响着系统的性能和资源消耗:max_length、batch_size和显存占用。理解这些参…

作者头像 李华
网站建设 2026/4/21 5:16:15

如何处理SQL查询中的逻辑重叠:AND OR嵌套优先级.txt

<details> 中 <summary> 必须是第一个直接子元素&#xff0c;不可嵌套或包裹在其他标签内&#xff1b;支持默认展开&#xff08;open 布尔属性&#xff09;、JS 控制&#xff08;el.open false&#xff09;、toggle 事件监听&#xff1b;兼容性需注意 IE 不支持&a…

作者头像 李华
网站建设 2026/4/21 5:11:52

myBuilder主要新功能介绍(4月版本v2.x.26)

前端UI组件编程性增强所有组件统一新增名称属性设置&#xff0c;配置名称后&#xff0c;可在事件JavaScript脚本中通过getUIData、getUIConfigBy函数获取组件变量&#xff0c;进而调用该组件的公开函数。组件函数已新增代码提示支持&#xff0c;编码时可自动带出相关提示内容&a…

作者头像 李华