使用scikit-learn的set_output方法

机器学习项目中,数据处理和模型训练是两个核心步骤。scikit-learn作为Python中广泛使用的机器学习库,提供了丰富的数据处理和模型训练工具。其中,pandas库的DataFrame格式因其灵活性和易用性,成为数据科学家的首选数据结构。本文将介绍如何在scikit-learn中使用set_output方法,将模型的输出配置为pandas DataFrame格式。

首先,通过加载iris数据集来演示set_output API的使用。iris数据集是一个经典的多类分类数据集,包含了150个样本,每个样本有4个特征。将使用sklearn库中的load_iris函数来加载数据,并将其转换为DataFrame格式。

from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split # 加载iris数据集并转换为DataFrame格式 X, y = load_iris(as_frame=True, return_X_y=True) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, random_state=0) # 查看训练集的前几行数据 print(X_train.head())

接下来,将介绍如何配置预处理步骤,使其输出为DataFrame格式。以StandardScaler为例,这是一个常用的数据标准化工具,可以将数据缩放到均值为0,方差为1的标准正态分布。通过调用set_output方法,并传入transform参数为"pandas",可以将StandardScaler的输出配置为DataFrame格式。

from sklearn.preprocessing import StandardScaler # 创建StandardScaler实例并配置输出为DataFrame格式 scaler = StandardScaler().set_output(transform="pandas") # 训练模型并转换测试集数据 scaler.fit(X_train) X_test_scaled = scaler.transform(X_test) # 查看转换后的数据 print(X_test_scaled.head())

在实际应用中,经常需要将多个预处理步骤组合成一个pipeline。通过使用sklearn库中的make_pipeline函数,可以轻松地将多个预处理步骤和模型训练步骤组合在一起。在pipeline中,同样可以使用set_output方法来配置所有步骤的输出为DataFrame格式。

from sklearn.feature_selection import SelectPercentile from sklearn.linear_model import LogisticRegression from sklearn.pipeline import make_pipeline # 创建一个包含数据标准化、特征选择和逻辑回归的pipeline clf = make_pipeline(StandardScaler(), SelectPercentile(percentile=75), LogisticRegression()) # 配置pipeline的所有步骤输出为DataFrame格式 clf.set_output(transform="pandas") # 训练模型并评估测试集性能 clf.fit(X_train, y_train) print(clf.score(X_test, y_test))

除了在单个模型或pipeline中配置输出格式外,scikit-learn还提供了全局配置的方法。通过调用set_config函数,并传入transform_output参数为"pandas",可以将全局的输出格式配置为DataFrame。这样,在后续的所有模型训练和预测过程中,输出都将默认为DataFrame格式。

from sklearn import set_config # 全局配置输出格式为DataFrame set_config(transform_output="pandas") # 在全局配置下训练模型 clf.fit(X_train, y_train) print(clf.score(X_test, y_test))

需要注意的是,如果在配置了输出格式后,使用了set_params方法来修改模型的参数,那么模型的输出格式可能会被重置为默认值。为了避免这种情况,需要在修改参数之前,先使用set_output方法来重新配置输出格式。

# 修改模型参数前,先重新配置输出格式 scaler = StandardScaler().set_output(transform="pandas") clf.set_params(standardscaler=scaler) # 训练模型并评估测试集性能 clf.fit(X_train, y_train) print(clf.score(X_test, y_test))
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485