Sklearn
安装:
pip install -U scikit-learn
datasets
自带数据集
样本生成器
Metrics
pairwise
pairwise_distances:成对距离
评分方法
Model_selection
如果ShuffleSplit和train_test_split设置的随机种子相同,也就是random_state一样,那么ShuffleSplit的第一次切分方式与train_test_split完全一致
train_test_split:数据集切分(一次)
ShuffleSplit:数据集切分(多次随机划分)
KFold:数据集切分(交叉验证)
KFold通过参数n_splits把数据集分为互斥的n折,每次循环取一折作为测试集;如果shuffle是False,那么程序会按照原始数据集按索引顺序划分
StratifiedKFold:数据集切分(分层交叉验证)
StratifiedKFold的参数跟KFold是一样的,但是它的功能是实现分层抽样。
cross_value_score:模型选择(交叉验证)
cross_validate:模型选择(交叉验证)
cross_validate方法和cross_validate_score有个两个不同点:
- 它允许传入多个评估方法,可以列表或字典的形式传入。
- 最后返回的scores为一个字典(cross_validate_score返回一个 array),字典的key为:dict_keys(['fit_time', 'score_time', 'test_score', 'train_score'])
- fit_time:训练时间;score_time:评分的次数;test_score:测试集的准确率数组;train_score:训练集的准确率数组;
train_score
和test_score
的对比可以帮助判断模型是否存在过拟合或欠拟合等问题
负均方误差:虽然均方误差永远为正,但是sklearn中的参数scoring下,均方误差作为评 判标准时,却是计算”负均方误差“(neg_mean_squared_error)。这是因为sklearn在计算模型评估指标的时候, 会考虑指标本身的性质,均方误差本身是一种误差,所以被sklearn划分为模型的一种损失(loss)。在sklearn当中, 所有的损失都使用负数表示,因此均方误差也被显示为负数了。真正的均方误差MSE的数值,其实就是 neg_mean_squared_error去掉负号的数字。
GridSearchCV:网格搜索
RandomizedSearchCV:随机网格搜索
Bayesian Optimization:贝叶斯优化
贝叶斯优化(Bayesian Optimization)是一种用于全局优化的技术,特别适用于高维、非凸、昂贵的目标函数。在机器学习中,贝叶斯优化常用于超参数调优,因为它可以在较少的评估次数下找到接近最优的超参数配置。
他是通过拟合一个超参数到评估指标的一个函数,然后求最优解。
scikit-learn
本身并没有内置的贝叶斯优化工具,但你可以使用第三方库如scikit-optimize
(简称skopt
)来实现贝叶斯优化。pip install scikit-optimize
n_iter
参数在贝叶斯优化中表示要进行的优化迭代次数,即在超参数空间中采样的次数。选择合适的n_iter
值是一个权衡计算资源和优化效果的问题。以下是一些一般性的建议:1. 初始探索阶段
在初始探索阶段,通常建议设置较小的
n_iter
值,以便快速了解超参数空间的大致情况。这个阶段的目的是识别出哪些超参数对模型性能影响较大。- 建议区间:10-50次迭代
2. 详细优化阶段
在初始探索阶段之后,可以根据初步结果调整超参数空间,并增加
n_iter
值以进行更详细的优化。这个阶段的目的是找到更接近最优的超参数配置。- 建议区间:50-200次迭代
3. 计算资源允许的情况下
如果计算资源允许,可以进一步增加
n_iter
值,以获得更精确的优化结果。通常,迭代次数越多,找到最优超参数配置的可能性越大,但计算成本也会相应增加。- 建议区间:200-500次迭代
Hyperband优化
Hyperband 是一种用于超参数优化的算法,特别适用于高维、昂贵的目标函数。它通过动态分配资源来加速超参数搜索过程。Hyperband 结合了随机搜索和早停策略,以在有限的计算资源下找到接近最优的超参数配置。
Hyperband的思想是跑多个Successive Halving
Successive Halving的思想如下:
- 假设优化算法关注n组参数,每组参数训练m轮;
- 在第一时刻n=16,m=25,进行训练;
- 第一时刻训练完成之后保留效果最好的前一半的参数,并加大训练轮数m
- 在第二时刻n=8, m=50,进行训练;
- 循环,直到找到最优参数。
Hyperband中每一次跑Successive Halving就在之前的Successive Halving结果上进行筛选。
pip install optuna