机器学习 - 超参数

在机器学习中,超参数是事先给定的,用来控制学习过程的参数。而其他参数的值是通过训练得出的。超参数可分为模型超参数和算法超参数。模型超参数主要用于模型选择,其无助于学习训练集特征;而算法超参数理论上对模型的性能没有影响,而会影响学习的速度和质量。

本文分为 理论介绍Python 代码实现 两部分

👉 点此直接跳转到代码实现

过拟合和欠拟合

欠拟合

对于给定的数据集,欠拟合的成因大多是模型不够复杂、拟合函数能力不够,为此,可以增加迭代次数继续训练、尝试更换其他算法、增加模型的参数数量和复杂程度,或者采用集成方法

过拟合

过拟合成因是给定的数据集相对过于简单,使得模型在拟合函数时过分的考虑了噪声等不必要的数据间的关联。或者说相对于给定数据集,模型过于复杂、拟合能力过强

解决方案:

提前停止训练

减少训练的迭代次数,理论上来说,可以找到一个训练程度,使得验证集误差率最低,视为拟合效果最好的点

正则化

  • L0 正则化

  • L1 正则化

  • L2 正则化


上述解决模型过拟合和欠拟合问题的方式中,涉及到一些超参数

sklearn 中,可以使用网格搜索的方式寻找最佳的参数

Python 代码实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV, train_test_split
from sklearn.datasets import load_iris

def model_train(x_train, x_test, y_train, y_test):
    # 设置 param 进行网格搜索参数设置
    # {参数名 1:[参数值 1,参数值 2],...}
    param_dict = {
        'penalty': ['l1', 'l2'],
        'C': [0.1, 1, 10],
        'solver': ['liblinear']  # 选择 liblinear 以支持 L1 正则化
    }

    # 参数说明:
    # logistic 逻辑回归分类器
    logistic = LogisticRegression()

    # 使用网格搜索进行模型训练找出最佳参数
    grid_search = GridSearchCV(logistic, param_dict, cv=5)
    grid_search.fit(x_train, y_train)

    # 使用最佳参数的模型进行测试集评分
    best_model = grid_search.best_estimator_
    score = best_model.score(x_test, y_test)

    return score