过拟合欠拟合与交叉验证集说明

过拟合是指模型能很好地拟合训练的样本,但是对新出现的数据预测的准确性不是很好。

欠拟合是指模型还不能很好的拟合训练当中的样本,当然对于新出现的数据预测的准确性也不好。

下面通过一段python代码对一个函数式子方程进行拟合以说明过拟合、适中、欠拟合的情况。

上图中蓝色部分是用一次函数拟合散点,对于欠拟合的情况;黄色三次函数得到的适当拟合情况;绿色为十次函数得到的过拟合曲线。

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

# 定义一次函数方程拟合
def f_1(x,A,B):
    return A*x + B

#定义三次函数拟合
def f_3(x,A,B,C,D):
    return A*pow(x,3)+B*pow(x,2)+C*x +D

#定义十次函数拟合
def f_10(x,A,B,C,D,E,F,G,H,I,J,K):
    return A*pow(x,10)+B*pow(x,9)+C*pow(x,8) + D*pow(x,7)+E*pow(x,6)+F*pow(x,5)+G*pow(x,4)+H*pow(x,3) + I*pow(x,2)+J*x +K

# 定义生成函数值的方法
def  get_prob_xy():
    n_dots = 20
    x = np.linspace(0,1,n_dots)
    y = np.sqrt(x)+0.2*np.random.rand(n_dots) - 0.1
    return x,y

# 定义绘图函数
def plot_figure():
    plt.figure()

    x ,y = get_prob_xy()
    plt.scatter(x[:],y[:],s = 15,c = "red")

    # 一次函数模拟
    A , B = optimize.curve_fit(f_1,x,y)[0]
    y_f1 = A*x + B
    plt.plot(x,y_f1,"blue")

    # 三次函数模拟
    A, B, C, D = optimize.curve_fit(f_3,x,y)[0]
    y_f3 = A*pow(x,3)+B*pow(x,2)+C*x +D
    plt.plot(x, y_f3, "yellow")

    # 十次函数模拟
    A, B, C, D, E, F, G, H, I, J, K = optimize.curve_fit(f_10,x,y)[0]
    y_f10 = A*pow(x,10)+B*pow(x,9)+C*pow(x,8) + D*pow(x,7)+E*pow(x,6)+F*pow(x,5)+G*pow(x,4)+H*pow(x,3) + I*pow(x,2)+J*x +K
    plt.plot(x, y_f10, "green")
    # 打印显示
    plt.show()

plot_figure()

下面说一下,数据集的划分。通常好多地方会将数据集分为训练集和测试集,划分比率有73成,82成。但是也有些地方建议的是将数据集划分为三个部分,分成单位为622,为什么需要三个部分,因为相比于前面的训练集、测试集还多了一个验证集。

为什么需要验证集?这里给出了解释。。。

  • 7
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值