提高 ML 模型的性能(续……)


正如我们所知,ML 模型的参数化方式使得它们的行为可以针对特定问题进行调整。算法调优意味着找到这些参数的最佳组合,从而提高机器学习模型的性能。这个过程有时称为超参数优化,算法本身的参数称为超参数,ML算法找到的系数称为参数。

在这里,我们将讨论Python Scikit-learn提供的一些算法参数调整方法。

网格搜索参数调整

这是一种参数调整方法。该方法的工作要点是,它为网格中指定的每个可能的算法参数组合有条不紊地构建和评估模型。因此,我们可以说该算法具有搜索性质。

例子

在下面的 Python 秘籍中,我们将使用 sklearn 的 GridSearchCV 类来执行网格搜索,以评估 Pima Indians 糖尿病数据集上 Ridge 回归算法的各种 alpha 值。

首先,导入需要的包如下:

import numpy
from pandas import read_csv
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV

现在,我们需要像前面的例子一样加载 Pima 糖尿病数据集:

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

接下来,评估各种 alpha 值如下:

alphas = numpy.array([1,0.1,0.01,0.001,0.0001,0])
param_grid = dict(alpha=alphas)

现在,我们需要在我们的模型上应用网格搜索:

model = Ridge()
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid.fit(X, Y)

使用以下脚本行打印结果:

print(grid.best_score_)
print(grid.best_estimator_.alpha)
0.2796175593129722
1.0

上面的输出为我们提供了最佳分数和网格中达到该分数的参数集。在这种情况下,alpha 值为 1.0。

随机搜索参数调整

这是一种参数调整方法。该方法的关键点是它从随机分布中对算法参数进行采样,并进行固定次数的迭代。

例子

在下面的 Python 秘籍中,我们将使用 sklearn 的 RandomizedSearchCV 类执行随机搜索,以评估 Pima Indians 糖尿病数据集上 Ridge 回归算法的 0 到 1 之间的不同 alpha 值。

首先,导入需要的包如下:

import numpy
from pandas import read_csv
from scipy.stats import uniform
from sklearn.linear_model import Ridge
from sklearn.model_selection import RandomizedSearchCV

现在,我们需要像前面的例子一样加载 Pima 糖尿病数据集:

path = r"C:\pima-indians-diabetes.csv"
headernames = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
data = read_csv(path, names=headernames)
array = data.values
X = array[:,0:8]
Y = array[:,8]

接下来,评估 Ridge 回归算法上的各种 alpha 值如下:

param_grid = {'alpha': uniform()}
model = Ridge()
random_search = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=50,
random_state=7)
random_search.fit(X, Y)

使用以下脚本行打印结果:

print(random_search.best_score_)
print(random_search.best_estimator_.alpha)
0.27961712703051084
0.9779895119966027

上面的输出为我们提供了与网格搜索类似的最佳分数。