机器学习|吴恩达 Octave上多元(以二元为例)线性回归算法实现

  • 基本思路
  • Octave类编程语言的实现
  • 实现线性回归使用的基本命令
程序的目标: 对一个含有多个影响因素的输出值, 分别算出每个影响因素的影响程度(即权重),举个栗子,一栋房子的售价,取决于有几层楼高,房子有多大,周边是否有地铁,是否是学区房等因素
此处使用 y=c0+c1x1+c2x2+...多项式的形式,c0,c1,c2分别为每一项的权重,权重越大,影响越高
1. 基本思路
  • 输入原始数据值
    x数组和y
机器学习|吴恩达 Octave上多元(以二元为例)线性回归算法实现
文章图片

对数据进行特征标准化处理,避免因为数据差异过大导致权重失衡(这里用standard deviation normalization)
人工智能/特征标准化
  • 按照多元线性回归算法,配置好学习率alpha,0.01~0.03,训练循环次数num_iters 6000~10000
    机器学习|吴恩达 Octave上多元(以二元为例)线性回归算法实现
    文章图片
  • 查询每次训练后代价函数J的变化,应该是逐渐变小,调大alpha可以加快下降速度,若变大,应该适当调小alpha, 调节幅度可以参考为3倍左右
  • 对每个参数的系数进行观察,判断哪个相对重要
2.实现过程
  • 导入数据
data=https://www.it610.com/article/load('ex1data2.txt'); %导入 x=data(:,1:2); %前两列数为x数组 y=data(:,3); %第三列为y m=length(y);

  • 特征标准化处理
function [x_norm, mu, sigma] = featureNormalize(x) x_norm= x; mu =zeros(1,size(x,2)); sigma =zeros(1,size(x,2)); mu= mean(x); sigma=std(x); x_norm = (x- repmat(mu,size(x,1),1)/repmat(sigma,size(x,1),1); end

  • 输入多元线性回归计算公式
    机器学习|吴恩达 Octave上多元(以二元为例)线性回归算法实现
    文章图片
function [theta, J_history] = gradientDescentMulti(x, y, theta, alpha, num_iters)theta=zeros(3,1); m =length(y); for iter=1:num_iters theta=theta - alpha/m *x '*(x*theta-y); %核心,迭代计算theta三个参数 J_history(iter)=computeCostMulti(x,y,theta); end end

alpha =0.01; num_iters =8500; theta=zeros(3,1); x= (ones(length(x),1),x)%x输入数列左边加一列1,作为x0,一定要加偏置 [theta_0, J_history] = gradientDescentMulti(x, y, theta, alpha, num_iters);

3. 基本命令
  • size函数
>>size([1,2; 3,4; 5,6]); => [3,2]% 返回行数和列数

>>size([1,2; 3,4; 5,6],2); >2 %返回第二个维度——列数

  • mean函数
mean(X); %返回X的算术平均值,(默认) % 若X为矩阵,返回每一列的算术平均值,返回一行数

  • repmat函数
repmat(x,n) %x的行和列分别扩充n倍 ,x为数列同理平铺 repmat(1,3) % 1 1 1; 1 1 1; 1 1 1 repmat(x,m,n) %分别把x的行和列扩充m倍和n倍 repmmat([2,3],1,2) % [2,3; 2,3]

  • std函数
std(x) %返回x的标准差

【机器学习|吴恩达 Octave上多元(以二元为例)线性回归算法实现】新手上道,挂一漏万,请各位大佬不吝赐教
如果觉得有帮助,还希望点个赞哦,
大家的鼓励是我前进的动力,加油!

    推荐阅读