Scikit Learn - 数据表示
Scikit-learn - 数据表示
Section titled “Scikit-learn - 数据表示”机器学习模型从数据中学习。为了被 Scikit-learn 中的算法理解,数据需要以特定的数值格式表示。本章讨论 Scikit-learn 期望的数据结构。
数据以表格形式表示
Section titled “数据以表格形式表示”对于 Scikit-learn 来说,思考和表示数据的最常见方式是将其视为一个表格。这个表格本质上是一个二维网格,其中:
- 行代表单个观测或 样本 (samples)(例如,一个客户、一朵花、一份文档)。
- 列代表这些样本的不同特征 (characteristics) 或 特征 (features)(例如,客户的年龄、花瓣的长度、文档中的词频)。
示例:Iris 数据集
Section titled “示例:Iris 数据集”让我们以 Iris 数据集为例,它是机器学习中的经典数据集。我们可以使用 Scikit-learn 的 datasets 模块加载它,并通常借助 Pandas 来以表格形式查看它。
from sklearn.datasets import load_irisimport pandas as pd
# 加载 Iris 数据集对象iris_dataset = load_iris()
# 为特征创建 Pandas DataFrame# iris_dataset.data 包含特征值# iris_dataset.feature_names 包含列名X_df = pd.DataFrame(iris_dataset.data, columns=iris_dataset.feature_names)
# 为目标变量创建 Pandas Series# iris_dataset.target 包含目标值(物种编码为 0, 1, 2)# iris_dataset.target_names 包含物种名称y_s = pd.Series(iris_dataset.target, name='species')
print("First 5 rows of the feature DataFrame (X_df):")print(X_df.head())
print("\nFirst 5 values of the target Series (y_s):")print(y_s.head())print(f"\nTarget names: {list(iris_dataset.target_names)}")First 5 rows of the feature DataFrame (X_df): sepal length (cm) sepal width (cm) petal length (cm) petal width (cm)0 5.1 3.5 1.4 0.21 4.9 3.0 1.4 0.22 4.7 3.2 1.3 0.23 4.6 3.1 1.5 0.24 5.0 3.6 1.4 0.2
First 5 values of the target Series (y_s):0 01 02 03 04 0Name: species, dtype: int32
Target names: ['setosa', 'versicolor', 'virginica']在这个表格中,每一行都是一朵被观察到的花(一个样本),每一列代表对该花的测量值(一个特征)。
特征矩阵 (X)
Section titled “特征矩阵 (X)”Scikit-learn 期望特征是以二维数组状结构的形式提供,通常称为特征矩阵 (feature matrix),并约定用 X 表示。这个矩阵的形状为 [n_samples, n_features]:
- n_samples:数据集中的项目或观测数量(行数)。
- n_features:用于描述每个样本的不同特征的数量(列数)。
特征矩阵 X 通常是一个 NumPy 数组或 Pandas DataFrame。Scikit-learn 算法针对 NumPy 数组进行了优化。如果您提供 Pandas DataFrame,Scikit-learn 通常会在内部进行转换。X 中的所有数据必须是数值型的(整数或浮点数)。分类数据(如文本标签)在使用大多数 Scikit-learn 估计器 (estimators) 之前必须转换为数值表示(例如,使用独热编码 one-hot encoding 或标签编码 label encoding)。
目标数组 (y)
Section titled “目标数组 (y)”除了特征矩阵 X,大多数监督学习 (supervised learning) 算法在 Scikit-learn 中还需要一个目标数组 (target array),约定用 y 表示。这个数组包含我们想要预测的值。
- 目标数组
y通常是一个一维数组(或 Pandas Series),长度为n_samples。 y中的每个条目对应于X中的一个样本(行)。- 对于分类 (classification) 任务,
y包含离散类别标签 (discrete class labels)(例如,整数 0、1、2 或字符串 ‘cat’、‘dog’)。Scikit-learn 通常与整数标签配合得最好。 - 对于回归 (regression) 任务,
y包含连续的数值(例如,房屋价格、温度)。
无监督学习 (Unsupervised learning) 算法,如聚类或 PCA,通常只需要特征矩阵 X,在训练期间不使用目标数组 y。
区分目标数组与特征列
Section titled “区分目标数组与特征列”关键区别在于,目标数组 y 代表我们希望预测的数量(因变量,dependent variable),而特征矩阵 X 中的列是用于进行预测的输入(自变量,independent variables)。
示例:从 Iris 数据中分离特征和目标
Section titled “示例:从 Iris 数据中分离特征和目标”如果我们想根据 Iris 的测量值来预测其物种,那么物种列就成为我们的目标 y,而测量值列构成了我们的特征矩阵 X。
from sklearn.datasets import load_iris
iris = load_iris()
# X:特征矩阵(测量值)X_iris = iris.data
# y:目标数组(物种,编码为整数)y_iris = iris.target
print(f"Shape of feature matrix X_iris: {X_iris.shape}")print(f"First 3 rows of X_iris:\n{X_iris[:3]}")
print(f"\nShape of target array y_iris: {y_iris.shape}")print(f"First 10 values of y_iris: {y_iris[:10]}")print(f"Unique values in y_iris: {pd.unique(y_iris)}")print(f"Target names corresponding to unique values: {iris.target_names}")Shape of feature matrix X_iris: (150, 4)First 3 rows of X_iris:[[5.1 3.5 1.4 0.2] [4.9 3. 1.4 0.2] [4.7 3.2 1.3 0.2]]
Shape of target array y_iris: (150,)First 10 values of y_iris: [0 0 0 0 0 0 0 0 0 0]Unique values in y_iris: [0 1 2]Target names corresponding to unique values: ['setosa' 'versicolor' 'virginica']确保您的数据符合这种 X(二维数值数组)和 y(一维数值数组,用于监督任务)的格式是有效使用 Scikit-learn 的第一步。