模型优化

超参数优化

① 什么是超参数

超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。超参数的设置主要依赖于经验、实验或经过比较的优选值。以下是一些模型中常见的超参数:

  • 决策树模型树的最大深度;
  • 随机森林模型树的数量;
  • 交叉验证中折叠的额数量;
  • 训练集/测试集的比例等等.

超参数选择主要有随机搜索、网格搜索等方法。

② 网格搜索

网格搜索指将主要参数以及这些参数的主要取值,通过穷举法产生不同组合,计算并比较预测结果,来寻找这些参数的最优组合。

以下是利用网格搜索法,寻找SVM的最优超参数的示例:

# 网格搜索示例
# 网格搜索:将所有参数以及这些参数可能的取值进行
#           组合,寻找性能最好的参数组合
import numpy as np
import sklearn.svm as svm
import sklearn.metrics as sm
import matplotlib.pyplot as mp
import sklearn.model_selection as ms

x, y = [], []

with open('../data/multiple2.txt', 'r') as f:
    for line in f.readlines():
        data = [float(substr) for substr in line.split(',')]
        x.append(data[:-1])  # 输入
        y.append(data[-1])  # 输出

x = np.array(x)
y = np.array(y, dtype=int)
# 定义带筛选的参数(放入列表中)
params = [
    {
    
    
        'kernel': ['linear'],
        'C': [1, 10, 100, 1000]
    },
    {
    
    
        'kernel': ['poly'],
        'C': [1],
        'degree': [2, 3]
    },
    {
    
    
        'kernel': ['rbf'],
        'C': [1, 10, 100, 1000],
        'gamma': [1, 0.1, 0.01, 0.001]
    }
]
# 定义模型
model = ms.GridSearchCV(svm.SVC(),  # 待验证模型
                        params,  # 待验证参数
                        cv=5)  # 折叠数量
model.fit(x, y)  # 训练
# 打印最好成绩、最优参数组合
print('best_score_:', model.best_score_)
print('best_params_:', model.best_params_)
l, r, h = x[:, 0].min() - 1, x[:, 0].max() + 1, 0.005
b, t, v = x[:, 1].min() - 1, x[:, 1].max() + 1, 0.005
grid_x = np.meshgrid(np.arange(l, r, h), np.arange(b, t, v))
flat_x = np.c_[grid_x[0].ravel(), grid_x[1].ravel()]
flat_y = model.predict(flat_x)
grid_y = flat_y.reshape(grid_x[0].shape)

mp.figure('SVM RBF Classifier', facecolor='lightgray')
mp.title('SVM RBF Classifier', fontsize=14)
mp.xlabel('x', fontsize=14)
mp.ylabel('y', fontsize=14)
mp.tick_params(labelsize=10)
mp.pcolormesh(grid_x[0], grid_x[1], grid_y, cmap='gray')
C0, C1 = (y == 0), (y == 1)
mp.scatter(x[C0][:, 0], x[C0][:, 1], c='orangered', s=80)
mp.scatter(x[C1][:, 0], x[C1][:, 1], c='limegreen', s=80)
mp.show()

在这里插入图片描述
③ 随机搜索

随机搜索的思想与网格搜索比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。它的理论依据是,如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值,或其近似值。随机搜索一般会比网格搜索要快一些,但是和网格搜索的快速版一样,它的结果也是没法保证的。

猜你喜欢

转载自blog.csdn.net/weixin_49304690/article/details/112962176