MATLAB的一元与多元线性回归函数的使用(数模版)


matlab中包含多种回归、拟合函数,其中回归分为一元与多元线性回归,函数有polyfit与regress。

1.一元线性回归之旧轿车价格案例

一元回归就是只有一个未知量,一个因变量,形如y=a*x+b的一次函数,已知数据x与y,去求解一次直线的系数a与b,令数据与一次直线的误差最小。
根据已有的散点数据,画图展示数据的分布,看看是否能发现一些规律,其中用到plot函数(也可使用scatter函数),进行绘图

clear all
clc
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
for i=1:10
    plot(x(i),y(i),'or');
    hold on
end
xlabel('x');
ylabel('y');


数据的绘图为
散点数据图由图可分析,数据并不是简单的一次线性关系,看起来像指数分布,因此我们取ln(y)与x的关系进行绘图再看看

clear all
clc
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
z=zeros(size(y));
N=length(y);
hold on
for i =1:N
    z(i)=log(y(i));
    plot(x(i),z(i),'ok');
end
xlabel('x');
ylabel('y');


返回的图片为
在这里插入图片描述大致符合一次直线了,因此我们取新的变量z=ln(y),求解z=a*x+b的系数

clear all
clc
x=1:10;
y=[2650,1942,1493,1086,766,539,485,291,224,202];
z=zeros(size(y));
N=length(y);
for i =1:N
    z(i)=log(y(i));
end
[p,s]=polyfit(x,z,1)

返回结果为
在这里插入图片描述

2.多元线性回归之洞庭湖污染物

如果是形如y=a1x1+a2x2+…+an*xn+b的多元函数,就不能再使用polyfit一次拟合了,就要用到regress进行多元拟合
调用格式为

[b,bint,r,rint,stats]=regress(y,x,alpha)

![在这里插入图片描述](https://img-blog.csdnimg.cn/52350a4bc2c3497c8e0d5daee0881789.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5Yeh5bCU6LWb5pmu5pmu6YCa6YCa5bGF5rCR,size_17,color_FFFFFF,t_70,g_se,x_16
多元函数的使用方法如下

%开始多元回归
clear all
clc
x1=[1.376,1.375,1.387,1.401,1.412,1.428,1.445,1.477];
x2=[0.450,0.475,0.485,0.5,0.535,0.545,0.55,0.575];
x3=[2.170,2.554,2.676,2.713,2.823,3.088,3.122,3.262];
x4=[5.19,1.161,0.5346,0.9589,2.0239,1.0499,1.1065,1.1387];
y=[5.19,5.3,5.6,5.82,6,6.06,6.45,6.95];
save data x1 x2 x3 x4 y%保存数据
load data %取出数据
y=[y'];
x=[ones(size(x1')),x1',x2',x3',x4'];
[b,bint,r,rint,stats]=regress(y,x)

返回结果为:
在这里插入图片描述

  • 4
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是基于Matlab的Fisher线性判别函数的模板: ```matlab function [W, b] = fisher_ld(X, Y) % Input: % X: n-by-d data matrix, each row is a data point and each column is a feature % Y: n-by-1 label vector % Output: % W: d-by-1 weight vector of Fisher linear discriminant % b: scalar bias % Compute the mean of each class class_labels = unique(Y); num_classes = length(class_labels); means = zeros(num_classes, size(X, 2)); for i = 1:num_classes means(i, :) = mean(X(Y==class_labels(i), :), 1); end % Compute the within-class scatter matrix Sw = zeros(size(X, 2)); for i = 1:num_classes Xi = X(Y==class_labels(i), :); Si = (Xi - means(i, :))' * (Xi - means(i, :)); Sw = Sw + Si; end % Compute the between-class scatter matrix Sb = zeros(size(X, 2)); for i = 1:num_classes Ni = sum(Y==class_labels(i)); mi = means(i, :); Sb = Sb + Ni * (mi - mean(X, 1))' * (mi - mean(X, 1)); end % Compute the Fisher linear discriminant [W, D] = eig(Sb, Sw); [~, ind] = max(abs(diag(D))); W = real(W(:, ind)); W = W / norm(W, 2); % Compute the bias b = -mean(X * W(Y==class_labels(1), :)' + X * W(Y==class_labels(2), :)', 1) / 2; end ``` 该函数据矩阵和标签向量作为输入,并返回Fisher线性判别函数的权重向量和偏置项。函数首先计算每个类别的均值,然后计算类内散布矩阵和类间散布矩阵。接下来,函数通过求解广义特征值问题来计算Fisher线性判别函数的权重向量。最后,函数计算偏置项,使得Fisher线性判别函数在两个类别的中间点处为零。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐以礼

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值