今天来讲一种在机器学习中常用的精度测试方法,叫做交叉验证。它的目的是得到可靠稳定的模型,具体做法是拿出
大部分数据进行建模,留小部分样本用刚刚建立的模型进行预测,并求出这小部分样本预测的误差,记录它们的平方
和,这个过程一直进行,直到所有的样本都恰好被预测了一次,交叉验证在克服过拟合问题上非常有效。接下来介绍
一些常用的交叉验证方法。
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 data和test 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