Exemplo n.º 1
0
fig, ax = plt.subplots(1, figsize=(15, 8))
ax.plot(range(1, 201), cvresult1.iloc[:, 2], c="red", label="train,original")
ax.plot(range(1, 201), cvresult1.iloc[:, 0], c="orange", label="test,original")
ax.set_ylim(top=5)  # 截取Y轴最大值 进行显示
ax.grid()
ax.legend(fontsize="xx-large")
plt.show()
'''
从曲线上可以看出,模型现在处于过拟合的状态。我们决定要进行剪枝。我们的目标是:训练集和测试集的结果尽量
接近,如果测试集上的结果不能上升,那训练集上的结果降下来也是不错的选择(让模型不那么具体到训练数据,增加泛化能力)。
'''
# In[]:
ft.learning_curve_xgboost(X,
                          y,
                          param1,
                          num_round=num_round,
                          metric="rmse",
                          n_fold=5,
                          set_ylim_top=5)  # 默认rmse

# In[]:
# 二、学习曲线调参: (重点:调参方式)
'''
一、调参要求:
1、测试集上的模型指标(MSE) 较默认超参数模型 要降低(最少持平);
2、允许训练集上的模型指标(MSE) 较默认超参数模型 升高;
3、多个模型在都满足1、2条件的情况下,选择 训练集与测试集 MSE距离近的模型(泛化误差小)
'''
# 默认超参数:
param1 = {
    'silent': True  # 默认False: 打印
Exemplo n.º 2
0
ft.plot_learning_curve(XGBR(n_estimators=250, random_state=420, silent=True)
                    ,"XGB",train_X,train_y,ax=None,cv=cv)
plt.show()



# In[]:
# xgb原生库:
# 2.1、评估指标要么在param的map中指定(非xgboost.cv函数); 2、要么直接在xgb.cv函数中指定,不能一起指定。
param1 = {'silent':True,'obj':'reg:squarederror',"gamma":20}  # "eval_metric":"rmse",默认rmse
#param2 = {'silent':True,'obj':'reg:squarederror',"gamma":20}
num_round = 250
n_fold=3 # 必须最少3折交叉验证
# 回归模型:默认均方误差
ft.learning_curve_xgboost(train_X, train_y, param1, None, num_round, "mae", n_fold, None, set_ylim_top=0.04) # 默认rmse
# 训练集并未平稳,还的继续调参,机器顶不住了,暂时就到这吧

# In[]:
# 2.2、最终调参方式: 3组参数/3个模型 在一个图中显示 进行评估指标对比调参
# 这里就摆个示例: 还有 2组参数/2个模型,机器顶不住了
dfull = xgb.DMatrix(train_X,train_y)

# 默认超参数:
param1 = {'silent':True # 默认False: 打印
          ,'obj':'reg:linear' # 默认分类: binary:logistic
          ,"subsample":1 # 默认1
          ,"max_depth":6 # 默认6
          ,"eta":0.3 # 默认0.3
          ,"gamma":0 # 默认0
          ,"lambda":1 # 默认1,L2正则
Exemplo n.º 3
0
1、控制训练集上的训练:即,降低训练集上的表现(R^2降低、MSE升高),从而使训练集表现 和 测试集的表现 逐步趋近。
2、gamma不断增大,训练集R^2降低、MSE升高,训练集表现 和 测试集的表现 逐步趋近;但随着gamma不断增大,测试集也会出现R^2降低、MSE升高 的 欠拟合情况。所以,需要找到gamma的平衡点。
3、gamma主要是用来 降低模型复杂度、提高模型泛化能力的(防止过拟合);不是用来提高模型准确性的(降低欠拟合)。
'''
# 回归例子:
# 1、评估指标要么在param的map中指定(非xgboost.cv函数); 2、要么直接在xgb.cv函数中指定,不能一起指定。
param1 = {
    'silent': True,
    'obj': 'reg:linear',
    "gamma": 0
}  # "eval_metric":"rmse",默认rmse
param2 = {'silent': True, 'obj': 'reg:linear', "gamma": 20}
num_round = 270
n_fold = 5
# 回归模型:默认均方误差
ft.learning_curve_xgboost(X, y, param1, param2, num_round, "rmse",
                          n_fold)  # 默认rmse

# In[]:
# 分类例子:
from sklearn.datasets import load_breast_cancer

data2 = load_breast_cancer()
x2 = data2.data
y2 = data2.target

# 1、评估指标要么在param的map中指定(非xgboost.cv函数); 2、要么直接在xgb.cv函数中指定,不能一起指定。
param1 = {
    'silent': True,
    'obj': 'binary:logistic',
    "gamma": 0
}  # "eval_metric":"auc",默认error