交叉验证与偏差方差平衡

文章介绍了交叉验证在防止模型过拟合中的作用,通过代码示例展示了如何使用KNN进行交叉验证调整模型参数。同时,解释了偏差和方差的概念,指出在模型训练中需要平衡两者,以避免过拟合或欠拟合,并提出了降低方差的方法。
摘要由CSDN通过智能技术生成

目录

一、交叉验证

二、偏差方差平衡


一、交叉验证


在机器学习中,我们通过训练数据集来训练模型,然后通过验证数据集来调整超参数使模型达到最优,最后通过测试数据集直接对模型进行预测,衡量模型的性能好坏。

但是验证数据集是从原来的数据集中随机切分出来的,因此训练模型有可能过拟合这个验证数据集,一旦这个验证数据集有极端的数据就可能会导致模型的不准确。

基于此,我们可以借助交叉验证来调整模型的参数,能够最大程度遏制模型欠拟合和过拟合。

通过这种方式,相比于只设定一个验证数据集更为可靠。

代码示例:

import numpy as np
from sklearn import datasets

digits = datasets.load_digits()
X = digits.data
y = digits.target

from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.4,random_state = 666)

#交叉验证
from sklearn.model_selection import cross_val_score
from sklearn.neighbors import KNeighborsClassifier

best_score, best_p, best_k = 0, 0, 0                     
for k in range(2,11):     
    for p in range(1,6):  
        knn_clf = KNeighborsClassifier(n_neighbors=k,p=p)
        scores = cross_val_score(knn_clf,X_train,y_train)  #默认cv=3,分成三份
        score = np.mean(scores.astype(float))
        if score > best_score:
            best_score, best_p, best_k = score, p, k

            
print("Best K = ",best_k)
print("Best P = ",best_p)
print("Best Score = ",best_score)

运行结果:

补充: 

留一法(Leave-One-Out Cross Validation),就是将数据集分成m分,完全不收随机的影响,最接近模型真正的性能指标,缺点就是计算量巨大。

二、偏差方差平衡


如下图所示,根据左下角这个圆圈可以看出所有的点全都完全偏离了中心位置,这种情况就叫做偏差。右上角这个圆圈可以看出大部分点都围绕中心周围,即没有大的偏差,但是它整体过于分散了不集中,因此具有非常高的方差,这就是方差和偏差非常直观的意思。

在机器学习中,模型误差包含了偏差、方差以及不可避免的误差。其中导致偏差的主要原因是对问题本身假设不正确,比如非线性数据使用线性回归,欠拟合。方差产生的原因主要是使用的模型太复杂,如高阶多项式回归,过拟合。不可避免的误差主要是采集的数据本身具有噪音。

非参数学习算法通常是高方差算法,如KNN,因为不对数据进行任何假设;参数学习算法通常是高偏差算法,如线性回归,因为堆数据具有极强的假设。大多数算法具有相应的参数可以用来调整偏差和方差,并且偏差和方差通常是矛盾的,一般来说,降低偏差会提高方差,降低方差会提高偏差。因此,我们要注意模型偏差与方差的平衡。

机器学习的主要挑战是来自方差,解决高方差的通常手段有:

  • 降低模型复杂度
  • 减少数据维度;降噪
  • 增加样本数
  • 使用验证集
  • 模型正则化
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值