MatLab之回归(脚本)

以数据为基础而建立数学模型的方法称为数据建模方法, 包括回归、统计、机器学习、深度学习、灰色预测、主成分分析、神经网络、时间序列分析等方法, 其中最常用的方法还是回归方法

目录

一元线性回归

LinearModel.fit 函数进行线性回归

 LinearModel.fit 函数的说明:

regress 函数进行回归

一元非线性回归

多元回归

逐步回归

 Logistic 回归


一元线性回归

要确定是线性还是非线性,然后就可以利用对应的回归方法建立它们之间的回归模型

clear;clc;close all;
x=[23.80,27.60,31.60,32.40,33.70,34.90,43.20,52.80,63.80,73.40];
y=[41.4,51.8,61.70,67.90,68.70,77.50,95.90,137.40,155.0,175.0];
%首先用散点图对数据关系进行判断
figure;
plot(x,y,'Or');
title('关系趋势图');
xlabel('职工工资');
ylabel('商品销售额');
hold on;

%最小二乘法
Lxx=sum((x-mean(x)).^2);
Lxy=sum((x-mean(x)).*(y-mean(y)));
a=Lxy/Lxx;
b=mean(y)-mean(x)*a;
y1= a*x+b;
plot(x,y1,'b');
if(b>=0)
 str=sprintf('该数据的回归函数为y=%fx+%f',a,b);
else
 str=sprintf('该数据的回归函数为y=%fx%f',a,b);
end
disp(str);

最后结果如下图所示: 

 

LinearModel.fit 函数进行线性回归

clear;clc;close all;
x=[23.80,27.60,31.60,32.40,33.70,34.90,43.20,52.80,63.80,73.40];
y=[41.4,51.8,61.70,67.90,68.70,77.50,95.90,137.40,155.0,175.0];
m=LinearModel.fit(x,y);
m.plot();
disp(m);
%函数 LinearModel.fit 输出的内容为典型的线性回归的参数

 LinearModel.fit 函数的说明:

m=LinearModel.fit(X,Y)

创建线性回归模型,X、Y是对应数据。注意这里 X 不要加全1的系数。

m.plot

绘制 wlb 回归模型的效果图

regress 函数进行回归

Y=y';
X=[ones(size(x,2),1),x'];
[b,bint,r,rint,s]=regress(Y,X);
disp(b)

具体信息可以参考文档。

b是估计参数,bint是估计参数的置信区间,r是残差项,rint是残差的置信区间,s包含4个统计量:决定系数 R^2(相关系数为R),F 值,F(1,n-2) 分布大于 F 值的概率 p,剩余方差 s^2 的值。

 在以上回归程序中,使用了两个回归函数 LinearModel.fit 和 regress。在实际使用中,只要根据自己的需要选用一种就可以了。

一元非线性回归

为了得到 x 与 y 之间的关系,先绘制出它们之间的散点图

clear;clc;close all;
x=[1.5, 4.5, 7.5,10.5,13.5,16.5,19.5,22.5,25.5];
y=[7.0,4.8,3.6,3.1,2.7,2.5,2.4,2.3,2.2];
plot(x,y,'*r');
xlabel('X轴');
ylabel('Y轴');

 

 由该图可以判断它们之间的关系近似为对数关系或指数关系,为此可以利用这两种函数形式进行非线性拟合。

%对数形式非线性回归
m1=@(b,x)b(1)+b(2)*log(x);
nonlinfit1=fitnlm(x,y,m1,[0.01,0.01])
b=nonlinfit1.Coefficients.Estimate;
Y1=b(1,1)+b(2,1)*log(x);
hold on;
plot(x,Y1,'--k');

%指数形式非线性回归
m2 = 'y ~ b1*x^b2';
nonlinfit2 = fitnlm(x,y,m2,[0.01;0.01])
b1=nonlinfit2.Coefficients.Estimate(1,1);
b2=nonlinfit2.Coefficients.Estimate(2,1);
Y2=b1*x.^b2;
hold on
plot(x,Y2,'r');

 (细节还不太懂。。。)

多元回归

能否应用多元线性回归,最好先通过数据可视化判断他们之间的变化趋势,如果近似满足线性关系,则可以执行利用多元线性回归方法对该问题进行回归。具体步骤如下:

(1)作出因变量 Y 与各自变量的样本散点图

作散点图的目的主要是观察因变量 Y 与各自变量间是否有比较好的线性关系

(2)进行多元线性回归

(3)由结果对模型进行判断

        1)相关系数 R 的评价:本例 R 的绝对值为 0.9542 ,表明线性相关性较强。

        2)F 检验法:当 F > F1-α(m,n-m-1) ,即认为因变量 y 与自变量 x1,x2,...,xm 之间有显著的线性相关关系;否则认为因变量 y 与自变量 x1,x2,...,xm 之间线性相关关系不显著。本例 F=67.919 > F1-0.05( 3,20 ) = 3.10。

        3)p 值检验:若 p < α(α 为预定显著水平),则说明因变量 y 与自变量 x1,x2,...,xm之间显著地有线性相关关系。本例输出结果,p<0.0001,显然满足 p<α=0.05。

以上三种统计推断方法推断的结果是一致的,说明因变量 y 与自变量之间显著地有线性相关关系,所得线性回归模型可用。s^2 当然越小越好,这主要在模型改进时作为参考。

逐步回归

例题:

Hald 数据是关于水泥生产的数据。某种水泥在凝固时放出的热量 Y(单位:卡/克)与水泥中 4 种化学成品所占的百分比有关:

图片

在生产中测得 12 组数据,见表5,试建立 Y 关于这些因子的“最优”回归方程。

表5 水泥生产的数据

图片

对于例 4 中的问题,可以使用多元线性回归、多元多项式回归,但也可以考虑使用逐步回归。从逐步回归的原理来看,逐步回归是以上两种回归方法的结合,可以自动使得方程的因子设置最合理。对于该问题,逐步回归的代码如下:

X=[7,26,6,60;1,29,15,52;11,56,8,20;11,31,8,47;7,52,6,33;11,55,9,22;3,71,17,6;1,31,22,44;2,54,18,22;21,47,4,26;1,40,23,34;11,66,9,12];   %自变量数据
Y=[78.5,74.3,104.3,87.6,95.9,109.2,102.7,72.5,93.1,115.9,83.8,113.3];  %因变量数据
Stepwise(X,Y,[1,2,3,4],0.05,0.10)% in=[1,2,3,4]表示X1、X2、X3、X4均保留在模型中

 Logistic 回归

例题:

Logistic在2020年国赛C题的优秀论文中多次出现,也是类似的银行贷款问题。

企业到金融商业机构贷款,金融商业机构需要对企业进行评估。评估结果为 0 , 1 两种形式,0 表示企业两年后破产,将拒绝贷款,而 1 表示企业 2 年后具备还款能力,可以贷款。在表 6 中,已知前 20 家企业的三项评价指标值和评估结果,试建立模型对其他 5 家企业(企业 21-25)进行评估。

表6 企业还款能力评价表

图片

% logistic回归Matlab实现程序

%% 数据准备
clc, clear, close all
X0=xlsread('logistic_ex1.xlsx', 'A2:C21'); % 回归模型的输入
Y0=xlsread('logistic_ex1.xlsx', 'D2:D21'); % 回归模型的输出
X1=xlsread('logistic_ex1.xlsx', 'A2:C26'); % 预测数据输入

%% logistics函数
GM = fitglm(X0,Y0,'Distribution','binomial');
Y1 = predict(GM,X1);

%% 模型的评估
N0 =1:size(Y0,1); 
N1= 1:size(Y1,1);
plot(N0', Y0, '-kd');
hold on; 
scatter(N1', Y1, 'b')
xlabel('数据点编号');
ylabel('输出值');

 参考博客:

https://blog.csdn.net/qq_43575267/article/details/94513202

https://mp.weixin.qq.com/s/OKXa3F3PkmFf1c90-t3AIg

  • 7
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个二分类问题,可以使用逻辑回归、支持向量机、神经网络等模型进行建模和预测。在使用这些模型之前,需要对数据进行预处理和特征工程,包括数据清洗、特征选择、特征缩放等步骤。 具体步骤如下: 1. 导入所需的库和数据集,查看数据集的基本信息。 2. 对数据集进行预处理,包括数据清洗、特征选择和特征缩放等步骤。 3. 将数据集分为训练集和测试集,用训练集训练模型,用测试集评估模型的性能。 4. 使用逻辑回归、支持向量机、神经网络等模型进行建模和预测。 5. 对模型进行评估,包括准确率、精确率、召回率、F1值等指标。 具体实现步骤如下: 1. 导入所需的库和数据集,查看数据集的基本信息。 ```python import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline data = pd.read_csv('data.csv') print(data.head()) print(data.info()) ``` 2. 对数据集进行预处理,包括数据清洗、特征选择和特征缩放等步骤。 ```python # 缺失值处理 data = data.dropna() # 特征选择 X = data.drop(['Bankrupt'], axis=1) y = data['Bankrupt'] # 特征缩放 from sklearn.preprocessing import StandardScaler scaler = StandardScaler() X_scaled = scaler.fit_transform(X) ``` 3. 将数据集分为训练集和测试集,用训练集训练模型,用测试集评估模型的性能。 ```python # 将数据集分为训练集和测试集 from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X_scaled, y, test_size=0.2, random_state=42) # 训练模型 from sklearn.linear_model import LogisticRegression from sklearn.svm import SVC from sklearn.neural_network import MLPClassifier lr = LogisticRegression() lr.fit(X_train, y_train) print('Logistic Regression: ', lr.score(X_test, y_test)) svm = SVC(kernel='linear', C=1) svm.fit(X_train, y_train) print('Support Vector Machine: ', svm.score(X_test, y_test)) nn = MLPClassifier(hidden_layer_sizes=(10,10), max_iter=1000) nn.fit(X_train, y_train) print('Neural Network: ', nn.score(X_test, y_test)) ``` 4. 使用逻辑回归、支持向量机、神经网络等模型进行建模和预测。 ```python # 预测剩余5家企业的评估结果 X_new = [[1.2, 1.3, 0.5], [0.1, 0.2, 0.3], [0.5, 0.8, 0.4], [1.0, 1.0, 0.8], [0.7, 0.5, 0.2]] X_new_scaled = scaler.transform(X_new) print('Logistic Regression: ', lr.predict(X_new_scaled)) print('Support Vector Machine: ', svm.predict(X_new_scaled)) print('Neural Network: ', nn.predict(X_new_scaled)) ``` 5. 对模型进行评估,包括准确率、精确率、召回率、F1值等指标。 ```python # 评估模型 from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score y_pred_lr = lr.predict(X_test) y_pred_svm = svm.predict(X_test) y_pred_nn = nn.predict(X_test) print('Logistic Regression') print('Accuracy:', accuracy_score(y_test, y_pred_lr)) print('Precision:', precision_score(y_test, y_pred_lr)) print('Recall:', recall_score(y_test, y_pred_lr)) print('F1 Score:', f1_score(y_test, y_pred_lr)) print('Support Vector Machine') print('Accuracy:', accuracy_score(y_test, y_pred_svm)) print('Precision:', precision_score(y_test, y_pred_svm)) print('Recall:', recall_score(y_test, y_pred_svm)) print('F1 Score:', f1_score(y_test, y_pred_svm)) print('Neural Network') print('Accuracy:', accuracy_score(y_test, y_pred_nn)) print('Precision:', precision_score(y_test, y_pred_nn)) print('Recall:', recall_score(y_test, y_pred_nn)) print('F1 Score:', f1_score(y_test, y_pred_nn)) ``` 以上就是使用逻辑回归、支持向量机、神经网络等模型对企业评估问题的解决方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值