最小二乘参数估计---梯度下降法求解参数的sas代码实现

理论和公式请看网易公开课中Andrew Ng的机器学习,或者coursera中Andrew Ng的机器学习

对于多元线性回归要拟合最好的直线,要使得误差平方和最小,课本上的方法都是求偏导,并使其为0,然后求解线性方程组。

但是还有很多其他方法可以达到上述效果,Andrew在大样本和小样本的情况下给出了两种梯度下降的方法。我这里实现了他的第一种

步长参数选取为0.03,初始值选取为0 0。数据集使用的是sas内置的sashelp.class数据集。

因为变量单位不同,所以都在scaing feature步进行了处理

验证后的结果与sas reg过程得到的结果一致。

options fullstimer;
proc iml;
    reset deflib=sashelp;
    use class;
    read all var {weight height} into me;
    m = nrow(me);

    *scaling feature;
    s1 = max(me[,1])-min(me[,1]);
    s2 = max(me[,2])-min(me[,2]);
    mean_s1 = mean(me[,1]);
    mean_s2 = mean(me[,2]);
    me[,1] = (me[,1]-mean_s1)/s1;
    me[,2] = (me[,2]-mean_s2)/s2;
    *scaling feature;
    *print me;
    theta_0 = 0;
    theta_1 = 0;
    x0 = 1;
    ov = 10;
    alpha = 0.03;
    *print me;
    rec = 0;  
    do while (ov>0.000000001);

    theta_0Old = theta_0;
    theta_1Old = theta_1;
    *compute old residual and collect data to plot r*numOfIteration;
    rec = rec + 1;
    r2 = 0;
    do i=1 to m;
            residual_tt =(theta_0Old*x0 + theta_1Old*me[i,2]) - me[i,1];
            r2 = r2+residual_tt*residual_tt;
    end;
    Jtheta = r2/2/m;
    xy = xy//(rec||Jtheta);
    *compute old residual and collect data to plot r*numOfIteration;

        res = 0; res_1 = 0;
        do i=1 to m;
            residual_0 =(theta_0Old*x0 + theta_1Old*me[i,2]) - me[i,1];
            res = res + (residual_0*x0);
            res_1 = res_1 + (residual_0*me[i,2]);
        end;
        *print residual_0;
        theta_0 = theta_0Old - alpha*res/m;
        theta_1 = theta_1Old - alpha*res_1/m;

    *update residual and decide whether it‘s convergence;
        r2 = 0;
        do i=1 to m;
            residual_tt =(theta_0*x0 + theta_1*me[i,2]) - me[i,1];
            r2 = r2+residual_tt*residual_tt;
        end;
        Jtheta_new = r2/2/m;
        ov = abs(Jtheta_new - Jtheta);
    *update residual and decide whether it‘s convergence;
    end;
    print ov;
    call pgraf(xy,‘*‘,‘x‘,‘y‘,‘mmmmm‘);

    theta_0_last = theta_0*s1+mean_s1-mean_s2*s1*theta_1/s2;
    theta_1_last = theta_1*s1/s2;
    print theta_0_last theta_1_last;
    run;
quit;
时间: 2024-08-28 11:16:45

最小二乘参数估计---梯度下降法求解参数的sas代码实现的相关文章

梯度下降法求解多元线性回归

线性回归形如y=w*x+b的形式,变量为连续型(离散为分类).一般求解这样的式子可采用最小二乘法原理,即方差最小化, loss=min(y_pred-y_true)^2.若为一元回归,就可以求w与b的偏导,并令其为0,可求得w与b值:若为多元线性回归, 将用到梯度下降法求解,这里的梯度值w的偏导数,利用目标公式,loss如下: 对其求偏导,公式如下: 其中x表示为(n+1)行m列,有n个属性,m个样本,最后一行值为1给偏差的:y表示m行1列为m个样本的值: w表示(n+1)行1列为n个w对应属性

最小二乘法和梯度下降法的区别?

原文:http://www.zhihu.com/question/20822481 相同1.本质相同:两种方法都是在给定已知数据(independent & dependent variables)的前提下对dependent variables算出出一个一般性的估值函数.然后对给定新数据的dependent variables进行估算.2.目标相同:都是在已知数据的框架内,使得估算值与实际值的总平方差尽量更小(事实上未必一定要使用平方),估算值与实际值的总平方差的公式为:其中为第i组数据的in

【统计学习】随机梯度下降法求解感知机模型

1. 感知机学习模型 感知机是一个二分类的线性分类问题,求解是使误分类点到超平面距离总和的损失函数最小化问题.采用的是随机梯度下降法,首先任意选取一个超平面w0和b0,然后用梯度下降法不断地极小化目标损失函数,极小化过程中不是一次使所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降.假设误分类点集合M是固定的,那么损失函数L(w,b)的梯度: 随机选取一个误分类点,对w和b进行更新: 其中n是步长,又称为学习率(learning rate),这样通过迭代可以使损失函数L(w,b)不

梯度下降法求解线性回归

梯度下降法 梯度下降法(英语:Gradient descent)是一个一阶最优化算法,通常也称为最速下降法. 要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索.如果相反地向梯度正方向迭代进行搜索,则会接近函数的局部极大值点:这个过程则被称为梯度上升法. 梯度下降的形象解释 现在有一个山谷,你想要到达山谷的最低端,你此时在A点,那么此时就可以利用梯度下降来找到最低点.你每次以你当前的方向为基准.选择一个最陡峭的方向,朝着山下

机器学习之最小二乘法和梯度下降法的区别

摘自知乎: 其实, 在计算量方面, 两者有很大的不同, 因而在面对给定的问题时, 可以有选择性的根据问题的性质选择两种方法中的一个.具体来说, 最小二乘法的矩阵公式是 , 这里的 A 是一个矩阵, b 是一个向量. 如果有离散数据点, , 而想要拟合的方程又大致形如 , 那么, A 就是一个  的矩阵, 第 i 行的数据点分别是 , 而 b 则是一个向量, 其值为 . 而又已知, 计算一个矩阵的逆是相当耗费时间的, 而且求逆也会存在数值不稳定的情况 (比如对希尔伯特矩阵求逆就几乎是不可能的).

使用matlab用优化后的梯度下降法求解达最小值时参数

matlab可以用 -Conjugate gradient -BFGS -L-BFGS 等优化后的梯度方法来求解优化问题.当feature过多时,最小二乘计算复杂度过高(O(n**3)),此时 这一些列优化版梯度下降算法就成为了解优化问题的更优选择. 它们的优点为: 不需要像对原始梯度下降那样手动选择学习速率α 一般比梯度下降收敛速度要快 相应的缺点为:比梯度下降要复杂得多 好在,我们可以直接用matlab内置函数进行计算. 例子如下: 我们需要输入cost function J 及其偏导数:

tensorflow实现svm iris二分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)

iris二分类 # Linear Support Vector Machine: Soft Margin # ---------------------------------- # # This function shows how to use TensorFlow to # create a soft margin SVM # # We will use the iris data, specifically: # x1 = Sepal Length # x2 = Petal Width

tensorflow实现svm多分类 iris 3分类——本质上在使用梯度下降法求解线性回归(loss是定制的而已)

# Multi-class (Nonlinear) SVM Example # # This function wll illustrate how to # implement the gaussian kernel with # multiple classes on the iris dataset. # # Gaussian Kernel: # K(x1, x2) = exp(-gamma * abs(x1 - x2)^2) # # X : (Sepal Length, Petal Wi

高尔夫距离精度数据拟合——梯度下降法详解

Dataset 本文的数据集pga.csv包含了职业高尔夫球手的发球统计信息,包含两个属性:accuracy 和 distance.accuracy 精确度描述了命中球道( fairways hit)的比例,Distances 描述的是发球的平均距离.我们的目的是用距离来预测命中率.在高尔夫中,一个人发球越远,那么精度会越低. 对于很多机器学习算法来说,输入数据会先进行一些预处理,比如规范化,因为当计算两个特征向量的距离时,当一个特征的取值很大,那么这个距离会偏向取值较大的那个特征.因此此处的精