- 使用 Python 进行机器学习
- 家
- 基本
- Python生态系统
- 机器学习方法
- ML 项目的数据加载
- 通过统计了解数据
- 通过可视化了解数据
- 准备数据
- 数据特征选择
- 机器学习算法 - 分类
- 介绍
- 逻辑回归
- 支持向量机(SVM)
- 决策树
- 朴素贝叶斯
- 随机森林
- 机器学习算法 - 回归
- 随机森林
- 线性回归
- 机器学习算法 - 聚类
- 概述
- K均值算法
- 均值平移算法
- 层次聚类
- ML 算法 - KNN 算法
- 寻找最近的邻居
- 性能指标
- 自动工作流程
- 提高机器学习模型的性能
- 提高 ML 模型的性能(续……)
- 使用 Python 进行机器学习 - 资源
- 使用 Python 进行机器学习 - 快速指南
- 使用 Python 进行机器学习 - 资源
- 使用 Python 进行机器学习 - 讨论
提高 ML 模型的性能(续……)
通过算法调整提高性能
我们知道,机器学习模型的参数化方式使得它们的Behave可以针对特定问题进行调整。算法调优意味着找到这些参数的最佳组合,从而提高机器学习模型的性能。这个过程有时称为超参数优化,算法本身的参数称为超参数,ML 算法找到的系数称为参数。
在这里,我们将讨论Python Scikit-learn提供的一些算法参数调优方法。
网格搜索参数调整
这是一种参数调整方法。该方法工作的关键点在于,它针对网格中指定的算法参数的每种可能组合系统地构建和评估模型。因此,我们可以说该算法具有搜索性质。
例子
在下面的 Python 秘籍中,我们将使用 sklearn 的 GridSearchCV 类执行网格搜索,以评估皮马印第安人糖尿病数据集上岭回归算法的各种 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 类执行随机搜索,以评估皮马印第安人糖尿病数据集上岭回归算法的 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]
接下来,评估岭回归算法的各种 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
上面的输出为我们提供了与网格搜索类似的最佳分数。