超参数黑盒(Black-box)优化的Python代码示例
在机器学习中,超参数是用于控制机器学习模型的学习过程的参数。为了与从数据中学到的机器学习模型参数区分开,所以称其为超参数。超参数的配置决定了机器学习模型的性能,每组独特的超参数集可以对应一个学习后的机器学习模型。对于大多数最先进的机器学习模型,所有可能的超参数组合的集合可能会很大。大多数机器学习模型软件包的默认参数值都经过了一些特别的调整优化,可实现不错的基线性能。这意味着可以直接使用,但这些如果针对特定的情况还是需要找到特定的超参数值,这样才能达到最佳的性能。
许多算法和库都提供了自动化的超参数选择。超参数选择是一种优化的过程,在该过程中目标函数由模型表现表示。优化任务是找到一组让机器学习模型的性能表现得最好的参数。
超参数优化的空间非常丰富,最初也是最简单的优化方式是暴力搜索:通过详尽搜索所有可能的超参数组合来找到最佳的超参数。如果可以详尽地搜索超参数空间,那么肯定可以提供一组最佳超参数组合。但是在计算资源和时间方面,暴力搜索搜索超参数空间通常是不可行的,这是因为超参数搜索属于非凸优化的范畴,寻找全局最优几乎是不可行的,因为它可能会陷入几个次优的“陷阱”之一,也称为局部最小值,这使得算法很难搜索超参数的整个空间。
暴力搜索优化的一个替代方案是黑盒(Black-Box)非凸优化技术。黑盒非凸优化算法可根据某些预定义的度量找到足够最佳的局部最小值(或最大值)的次优解。
Python具有许多这样的工具。比如sklearn中的GridSearchCV就是暴力优化。而IBM开发的RBFopt包则提供了黑盒优化的方法。它的工作原理是使用径向基函数来构建和细化正在优化的函数的代理模型。并且它不需要对被优化函数的形状或行为做任何假设,而且可以被用于优化复杂的模型,如深度神经网络。
本文中将使用Kaggle上公开可用的电信客户流失数据集。数据集可以在Apache 2.0许可证下免费使用,修改和共享。
数据准备
首先,让我们使用pandas读取数据:
df = pd.read_csv("telco_churn.csv")
我们看到数据包含诸如客户ID、性别、身份等字段。
字段“churn”,它对应于客户是否重复购买。值为“No”表示该客户重复购买,值为“Yes”表示该客户停止购买。
这是一个简单的分类模型,以gender、senorcitizen、InternetService、DeviceProtection、MonthlyCharges和TotalCharges字段作为输入,并预测客户是否会流失。所以需要将分类列转换为机器可读的值,因为只有数值类型的值才可以作为输入传入机器学习模型。
完整文章:
https://avoid.overfit.cn/post/cd167390bfe54da6b4b1edbef01a8f91