- 基本思路
- Octave类编程语言的实现
- 实现线性回归使用的基本命令
程序的目标: 对一个含有多个影响因素的输出值, 分别算出每个影响因素的影响程度(即权重),举个栗子,一栋房子的售价,取决于有几层楼高,房子有多大,周边是否有地铁,是否是学区房等因素1. 基本思路
此处使用y=c0+c1x1+c2x2+...
多项式的形式,c0,c1,c2分别为每一项的权重,权重越大,影响越高
- 输入原始数据值
x数组和y
文章图片
对数据进行特征标准化处理,避免因为数据差异过大导致权重失衡(这里用standard deviation normalization)
人工智能/特征标准化
- 按照多元线性回归算法,配置好学习率alpha,0.01~0.03,训练循环次数num_iters 6000~10000
文章图片
- 查询每次训练后代价函数J的变化,应该是逐渐变小,调大alpha可以加快下降速度,若变大,应该适当调小alpha, 调节幅度可以参考为3倍左右
- 对每个参数的系数进行观察,判断哪个相对重要
- 导入数据
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
- 输入多元线性回归计算公式
文章图片
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上多元(以二元为例)线性回归算法实现】新手上道,挂一漏万,请各位大佬不吝赐教
如果觉得有帮助,还希望点个赞哦,
大家的鼓励是我前进的动力,加油!
推荐阅读
- 人脸识别|【人脸识别系列】| 实现自动化妆
- C语言学习|第十一届蓝桥杯省赛 大学B组 C/C++ 第一场
- paddle|动手从头实现LSTM
- pytorch|使用pytorch从头实现多层LSTM
- 人工智能|干货!人体姿态估计与运动预测
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- 历史上的今天|【历史上的今天】2 月 16 日(世界上第一个 BBS 诞生;中国计算机教育开端;IBM 机器人赢得智能竞赛)