神经网络训练之交叉验证

来源:互联网 发布:自动变速箱编程 编辑:程序博客网 时间:2024/06/05 19:31
本文转自


http://blog.csdn.net/acdreamers/article/details/44663891,感谢原作者的付出和分享。


今天来讲一种在机器学习中常用的精度测试方法,叫做交叉验证。它的目的是得到可靠稳定的模型,具体做法是拿出

大部分数据进行建模,留小部分样本用刚刚建立的模型进行预测,并求出这小部分样本预测的误差,记录它们的平方

和,这个过程一直进行,直到所有的样本都恰好被预测了一次,交叉验证在克服过拟合问题上非常有效。接下来介绍

一些常用的交叉验证方法。

 

 

1. 10折交叉验证

 

   10折交叉验证是把样本数据分成10份,轮流将其中9份做训练数据,将剩下的1份当测试数据,10次结果的均值作

   为对算法精度的估计,通常情况下为了提高精度,还需要做多次10折交叉验证。更进一步,还有K折交叉验证,10

   折交叉验证是它的特殊情况。K折交叉验证就是把样本分为K份,其中K-1份用来做训练建立模型,留剩下的一份来

   验证,交叉验证重复K次,每个子样本验证一次。

 

 

2. Holdout验证

 

   其实Holdout验证并不是一种交叉验证,因为数据并没有交叉使用。它的方法是这样的,随机从最初的样本中选择

   部分,形成验证数据,而剩下的当作训练数据。一般来说,少于三分之一的数据被选作验证数据。

 

 

3. 留一验证

 

   留一验证只使用样本数据中的一项当作验证数据,而剩下的全作为训练数据,一直重复,直到所有的样本都作验证

   数据一次。可以看出留一验证实际上就是K折交叉验证,只不过这里的K有点特殊,K为样本数据个数。

 

 

通常我们使用Python的机器学习库Scrikit-Learn中的Cross-Vlidation来做交叉验证。这里有上面介绍的交叉

证方法,具体参考:http://scikit-learn.org/stable/modules/cross_validation.html

 

一个比较有用的函数是train_test_split功能是从样本中随机的按比例选取train datatest data。形式为

 

X_train, X_test, y_train, y_test =

cross_validation.train_test_split(train_data,train_target, test_size=0.4, random_state=0)


test_size是样本占比。如果是整数的话就是样本的数量。random_state是随机数的种子。

 

最后附上样本调优的文章:http://blog.csdn.NET/busycai/article/details/6159109

0 0
原创粉丝点击