zoukankan      html  css  js  c++  java
  • 机器学习之三:过拟合与正则化

    欠拟合、过拟合

    用线性回归拟合曲线,或者用逻辑回归确定分类边界时,选择的曲线有多种。

    以分类问题为例,给定如下样本:

    image

    所取的边界,可以是这样(当然并不止这些):

    image

    不同曲线,对于样本的表达能力,各不相同,上图的几根曲线中:

    曲线1,使用一阶曲线,即直线模型,过于简单,出现大量的错误分类,此时的误差较大,模型欠拟合。

    曲线2,使用高阶曲线,几乎是完美的完成拟合任务,但如此严格的模型,当新的样本与训练样本稍有不同,极有可能出现误判,此时模型过拟合。

    而曲线3,一条相对平滑的曲线,基本能完成拟合任务,同时对于个别噪点也没那么敏感。是一个较为理想的模型。

    如何得到曲线3 ?

    高阶项的引入,可以构建更为复杂的模型。但从曲线2的形态来看,显然高阶项的影响过大了,需想办法做削减。

    假设曲线2的方程为:

    ( h_ heta(x) = heta^{T}x = heta_0 + heta_1x + heta_2x^2 + heta_3x^3 +...+ heta_nx^n )

    如果要减弱高阶项 (x^n) 的影响,可以通过减小 ( heta_n) 的值做到。

    即是在求取 ( heta) 矩阵时,同时要使矩阵内的元素值,尽量的小。

    ( heta) 是通过最小化误差函数计算出来,故而,对J函数做改造——正则化。

    正则化误差函数

    在原有的误差函数的基础上,增加一个正则项,如下:

    ( J = J + frac{lambda}{2m}sum_{j=1}^{n} heta_j^2 )

    该正则项,是所有 ( heta) 参数的平方和。(lambda) 是正则化参数,可以使用不同的 ( heta) 值训练模型,对比最后的误差来确定该值。

    加上正则项后,求误差函数最小值时,要能得到最优解,不仅要使样本的误差要最小,同时,( heta) 值也要最小才行。

    这样就达到了上一节的要求了。

    而相对应的梯度,通过求导可得到:

    ( grad_0 = grad_0, (j = 0) )
    ( grad_j = grad_j+frac{lambda}{m} heta_j, (j > 0) )

    注意:

    正则项有一点需要注意,该项中并没有将 ( heta_0) 计入。

    因为 ( heta_0) 这一项的特征为恒为1((x_0 = 1)),即为0次方。它只会影响曲线的位置高低,对于模型的曲折程度没有影响,故而不需要做正则化处理。

    是否只能过通正则化解决过拟合现象?

    答案:非也。

    首先需要说明的一点,过拟合的出现的根本原因,是模型中较多的变量,却没有足够多的训练样本,来约束这些变量。

    也就是,当训练样本逐渐增多的时候,那么曲线2也会慢慢的往曲线3变化,但要拟合到接近曲线2的状态,需要的样本量将是非常的庞大,而最终训练时的运算量也会很庞大,不是很必要。

    正则化的误差函数、及其偏导数实现

    只列关键部分代码

    1 线性回归

    h = X*theta;
    theta_tmp = theta(2:length(theta),1); 
    J = 1/(2*m)*(h-y)'*(h-y) + lambda/(2*m) * sum(theta_tmp.^2);
    grad = 1/m * x' * (h- y) + (lambda/m)*[0;theta_tmp];
    

    2 逻辑回归

    h = sigmoid(X*theta);
    theta_tmp = theta(2:length(theta),1); 
    J = 1/m * sum(-y.*log(h) - (1-y).*log(1-h)) + lambda/(2*m) * sum(theta_tmp.^2);
    grad = 1/m .* X' * (h-y) + (lambda/m)*[0;theta_tmp];
    
  • 相关阅读:
    hugeng007_SupportVectorMachine_demo
    hugeng007_RandomForestClassifier_demo
    hugeng007_pca_vs_Ida_demo
    hugeng007_Muti-Layer Perceptron_demo
    hugeng007_LogisticRegression_demo
    hugeng007_adaboost_demo
    渗透测试第三章web安全基础--web系统框架
    渗透测试第二章---网络协议安全
    渗透测试第一章 信息收集--- 扫描技术与抓包分析
    爬虫公开课学习的一天
  • 原文地址:https://www.cnblogs.com/Fordestiny/p/8654965.html
Copyright © 2011-2022 走看看