在机器学习模型构建过程中,寻找最优算法并调整其超参数是一项必不可少的任务。许多人可能会说:“付出总有回报”,但这个过程既艰巨又复杂。最常用的超参数优化方法是网格搜索,它通过暴力搜索来识别最佳参数组合。然而,最新的研究表明,在网格搜索中随机评估这些参数也能发现最佳选项。这强调了在超参数领域智能搜索的必要性。
接下来,来谈谈自动化机器学习(AutoML)工具。许多AutoML工具通过识别最佳模型来加速机器学习过程。这里特别提到的是最早的AutoML包之一——基于树的管道优化工具(TPOT)。这个开源的Python包能够自动完成机器学习中最繁琐的部分——识别最佳模型。
TPOT是一个无与伦比的资产,如果希望获得非常有竞争力的分类准确性,它是一个真正的划算选择。此外,这个工具还能识别出可以增强分类准确性的人为特征构造器,通过识别新的管道操作符以非常苛刻的方式提升准确性。TPOT的操作符被链接在一起,形成一系列作用于给定数据集的操作,如下所示。
这里有一个案例研究,使用Pima印第安人糖尿病数据集预测5年内糖尿病的发病率。根据这项研究,该问题达到的最大准确率为77.47%。让在相同的场景下使用TPOT AutoML来看看它是如何工作的。
为了演示目的,使用了相同的糖尿病数据集。如果想尝试这个开源Python包解决的其他问题,可以在TPOT开发者的官方GitHub仓库中找到。
import tpot
from pandas import read_csv
from sklearn.preprocessing import LabelEncoder
from sklearn.model_selection import StratifiedKFold
from tpot import TPOTClassifier
import os
file_path = './pima-indians-diabetes.data.csv'
df = pd.read_csv(file_path, header=None)
data = df.values
X, y = data[:, :-1], data[:, -1]
X = X.astype('float32')
y = LabelEncoder().fit_transform(y.astype('str'))
cv = StratifiedKFold(n_splits=10)
model = TPOTClassifier(generations=5, population_size=50, cv=cv, scoring='accuracy', verbosity=2, random_state=1, n_jobs=-1)
model.fit(X, y)
model.export('tpot_data.py')
还重复了上述实验,使用了5折交叉验证。
cv = StratifiedKFold(n_splits=5)
model = TPOTClassifier(generations=5, population_size=50, cv=cv, scoring='accuracy', verbosity=2, random_state=1, n_jobs=-1)
model.fit(X, y)
model.export('tpot_data.py')
使用10折交叉验证选择的最佳管道是:LinearSVC,准确率为77.47%。使用5折交叉验证选择的最佳管道是:XGBClassifier,准确率为78.39%。