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交叉验证的主要内容,如果未能解决你的问题,请参考以下文章

吴恩达机器学习作业偏差与方差-python实现

总结:Bias(偏差),Error(误差),Variance(方差)及CV(交叉验证)

交叉验证、留一交叉验证、自助法

深度盘点:8000字详细介绍 Python 中的 7 种交叉验证方法

如果我们在管道中包含转换器,来自 scikit-learn 的“cross_val_score”和“GridsearchCV”的 k 折交叉验证分数是不是存在偏差?

,带你明白什么是过拟合,欠拟合以及交叉验证