在机器学习领域,模型构建是一个需要不断迭代的过程,并且是一门艺术。根据“没有免费的午餐”定理,没有任何一个模型能够完美适用于所有问题。因此,需要尝试多种方法来构建最适合特定数据的模型。这包括进行多次探索性数据分析、采用不同的数据预处理技术、构建多种基线模型以及调整超参数以获得最佳模型。
探索性数据分析(EDA)是机器学习任务的起点。通过EDA,可以更好地理解数据,让数据自己“说话”。Pywedge提供了8种不同类型的交互式图表,用户可以通过这些图表来理解数据中隐藏的模式,并为后续的机器学习任务做出明智的选择。
在将数据输入机器学习模型之前,需要进行预处理。这包括处理缺失值、转换分类数据、处理不平衡数据等。Pywedge提供了一个基线模型类和每个分类或回归任务的方法。数据可以交互式地预处理,基线模型类返回各种基线模型指标,这些指标可以作为后续机器学习任务中超参数调优模型指标的基准。
为什么需要进行超参数调优?超参数是什么?它们与模型参数有何不同?当从Scikit Learn调用一个估计器类时,例如逻辑回归,隐式地设置了默认的超参数。这意味着在模型拟合数据之前,需要设置一些参数,这些参数被称为超参数。而当将数据拟合到模型中时,模型会产生某些输出,例如系数和截距,这些输出被称为模型参数。
超参数是输入到模型中的,而模型参数是模型的输出!因此,为什么需要调整超参数呢?因为Sklearn、XGBoost、Catboost或任何Python库的默认参数都是为通用数据集设置的。但是没有两个数据集/业务案例是相同的,怎么能将默认超参数应用于所有数据集呢?记住“没有免费的午餐”定理!因此,为了构建一个高效的模型,必须理解数据并选择/调整适当的超参数。
现在已经了解了默认的逻辑回归参数,想要改变其中一个默认参数,比如说,求解器。求解器参数的选项有'newton-cg'、'lbfgs'、'liblinear'、'sag'和'saga'。默认的求解器是'lbfgs',但是假设数据集规模较小,想要尝试'liblinear',并改变默认参数'C'的值从1.0变为0.50。可以如下实例化估计器,使用上面期望的一组参数:
model = LogisticRegression(C=0.5, solver='liblinear')
在这里,单独设置了参数的值。由于机器学习是一个迭代过程,需求可能会在寻找最佳性能模型的过程中增长,例如可能想要尝试另一个求解器'sag',为'C'和'tol'设置不同的参数。在这种情况下,每次单独更改超参数并运行模型可能会非常耗时。
超参数调优是一个迭代过程,用于从超参数搜索空间中找到最佳参数。
Sklearn提供了Grid Search CV和Randomized Search CV类来从超参数搜索空间中找到最佳超参数。下面是一个使用sklearn的典型超参数搜索工作流程的示例代码:
from sklearn.model_selection import GridSearchCV
from sklearn.linear_model import LogisticRegression
param_grid = {'C': [0.1, 1, 10], 'solver': ['liblinear', 'lbfgs']}
model = LogisticRegression()
grid = GridSearchCV(model, param_grid, cv=5)
grid.fit(X_train, y_train)
如果想要尝试多个基估计器的超参数搜索,代码量可能会迅速增加。此外,当需要编写Grid Search CV的代码时,通常需要浏览并打开估计器的文档页面,以了解各种参数选项、某个参数的输入格式,比如它是一个整数还是浮点数或字符串,参数的确切拼写,因为即使是很小的拼写错误也会导致错误,例如,如果输入了max-iter而不是max_iter,就会得到一个错误!
这就是Pywedge引入HP_Tune模块(一个交互式基于小部件的超参数搜索选项)的想法,旨在简化用户的超参数搜索工作空间,并使用户能够更高质量地选择最佳超参数,而无需担心冗长的代码细节和跟踪超参数。
Pywedge_HP是一个交互式基于小部件的超参数调优模块,它有两个方法HP_Tune_Classification()和HP_Tune_Regression(),分别用于分类和回归案例的超参数调优。
使用Pywedge超参数调优小部件,用户可以无缝设置不同超参数的值,并且可以通过点击一个按钮来完成Grid/Random搜索CV,使用户可以花更多的时间来理解数据和探索哪个超参数最适合给定的数据集。
小部件标签提供了一个输出标签,一旦搜索完成,Grid/Random搜索CV的结果将被填充。还有一个帮助页面标签,用户选择的估计器的网页将被填充,供用户快速参考。
此外,在Pywedge中跟踪多个搜索运行的超参数也非常容易。Pywedge内部使用MLFLow来跟踪超参数,用户可以无缝跟踪一个或不同估计器的各种搜索运行的超参数。
安装Pywedge:
pip install pywedge
导入pywedge:
import pywedge as pw
实例化Pywedge_HP类进行交互式超参数调优:
pph = pw.Pywedge_HP(train, test, c=None, y='class', tracking=True)
Args:
train = 训练数据框
test = 测试数据框
c = 要删除的任何冗余列(例如ID列等,目前支持单个列的删除,后续版本将提供多个列删除的要求)
y = 目标列名作为字符串
tracking = True/False(默认) # 设置为True以启用mlflow超参数跟踪
调用HP_Tune_Classification进行分类超参数调优任务:
pph.HP_Tune_Classification()
返回: