原文:
www.kdnuggets.com/2021/03/best-machine-learning-frameworks-extensions-scikit-learn.html
评论
很多包实现了 Scikit-learn 估算器 API。
如果你已经熟悉 Scikit-learn,你会发现这些库的集成非常简单。
使用这些包,我们可以扩展 Scikit-learn 估算器的功能,我将在这篇文章中展示如何使用其中一些。
在这一部分,我们将探索可以用于处理和转换数据的库。
你可以使用这个包将 ‘DataFrame’ 列映射到 Scikit-learn 转换中。然后你可以将这些列组合成特征。
要开始使用这个包,通过 pip 安装 ‘sklearn-pandas’。‘DataFrameMapper’ 可用于将 pandas 数据帧列映射到 Scikit-learn 转换中。我们来看看怎么做。
首先,创建一个虚拟 DataFrame:
data =pd.DataFrame({
'Name':['Ken','Jeff','John','Mike','Andrew','Ann','Sylvia','Dorothy','Emily','Loyford'],
'Age':[31,52,56,12,45,50,78,85,46,135],
'Phone':[52,79,80,75,43,125,74,44,85,45],
'Uni':['One','Two','Three','One','Two','Three','One','Two','Three','One']
})
DataFrameMapper
接受一个元组列表——第一个项的名称是 Pandas DataFrame 中的列名。
第二个传递的项是将应用于该列的转换类型。
例如,‘LabelBinarizer’ 可以应用于 ‘Uni’ 列,而 ‘Age’ 列则使用 ‘StandardScaler’ 进行缩放。
from sklearn_pandas import DataFrameMapper mapper = DataFrameMapper([
('Uni', sklearn.preprocessing.LabelBinarizer()),
(['Age'], sklearn.preprocessing.StandardScaler())
])
在定义映射器之后,接下来我们使用它来拟合和转换数据。
mapper.fit_transform(data)
映射器的 transformed_names_
属性可用于显示转换后的结果名称。
mapper.transformed_names_
传递df_out=True
给映射器将把结果返回为 Pandas DataFrame。
mapper = DataFrameMapper([
('Uni', sklearn.preprocessing.LabelBinarizer()),
(['Age'], sklearn.preprocessing.StandardScaler())
],df_out=True)
这个包将来自 xarray 的 n 维标记数组与 Scikit-learn 工具结合起来。
你可以将 Scikit-learn 估算器应用于 ‘xarrays’,而不会丢失它们的标签。你还可以:
-
确保 Sklearn 估算器与 xarray DataArrays 和 Datasets 之间的兼容性,
-
使估算器能够更改样本数量,
-
具有预处理转换器。
Sklearn-xarray 基本上是 xarray 和 Scikit-learn 之间的桥梁。为了使用其功能,通过 pip 或 ‘conda’ 安装 ‘sklearn-xarray’。
该包具有包装器,可以让你在 xarray DataArrays 和 Datasets 上使用 sklearn 估算器。为了说明这一点,首先我们创建一个 ‘DataArray’。
import numpy as np
import xarray as xr
data = np.random.rand(16, 4)
my_xarray = xr.DataArray(data)
从 Sklearn 中选择一种转换应用于此 ‘DataArray’。在这种情况下,我们来应用 ‘StandardScaler’。
from sklearn.preprocessing import StandardScaler
Xt = wrap(StandardScaler()).fit_transform(X)
包装的估算器可以无缝地在 Sklearn 管道中使用。
pipeline = Pipeline([
('pca', wrap(PCA(n_components=50), reshapes='feature')),
('cls', wrap(LogisticRegression(), reshapes='feature'))
])
在拟合此管道时,您只需传入 DataArray。
类似地,DataArrays 可以在交叉验证网格搜索中使用。
为此,您需要从 ‘sklearn-xarray’ 创建一个 ‘CrossValidatorWrapper’ 实例。
from sklearn_xarray.model_selection
import CrossValidatorWrapper from sklearn.model_selection
import GridSearchCV, KFold
cv = CrossValidatorWrapper(KFold())
pipeline = Pipeline([
('pca', wrap(PCA(), reshapes='feature')),
('cls', wrap(LogisticRegression(), reshapes='feature'))
])
gridsearch = GridSearchCV(
pipeline, cv=cv, param_grid={'pca__n_components': [20, 40, 60]}
)
之后,您将把 ‘gridsearch’ 拟合到 ‘DataArray’ 数据类型中的 X 和 y。
是否有工具和库可以将 Sklearn 集成以更好地进行自动化机器学习?是的,有一些例子。
通过这个,您可以使用 Scikit-learn 进行自动化机器学习。对于设置,您需要手动安装一些依赖项。
$ curl https://raw.githubusercontent.com/automl/auto-sklearn/master/requirements.txt | xargs -n 1 -L 1 pip install
接下来,通过 pip 安装 ‘auto-sklearn’。
使用此工具时,您无需担心算法选择和超参数调整。Auto-sklearn 会为您处理这些。
这是得益于最新进展在贝叶斯优化、元学习和集成构建领域。
要使用它,您需要选择一个分类器或回归器,并将其拟合到训练集上。
from autosklearn.classification
import AutoSklearnClassifier
cls = AutoSklearnClassifier()
cls.fit(X_train, y_train)
predictions = cls.predict(X_test)
Auto_ViML – 自动化变体可解释机器学习(发音为 “Auto_Vimal”)
给定某个数据集,Auto_ViML 尝试不同的模型和特征,最终选定表现最佳的模型。
该软件包还会在构建模型时选择最少数量的特征。这会为您提供一个更简单且易于解释的模型。该软件包还:
-
通过建议更改缺失值、格式和添加变量来帮助您清理数据;
-
自动分类变量,无论是文本、数据还是数字;
-
当详细信息设置为 1 或 2 时,会自动生成模型性能图;
-
让您使用 ‘featuretools’ 进行特征工程;
-
当 ‘Imbalanced_Flag’ 设置为 ‘True’ 时,处理不平衡数据
要查看实际效果,请通过 pip 安装 ‘autoviml’。
from sklearn.model_selection import train_test_split, cross_validate
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)
X_train, X_val, y_train, y_val = train_test_split(X_train, y_train, test_size=0.25, random_state=54)
train, test = X_train.join(y_train), X_val.join(y_val)
model, features, train, test = Auto_ViML(train,"target",test,verbose=2)
TPOT – 基于树的管道优化工具
这是一个基于 Python 的自动化机器学习工具。它使用遗传编程来优化机器学习管道。
它探索多个管道以便选出最适合您的数据集的管道。
通过 pip 安装 ‘tpot’ 开始进行尝试。运行 ‘tpot’ 后,您可以将生成的管道保存到文件中。文件将在探索过程完成后或当您终止过程时导出。
下面的代码片段展示了如何在数字数据集上创建分类管道。
from tpot import TPOTClassifier
from sklearn.datasets import load_digits
from sklearn.model_selection import train_test_split
digits = load_digits()
X_train, X_test, y_train, y_test = train_test_split(digits.data, digits.target, train_size=0.75, test_size=0.25, random_state=42)
tpot = TPOTClassifier(generations=5, population_size=50, verbosity=2, random_state=42)
tpot.fit(X_train, y_train)
print(tpot.score(X_test, y_test))
tpot.export('tpot_digits_pipeline.py')
这是一个自动特征工程的工具。它通过将时间序列和关系数据集转换为特征矩阵来工作。
通过 pip 安装‘featuretools[complete]’以开始使用它。
深度特征合成(DFS)可以用于自动特征工程。
首先,你需要定义一个包含数据集中所有实体的字典。在‘featuretools’中,实体是一个单独的表。然后,定义不同实体之间的关系。
下一步是将实体、关系列表和目标实体传递给 DFS。这将为你提供特征矩阵及其对应的特征定义列表。
import featuretools as ft
entities = {
"customers" : (customers_df, "customer_id"),
"sessions" : (sessions_df, "session_id", "session_start"),
"transactions" : (transactions_df, "transaction_id", "transaction_time")
}
relationships = [("sessions", "session_id", "transactions", "session_id"),
("customers", "customer_id", "sessions", "customer_id")]
feature_matrix, features_defs = ft.dfs(entities=entities,
relationships = relationships,
target_entity = "customers")
你可以使用 Neuraxle 进行超参数调优和 AutoML。通过 pip 安装‘neuraxle’以开始使用它。
除了 Scikit-learn,Neuraxle 还兼容 Keras、TensorFlow 和 PyTorch。它还具有:
-
并行计算和序列化,
-
通过提供对这类项目至关重要的抽象来处理时间序列。
要使用 Neuraxle 进行自动化机器学习,你需要:
-
一个定义好的管道
-
一个验证分割器
-
通过‘ScoringCallback’定义评分指标
-
选择的‘hyperparams’仓库
-
选择的‘hyperparams’优化器
-
一个‘AutoML’循环
完整的示例请查看这里。
现在是时候介绍几个你可以用于机器学习实验的 SciKit 工具了。
SciKit-Learn 实验室是一个命令行工具,你可以用来运行机器学习实验。要开始使用它,请通过 pip 安装skll
。
在那之后,你需要获取一个SKLL
格式的数据集。
接下来,为实验创建一个配置文件,然后在终端中运行实验。
$ run_experimen experiment.cfg
当实验完成时,多个文件将存储在结果文件夹中。你可以使用这些文件来检查实验。
Scikit-learn 与 Neptune 的集成让你可以使用 Neptune 记录你的实验。例如,你可以记录你的 Scikit-learn 回归器的总结。
from neptunecontrib.monitoring.sklearn import log_regressor_summary
log_regressor_summary(rfr, X_train, X_test, y_train, y_test)
查看这个笔记本以获取完整示例。
现在让我们转移话题,看看专注于模型选择和优化的 SciKit 库。
这个库实现了基于序列模型的优化方法。通过 pip 安装‘scikit-optimize’以开始使用这些功能。
Scikit-optimize 可以通过基于贝叶斯定理的贝叶斯优化来进行超参数调优。
你可以使用‘BayesSearchCV’根据这一理论获得最佳参数。一个 Scikit-learn 模型作为第一个参数传递给它。
from skopt.space import Real, Categorical, Integer
from skopt import BayesSearchCV
regressor = BayesSearchCV(
GradientBoostingRegressor(),
{
'learning_rate': Real(0.1,0.3),
'loss': Categorical(['lad','ls','huber','quantile']),
'max_depth': Integer(3,6),
},
n_iter=32,
random_state=0,
verbose=1,
cv=5, n_jobs=-1,
)
regressor.fit(X_train,y_train)
适配后,你可以通过‘best_params_’属性获得模型的最佳参数。
Sklearn-deap 是一个用于实现进化算法的包。它减少了你找到最佳模型参数所需的时间。
它并不会尝试每一种可能的组合,而是只演化出结果最佳的组合。通过 pip 安装‘sklearn-deap’。
from evolutionary_search import EvolutionaryAlgorithmSearchCV
cv = EvolutionaryAlgorithmSearchCV(estimator=SVC(),
params=paramgrid,
scoring="accuracy",
cv=StratifiedKFold(n_splits=4),
verbose=1,
population_size=50,
gene_mutation_prob=0.10,
gene_crossover_prob=0.5,
tournament_size=3,
generations_number=5,
n_jobs=4)
cv.fit(X, y)
继续前进,现在我们来看看可以用来导出模型以供生产的 Scikit 工具。
sklearn-onnx 实现了将 Scikit-learn 模型转换为ONNX。
要使用它,你需要通过 pip 获取‘skl2onnx’。一旦你的管道准备好,你可以使用‘to_onnx’函数来转换模型为 ONNX 格式。
from skl2onnx import to_onnx
onx = to_onnx(pipeline, X_train[:1].astype(numpy.float32))
这是一个用于决策树集合的模型编译器。
它处理各种基于树的模型,如随机森林和梯度提升树。
你可以用它导入 Scikit-learn 模型。这里的‘model’是一个 scikit-learn 模型对象。
import treelite.sklearn
model = treelite.sklearn.import_model(model)
在这一部分,我们将探讨可以用于模型可视化和检查的库。
dtreeviz 用于决策树的可视化和模型解释。
from dtreeviz.trees import dtreeviz
viz = dtreeviz(
model, X_train, y_train,
feature_names=boston.feature_names,
fontname="Arial", title_fontsize=16,
colors = {"title":"red"}
)
eli5 是一个可以用于调试和检查机器学习分类器的包。你还可以用它来解释这些分类器的预测。
例如,Scikit-learn 估算器权重的解释可以如下所示:
import eli5
eli5.show_weights(model)
dabl– 数据分析基础库
dabl 提供了常见机器学习任务的样板代码。它仍在积极开发中,因此不推荐用于生产系统。
import dabl
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_digits
X, y = load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
sc = dabl.SimpleClassifier().fit(X_train, y_train)
print("Accuracy score", sc.score(X_test, y_test))
Skorch 是 PyTorch 的 Scikit-learn 封装器。
它允许你在 Scikit-learn 中使用 PyTorch。它支持多种数据类型,如 PyTorch Tensors、NumPy 数组和 Python 字典。
from skorch import NeuralNetClassifier
net = NeuralNetClassifier(
MyModule,
max_epochs=10,
lr=0.1,
iterator_train__shuffle=True,
)
net.fit(X, y)
在本文中,我们探讨了一些扩展 Scikit-learn 生态系统的流行工具和库。
如你所见,这些工具可以用于:
-
处理和转换数据,
-
实现自动化机器学习,
-
执行自动特征选择,
-
进行机器学习实验,
-
选择适合你问题的最佳模型和管道,
-
导出模型以供生产…
…以及更多!
尝试在您的 Scikit-learn 工作流程中使用这些包,您可能会惊讶于它们的便利性。
个人简介:德里克·穆伊提是一位数据科学家,对分享知识充满热情。他通过 Heartbeat、Towards Data Science、Datacamp、Neptune AI、KDnuggets 等博客积极贡献于数据科学社区。他的内容在互联网上的观看次数已超过百万。德里克还是一名作者和在线讲师。他还与各个机构合作,实施数据科学解决方案以及提升员工技能。您可能想查看他的Python 完整数据科学与机器学习训练营课程。
原文。经许可转载。
相关:
-
数据科学、数据可视化和机器学习的顶级 Python 库
-
深度学习、自然语言处理和计算机视觉的顶级 Python 库
-
在 TensorFlow 中修剪机器学习模型
1. 谷歌网络安全证书 - 快速进入网络安全职业道路。
2. 谷歌数据分析专业证书 - 提升您的数据分析能力
3. 谷歌 IT 支持专业证书 - 支持您的组织进行 IT 管理