太牛了!Sklearn 新增简化数据预处理 API
用于转换、缩放和归一化。
Scikit-learn是一个在机器学习中广泛使用的Python库。事实上,它通常是我们在数据科学中最先了解的库之一。
Scikit-learn提供了涵盖整个机器学习工作流程的函数和方法。因此,它不仅用于实现机器学习算法,而且还用于特征预处理和模型评估等任务。
在这篇文章中,我们将谈论一个与数据预处理功能有关的新API。在机器学习中,我们非常不可能使用原始数据中出现的特征。
它们通常需要大量的预处理以获得最佳结果。例如,如果特征值范围相差很大,一些算法的表现并不理想。他们倾向于对数值较高的特征给予更多的重视,所以结果会有偏差。
考虑一个房屋价格预测问题。一所房子的面积约为200平方米,而房龄通常小于20年。卧室的数量在大多数情况下可以是1、2或3。所有这些特征在决定房子的价格方面都很重要。
然而,如果我们在没有任何缩放的情况下使用它们,机器学习模型可能会对数值较高的特征给予更多的重视。当特征在一个相对相似的尺度上时,模型往往表现得更好,收敛得更快。
Scikit-learn的预处理模块提供了将特征缩小到类似范围的函数。这些函数的问题是,它们返回的是一个NumPy数组,而不是一个DataFrame,这使得我们很难跟踪特征名称。在大多数情况下,我们需要在脚本中加入额外的代码行来跟踪特征名称。
我们在著名的iris数据集上实现一个例子。
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_splitX, 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
)X_train.head()
我们可以在训练集上训练一个标准的标度器,用它来转换测试集的特征值。
from sklearn.preprocessing import StandardScalerscaler = StandardScaler()
scaler.fit(X_train)
X_test_scaled = scaler.transform(X_test)type(X_test_scaled)# output
numpy.ndarray
变量
X_test
是一个Pandas DataFrame,而
X_test_scaled
是一个NumPy数组。如果把
X_test_scaled
也作为一个DataFrame,那就更实用了。
现在是时候分享这个好消息了! ️
Set_output API
新的
set_output
API允许配置转化器来输出 pandas DataFrame。它仍然处于不稳定的版本,建议查看
官方文档
[1]
中的例子。
set_output
。
from sklearn.preprocessing import StandardScalerscaler = StandardScaler().set_output(transform="pandas")
scaler.fit(X_train)
X_test_scaled = scaler.transform(X_test)X_test_scaled.head()
X_test_scaled
是一个Pandas DataFrame,我们可以在上面的截图中看到。
这个新功能将简化数据预处理任务的代码,在用Scikit-learn创建管道时也非常有用。
[1]
官方文档:
https://scikit-learn.org/dev/auto_examples/miscellaneous/plot_set_output.html#sphx-glr-auto-examples-miscellaneous-plot-set-output-py
🏴☠️宝藏级🏴☠️ 原创公众号『 数据STUDIO 』内容超级硬核。公众号以Python为核心语言,垂直于数据科学领域,包括 可戳 👉 Python | MySQL | 数据分析 | 数据可视化 | 机器学习与数据挖掘 | 爬虫 等,从入门到进阶!
长按👇关注- 数据STUDIO -设为星标,干货速递