zoukankan      html  css  js  c++  java
  • 【Machine Learning】单参数线性回归 Linear Regression with one variable

        最近开始看斯坦福的公开课《Machine Learning》,对其中单参数的Linear Regression(未涉及Gradient Descent)做个总结吧。
    【设想】
        最近想要租房,收集了一些信息,得知房价与房间大小有关,那成本函数就可以预测在不同房间大小下租房的价格(PS:价格可能也与该房地理有关,那若把大小和距离市中心距离一并考虑,则属于多参数的线性回归)
    【数据】
        1、准备一个ex1data1.txt,第一列为年龄,第二列为价格
        2、导入matlab
              data = load('ex1data1.txt');
        3、赋值给不同的变量
              X = data(:,1);            %第一列年龄作为X
              y = data(:,2);             %第二列价格作为y
        4、查看导入的数据
              plot(X, y,'rx','MarkerSize',10);
             
             我们需要找到一条y=a+bx的直线(a=theta0,b=theta1),最大程度的拟合上图中的点,那如何取得a与b的值,则运用了成本函数,如下:
    【公式】
             
                    
    【MatLab】
    data = load('ex1data1.txt');
    y = data(:,2);      %选取价格作为y变量
    m = length(y);
    X = [ones(m, 1), data(:,1)];   %选取房间大小作为第二列,第一列为1
    theta0_vals = linspace(-3,3,100);    %确定theta0轴的范围为[-3,3],100个刻度
    theta1_vals = linspace(-1,1,100);
    for i=1:length(theta0_vals)          %循环执行computeCost函数,找到min(J_vals)的theta0和theta1值  
        for j=1:length(theta1_vals)
             t = [theta0_vals(i); theta1_vals(j)];
             J_vals(i,j) = computeCost(X, y, t);
        end
    end
    % Because of the way meshgrids work in the surf command, we need to 
    % transpose J_vals before calling surf, or else the axes will be flipped
    J_vals = J_vals';
    % Surface plot
    figure;
    surf(theta0_vals, theta1_vals, J_vals)
    xlabel(' heta_0'); ylabel(' heta_1');

    % eg:X(i,:)= [1,6] 
    % eg:t=     

    function J = computeCost(X, y, theta)
    m = length(y); % 训练集个数  
    J = 0;
    h=0;
    for i= 1:m
        h = h + (theta' * X(i,:)'-y(i))^2;  %实现J(theta)公式的后半部
    end
    J = 1/(2*m)*h
    end

    eg: ,这就是为什么X变量要特地赋成两列,为了实现a+bx的矩阵效果
     
    【可视化结果】
     
             

    参考:
    斯坦福机器学习的课后习题及程序: 下载
  • 相关阅读:
    硬盘安装windows2008的方法
    win7,win2008R2的vs2008 破解方法
    学习正则表达式
    C#里内置的DateTime基本功能
    jQuery Ajax 实例 全解析
    TreeView 部署后不能显示图标、js出错原因
    js 操作Listbox js 获取Listbox选择的值的代码
    ajax调用后台Datatable
    转:jquery刷新页面 页面跳转 js常用函数
    GridView多行表头的实现
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3199007.html
Copyright © 2011-2022 走看看