python实现jacknife交叉验证
Posted _刘文凯_
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python实现jacknife交叉验证相关的知识,希望对你有一定的参考价值。
留一法 是指只使用原样本中的一个样本作为验证集,其他数据作为训练集。本质上,留一法 与 Jackknife 并无区别。因此下面给出jacknife(留一法)的实现代码。
理论解释:
Jackknife 方法由 Quenouille(1949) 提出,并由 Tukey(1958) 创造了 Jackkife 这一术语。Jackknife 是一种再抽样方法,其原始动机是「降低估计的偏差」。
具体来看,对于未知分布的总体,从中抽取样本容量为N的样本,以样本统计量a来估计总体参数A会产生一定误差,尤其在小样本的情况下。为解决这样一个问题,可以将从原样本切去第 i个个体后计算得到的统计量记为xi (也就是去除某一个xi后,用剩余的X作为训练集,将xi作为验证集)。
具体代码如下:
prediction_list=[]
real_list=[]
####LOOCV
loo = LeaveOneOut() # 构建 留一法
loo.get_n_splits(x_data)
for train_index, test_index in loo.split(x_data):
X_train, X_test = x_data[train_index], x_data[test_index]
y_train, y_test = labels[train_index], labels[test_index]
knn = KNeighborsClassifier(n_neighbors=1).fit(X_train, y_train)
predicted_y = knn.predict(X_test)
prediction_list.append(predicted_y)
real_list.append(y_test)
上面就实现一个KNN分类的留一法过程,其它都是相似的过程,只要稍作修改就可以得到应用。
以上是关于python实现jacknife交叉验证的主要内容,如果未能解决你的问题,请参考以下文章
总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)
深度盘点:8000字详细介绍 Python 中的 7 种交叉验证方法
如果我们在管道中包含转换器,来自 scikit-learn 的“cross_val_score”和“GridsearchCV”的 k 折交叉验证分数是不是存在偏差?