程序的目标: 对一个含有多个影响因素的输出值, 分别算出每个影响因素的影响程度(即权重),举个栗子,一栋房子的售价,取决于有几层楼高,房子有多大,周边是否有地铁,是否是学区房等因素
此处使用y=c0+c1x1+c2x2+...
多项式的形式,c0,c1,c2分别为每一项的权重,权重越大,影响越高
1. 基本思路
- 输入原始数据值
x数组和y
对数据进行特征标准化处理,避免因为数据差异过大导致权重失衡(这里用standard deviation normalization)
人工智能/特征标准化
- 按照多元线性回归算法,配置好学习率alpha,0.01~0.03,训练循环次数num_iters 6000~10000
- 查询每次训练后代价函数J的变化,应该是逐渐变小,调大alpha可以加快下降速度,若变大,应该适当调小alpha, 调节幅度可以参考为3倍左右
- 对每个参数的系数进行观察,判断哪个相对重要
2.实现过程
- 导入数据
data=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的标准差
新手上道,挂一漏万,请各位大佬不吝赐教
如果觉得有帮助,还希望点个赞哦,
大家的鼓励是我前进的动力,加油!