机器学习(十)——交叉验证

交叉验证

我们之前训练模型的时候呢会传一个或多个超参数(例如,学习率,阈值等)那我们到底要传多少呢?是0.1?还是。01?还是0.001?我们也不能跑一ici次程序,记录下结果和超参数,然后再修改代码(修改超参数),再跑,再修改…有没有什么办法可以让它自动调整呢?于是就有了下面的办法:

之前我们都是把数据分为测试集和训练集,现在再把训练集进行拆分,分成和验证集和训练集。
流程:先用训练集拆分成两部分用来找到最优的超参数---->然后用训练集(这次不拆分了)进行训练-----> 然后用测试集测试
在这里插入图片描述

上图举例:
假设有10000条数据,有三个超参数alpha,我们拿25%(2500条)的作为测试集,把7500条作为训练集,假设我们做3折验证,

第一步:剩下的7500条平分三块,各2500条,就会对每一个超参数进行下面的操作:

先用某一个超参数
第一次迭代:拿前两块作为训练集训练一个模型,有了模型之后,用第三块作为验证集,求得一个评估指标E1
第二次:拿第二块作为验证集,1,3块作为训练集,求得E2
第三次:拿第一块做验证集,2,3块做训练集,求得E3
然后求平均值:1/3*(E1+E2+E3),最后所有评估指标Ei求平均值就是平均评估指标.
保留下来这个平均评估指标,然后换一个超参数再来一次求得第二个平均评估指标,再换第三 个超参数求得第三个平均评估指标.
如果是多组超参数,则会把他们组合一遍,比如有3个阈值和3个学习率,则会组合一遍,共需进行9次上面的操作.
对比三个平均评估指标,选最小的对应的超参数,这样第一步找最优超参数就完成了

所以每个超参数都对应一个平均评估指标,如果评估标准是错误率的话,那么哪个超参数对应的评估指标越小就选哪个超参数,

第二步:然后再用训练集的数据训练一个模型,

第三步:用测试集的数据进行最终的评判

所以用cv交叉验证,一开始传超参数的时候不用传一个,可以传好几个,这样就会每个超参数都用一下,帮你选择最好的超参数
所以交叉验证的用处就是找合适的超参数

代码来了:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名: logistic_regression.py

import numpy as np
from sklearn import datasets
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import GridSearchCV
import matplotlib.pyplot as plt
from time import time

__author__ = 'yasaka'

iris = datasets.load_iris()  # 鸢尾花数据集,可以点进源码看一下,介绍的很详细
# print(list(iris.keys()))  # ['data', 'target', 'target_name
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值