任务五-模型参数优化

模型参数优化

使用网格搜索法对模型进行调优(调参时采用五折交叉验证的方式),并进行模型评估

网格搜索

网格搜索,其实可以叫穷举搜索,就是在所有候选的参数中,将不同参数组合起来,找出表现最好的一组参数。
eg:以有两个参数的模型为例,参数a有3种可能,参数b有4种可能,把所有可能性列出来,可以表示成一个3*4的表格,其中每个cell就是一个网格,循环过程就像是在每个网格里遍历、搜索,所以叫网格搜索

五折交叉验证

五折交叉验证,不是打五折的意思。而是将训练模型的数据分为五份,并取第五份作为验证集,剩下的作为训练集。最后,用五分数据跑模型,得到的分数求平均值。用交叉验证的目的是为了得到可靠稳定的模型。

各类模型优化结果

逻辑回归模型

clf = LogisticRegression(C=0.1, penalty='l1')
model = clf.fit(X_train, y_train)
# 参数说明。C表示逻辑回归模型中从参数C,分别取如下数组中的值,penalty同理,分别可以取l1和l2
params = {'C': [0.01, 0.1, 0.5, 1], 'penalty': ['l1', 'l2']}
# 使用网格搜索法,对模型进行调优,准确度评估采用roc_auc值
grid_search = GridSearchCV(model, param_grid=params, scoring='roc_auc', cv=5)
grid_search.fit(X_train, y_train)
print("最优化参数组合:", grid_search.best_params_)

结果:
优化后模型的分数评估
最优化参数组合: {‘penalty’: ‘l1’, ‘C’: 0.1}
accuracy:
训练集: 0.7959
测试集: 0.8059
precision:
训练集: 0.7158
测试集: 0.7436
recall:
训练集: 0.3179
测试集: 0.3286
F1-score:
训练集: 0.4402
测试集: 0.4558
AUC:
训练集: 0.8011
测试集: 0.8013
在这里插入图片描述

SVM模型

代码实现:

# 使用svm模型
clf = SVC(C=0.01, kernel='linear', probability=True)
model = clf.fit(X_train, y_train)
params = {'C': [0.01, 0.1, 0.5, 1, 10], 'kernel': ['linear', 'poly', 'rbf', 'sigmoid']}
# 使用网格搜索法,对模型进行调优,准确度评估采用roc_auc值
grid_search = GridSearchCV(model, param_grid=params, scoring='roc_auc', cv=5)
grid_search.fit(X_train, y_train)

注:在对SVM模型进行参数优化,当params中的kernel包含’precomputed’时,程序运行异常:X should be a square kernel matrix。原因是kernel='precomputed’时,传入的矩阵不是普通的数据矩阵,而是表示样本成对相似性的数据矩阵。参考链接:原址

运行结果:
优化后模型的分数评估
最优化参数组合: {‘C’: 0.01, ‘kernel’: ‘linear’}
accuracy:
训练集: 0.7860
测试集: 0.7912
precision:
训练集: 0.7783
测试集: 0.8022
recall:
训练集: 0.2131
测试集: 0.2068
F1-score:
训练集: 0.3346
测试集: 0.3288
AUC:
训练集: 0.8032
测试集: 0.8127
在这里插入图片描述

决策树模型

# 决策树
clf = DecisionTreeClassifier(max_depth=5)
model = clf.fit(X_train, y_train.values)
# 由于参数过多,导致网格搜索优化运行很久,因此,决策树模型暂时只加了一个参数
params = {'max_depth': [5, 10, 50]}
# 使用网格搜索法,对模型进行调优,准确度评估采用roc_auc值
grid_search = GridSearchCV(model, param_grid=params, scoring='roc_auc', cv=5)
grid_search.fit(X_train, y_train)
print('\n优化后模型的分数评估')

结果:
优化后模型的分数评估
最优化参数组合: {‘max_depth’: 5}
accuracy:
训练集: 0.8058
测试集: 0.7624
precision:
训练集: 0.7310
测试集: 0.5455
recall:
训练集: 0.3655
测试集: 0.2380
F1-score:
训练集: 0.4873
测试集: 0.3314
AUC:
训练集: 0.8005
测试集: 0.7328

在这里插入图片描述

随机森林

代码

clf = RandomForestClassifier(oob_score=True, n_estimators=10)
model = clf.fit(X_train, y_train.values)
params = {'oob_score': [True, False], 'n_estimators': [10, 50, 200, 500]}
grid_search = GridSearchCV(model, param_grid=params, scoring='roc_auc', cv=5)
grid_search.fit(X_train, y_train)
print('\n优化后模型的分数评估')

结果:
优化后模型的分数评估
最优化参数组合: {‘n_estimators’: 500, ‘oob_score’: False}
accuracy:
训练集: 1.0000
测试集: 0.8003
precision:
训练集: 1.0000
测试集: 0.7698
recall:
训练集: 1.0000
测试集: 0.2748
F1-score:
训练集: 1.0000
测试集: 0.4050
AUC:
训练集: 1.0000
测试集: 0.7792
在这里插入图片描述

总结

准备对比下优化前的模型参数,看看效果
注:XGBClassifier模型没跑起来,报错了,填坑中…

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值