zoukankan      html  css  js  c++  java
  • 机器学习基础(一)线性回归 分类: 机器学习 2015-01-17 09:46 82人阅读 评论(0) 收藏

    线性回归模型是最简单的监督式学习模型:

    egin{displaymath}h_{	heta}(x) = 	heta^Tx = sum_{i=0}^n 	heta_i x_i, 
onumberend{displaymath}

    所谓的监督式学习模型就是需要通过已有的数据训练出一个最优的模型,能够表示这些已有的模型并能够预测新的数据。怎么判断模型是不是最优的呢?这就需要引入代价函数(Cost Function):

    egin{displaymath}J(	heta)=frac{1}{2m}sum_{i=1}^{m}left(h_{	heta}(x^{(i)})-y^{(i)}
ight)^{2} 
onumberend{displaymath}

    怎么得到最优的模型呢?这就需要求解代价函数的最小值,也就需要引入梯度下降法。梯度下降法就是通过迭代,每一次都比之前已次更加接近代价函数的最小值,最后在误差允许的范围内终止迭代。

    egin{displaymath}	heta_j := 	heta_j - alpha frac{1}{m} sum_{i=1}^m (h_{......{(i)}) x_j^{(i)} ;;;;;mbox{(for all $j$)} 
onumberparend{displaymath}

    我们求出了参数,带入

    egin{displaymath}h_{	heta}(x) = 	heta^Tx = sum_{i=0}^n 	heta_i x_i, 
onumberend{displaymath}

    便得到了最简单的线性回归模型


    参考练习:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=MachineLearning&doc=exercises/ex2/ex2.html

    function Linear_Regression()

    clear all; close all;clc
    x=load('ex2x.dat')
    y=load('ex2y.dat')
    
    m=length(y);
    
    %plot the training data
    figure;
    plot(x,y,'o');
    ylabel('Height in meters');
    xlabel('Age in years')
    
    %gradient descent
    x=[ones(m,1) x];
    theta = zeros(size(x(1,:)))';
    MAX_ITER = 1500;
    alpha=0.07;
    
    for iter=1:MAX_ITER
        grad = (1/m).*x'*((x*theta)-y);
        theta = theta - alpha .*grad;
    end
    theta
    
    hold on;
    plot(x(:,2),x*theta,'-')
    legend('Training data','Linear regression')
    hold off
    
    predict1=[1,3.5]*theta
    predict2=[1,7]*theta
    
    theta0_vals=linspace(-3,3,100);
    theta1_vals=linspace(-1,1,100);
    
    J_vals =zeros(length(theta0_vals),length(theta1_vals));
    
    for i=1:length(theta0_vals)
        for j=1:length(theta1_vals)
            t=[theta0_vals(i);theta1_vals(j)];
            J_vals(i,j) = (0.5/m).*(x*t-y)'*(x*t-y);
        end
    end
    J_vals=  J_vals';
    figure;
    surf(theta0_vals,theta1_vals,J_vals)
    xlabel('	heta_0'); ylabel('	heta_1');
    
    figure
    contour(theta0_vals,theta1_vals,J_vals,logspace(-2,2,15))
    xlabel('	heta_0'); ylabel('	heta_1');
    end
    


    egin{displaymath}h_{	heta}(x) = 	heta^Tx = sum_{i=0}^n 	heta_i x_i, 
onumberend{displaymath}


    egin{displaymath}J(	heta)=frac{1}{2m}sum_{i=1}^{m}left(h_{	heta}(x^{(i)})-y^{(i)}
ight)^{2} 
onumberend{displaymath}



    Cantor图


    参考资料http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=MachineLearning


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    Metronic最优秀的基于Bootstrap的响应式网站模版
    SMINT:单页网站的免費jQuery插件
    不做全栈开发工程师
    《劲道》课程笔记——教练对话
    windows 7环境下配置oracle 11g 客户端
    jsp+servlet+javabean (MVC)分页
    解析java中 hashcode()
    BeanUtils操作
    Dom4jApp.java 解析和创建XML
    dom4j
  • 原文地址:https://www.cnblogs.com/learnordie/p/4656972.html
Copyright © 2011-2022 走看看