MATLAB实现多元线性回归预测
一、简单的多元线性回归:
data.txt
,230.1,37.8,69.2,22.1
,44.5,39.3,45.1,10.4
,17.2,45.9,69.3,9.3
,151.5,41.3,58.5,18.5
,180.8,10.8,58.4,12.9
,8.7,48.9,,7.2
,57.5,32.8,23.5,11.8
,120.2,19.6,11.6,13.2
,8.6,2.1,,4.8
,199.8,2.6,21.2,10.6
,66.1,5.8,24.2,8.6
,214.7,,,17.4
,23.8,35.1,65.9,9.2
,97.5,7.6,7.2,9.7
,204.1,32.9,,
,195.4,47.7,52.9,22.4
,67.8,36.6,,12.5
,281.4,39.6,55.8,24.4
,69.2,20.5,18.3,11.3
,147.3,23.9,19.1,14.6
,218.4,27.7,53.4,
,237.4,5.1,23.5,12.5
,13.2,15.9,49.6,5.6
,228.3,16.9,26.2,15.5
,62.3,12.6,18.3,9.7
,262.9,3.5,19.5,
,142.9,29.3,12.6,
,240.1,16.7,22.9,15.9
,248.8,27.1,22.9,18.9
,70.6,,40.8,10.5
,292.9,28.3,43.2,21.4
,112.9,17.4,38.6,11.9
,97.2,1.5,,9.6
,265.6,,0.3,17.4
,95.7,1.4,7.4,9.5
,290.7,4.1,8.5,12.8
,266.9,43.8,,25.4
,74.7,49.4,45.7,14.7
,43.1,26.7,35.1,10.1
,,37.7,,21.5
,202.5,22.3,31.6,16.6
,,33.4,38.7,17.1
,293.6,27.7,1.8,20.7
,206.9,8.4,26.4,12.9
,25.1,25.7,43.3,8.5
,175.1,22.5,31.5,14.9
,89.7,9.9,35.7,10.6
,239.9,41.5,18.5,23.2
,227.2,15.8,49.9,14.8
,66.9,11.7,36.8,9.7
,199.8,3.1,34.6,11.4
,100.4,9.6,3.6,10.7
,216.4,41.7,39.6,22.6
,182.6,46.2,58.7,21.2
,262.7,28.8,15.9,20.2
,198.9,49.4,,23.7
,7.3,28.1,41.4,5.5
,136.2,19.2,16.6,13.2
,210.8,49.6,37.7,23.8
,210.7,29.5,9.3,18.4
,53.5,,21.4,8.1
,261.3,42.7,54.7,24.2
,239.3,15.5,27.3,15.7
,102.7,29.6,8.4,
,131.1,42.8,28.9,
,,9.3,0.9,9.3
,31.5,24.6,2.2,9.5
,139.3,14.5,10.2,13.4
,237.4,27.5,,18.9
,216.8,43.9,27.2,22.3
,199.1,30.6,38.7,18.3
,109.8,14.3,31.7,12.4
,26.8,,19.3,8.8
,129.4,5.7,31.3,
,213.4,24.6,13.1,
,16.9,43.7,89.4,8.7
,27.5,1.6,20.7,6.9
,120.5,28.5,14.2,14.2
,5.4,29.9,9.4,5.3
,,7.7,23.1,
,76.4,26.7,22.3,11.8
,239.8,4.1,36.9,12.3
,75.3,20.3,32.5,11.3
,68.4,44.5,35.6,13.6
,213.5,,33.8,21.7
,193.2,18.4,65.7,15.2
,76.3,27.5,,
,110.7,40.6,63.2,
,88.3,25.5,73.4,12.9
,109.8,47.8,51.4,16.7
,134.3,4.9,9.3,11.2
,28.6,1.5,,7.3
,217.7,33.5,,19.4
,250.9,36.5,72.3,22.2
,107.4,,10.9,11.5
,163.3,31.6,52.9,16.9
,197.6,3.5,5.9,11.7
,184.9,,,15.5
,289.7,42.3,51.2,25.4
,135.2,41.7,45.9,17.2
,222.4,4.3,49.8,11.7
,296.4,36.3,100.9,23.8
,280.2,10.1,21.4,14.8
,187.9,17.2,17.9,14.7
,238.2,34.3,5.3,20.7
,137.9,46.4,,19.2
,,,29.7,7.2
,90.4,0.3,23.2,8.7
,13.1,0.4,25.6,5.3
,255.4,26.9,5.5,19.8
,225.8,8.2,56.5,13.4
,241.7,,23.2,21.8
,175.7,15.4,2.4,14.1
,209.6,20.6,10.7,15.9
,78.2,46.8,34.5,14.6
,75.1,,52.7,12.6
,139.2,14.3,25.6,12.2
,76.4,0.8,14.8,9.4
,125.7,36.9,79.2,15.9
,19.4,,22.3,6.6
,141.3,26.8,46.2,15.5
,18.8,21.7,50.4,
,,2.4,15.6,11.6
,123.1,34.6,12.4,15.2
,229.5,32.3,74.2,19.7
,87.2,11.8,25.9,10.6
,7.8,38.9,50.6,6.6
,80.2,,9.2,8.8
,220.3,,3.2,24.7
,59.6,,43.1,9.7
,0.7,39.6,8.7,1.6
,265.2,2.9,,12.7
,8.4,27.2,2.1,5.7
,219.8,33.5,45.1,19.6
,36.9,38.6,65.6,10.8
,48.3,,8.5,11.6
,25.6,,9.3,9.5
,273.7,28.9,59.7,20.8
,,25.9,20.5,9.6
,184.9,43.9,1.7,20.7
,73.4,,12.9,10.9
,193.7,35.4,75.6,19.2
,220.5,33.2,37.9,20.1
,104.6,5.7,34.4,10.4
,96.2,14.8,38.9,11.4
,140.3,1.9,,10.3
,240.1,7.3,8.7,13.2
,243.2,,44.3,25.4
,,40.3,11.9,10.9
,44.7,25.8,20.6,10.1
,280.7,13.9,,16.1
,,8.4,48.7,11.6
,197.6,23.3,14.2,16.6
,171.3,39.7,37.7,
,187.8,21.1,9.5,15.6
,4.1,11.6,5.7,3.2
,93.9,43.5,50.5,15.3
,149.8,1.3,24.3,10.1
,11.7,36.9,45.2,7.3
,131.7,18.4,34.6,12.9
,172.5,18.1,30.7,14.4
,85.7,35.8,49.3,13.3
,188.4,18.1,25.6,14.9
,163.5,36.8,7.4,
,117.2,14.7,5.4,11.9
,234.5,3.4,84.8,11.9
,17.9,37.6,21.6,
,206.8,5.2,19.4,12.2
,215.4,23.6,57.6,17.1
,284.3,10.6,6.4,
,,11.6,18.4,8.4
,164.5,20.9,47.4,14.5
,19.6,20.1,,7.6
,168.4,7.1,12.8,11.7
,222.4,3.4,13.1,11.5
,276.9,48.9,41.8,
,248.4,30.2,20.3,20.2
,170.2,7.8,35.2,11.7
,276.7,2.3,23.7,11.8
,165.6,,17.6,12.6
,156.6,2.6,8.3,10.5
,218.5,5.4,27.4,12.2
,56.2,5.7,29.7,8.7
,287.6,,71.8,26.2
,253.8,21.3,,17.6
,,45.1,19.6,22.6
,139.5,2.1,26.6,10.3
,191.1,28.7,18.2,17.3
,,13.9,3.7,15.9
,18.7,12.1,23.4,6.7
,39.5,41.1,5.8,10.8
,75.5,10.8,,9.9
,17.2,4.1,31.6,5.9
,166.8,,3.6,19.6
,149.7,35.6,,17.3
,38.2,3.7,13.8,7.6
,94.2,4.9,8.1,9.7
,,9.3,6.4,12.8
,283.6,,66.2,25.5
,232.1,8.6,8.7,13.4
回归代码:
% A=importdata('data.txt',' ',);%????????A.data a = load('data.txt');
x1=a(:,[]) ;
x2=a(:,[]) ;
x3=a(:,[]) ;
y=a(:,[]); X=[ones(length(y),), x1,x2,x3]; [b,bint,r,rint,stats]=regress(y,X);
b;bint;stats;
rcoplot(r,rint) tx=[230.1,37.8,69.2];
b2=[b(),b(),b()];
ty=b()+b2*tx';
ty;
简单的得到一个变换的公式
y=b(1)+b(2)*x1+b(3)*x2+b(3)*x3;
二、ridge regression岭回归
其实就是在回归前对数据进行预处理,去掉一些偏差数据的影响。
1、一般线性回归遇到的问题
在处理复杂的数据的回归问题时,普通的线性回归会遇到一些问题,主要表现在:
- 预测精度:这里要处理好这样一对为题,即样本的数量
和特征的数量
时,最小二乘回归会有较小的方差
时,容易产生过拟合
时,最小二乘回归得不到有意义的结果
- 模型的解释能力:如果模型中的特征之间有相互关系,这样会增加模型的复杂程度,并且对整个模型的解释能力并没有提高,这时,我们就要进行特征选择。
以上的这些问题,主要就是表现在模型的方差和偏差问题上,这样的关系可以通过下图说明:
(摘自:机器学习实战)
方差指的是模型之间的差异,而偏差指的是模型预测值和数据之间的差异。我们需要找到方差和偏差的折中。
2、岭回归的概念
在进行特征选择时,一般有三种方式:
- 子集选择
- 收缩方式(Shrinkage method),又称为正则化(Regularization)。主要包括岭回归个lasso回归。
- 维数缩减
岭回归(Ridge Regression)是在平方误差的基础上增加正则项
,
通过确定的值可以使得在方差和偏差之间达到平衡:随着
的增大,模型方差减小而偏差增大。
对求导,结果为
令其为0,可求得的值:
3、实验的过程
我们去探讨一下取不同的对整个模型的影响。
MATLAB代码
function [ w ] = ridgeRegression( x, y, lam )
xTx = x'*x;
[m,n] = size(xTx);
temp = xTx + eye(m,n)*lam;
if det(temp) ==
disp('This matrix is singular, cannot do inverse');
end
w = temp^(-)*x'*y;
end
%% ???(Ridge Regression)
clc;
%????
data = load('data.txt');
[m,n] = size(data); dataX = data(:,:);%??
dataY = data(:,);%?? %???
yMeans = mean(dataY);
for i = :m
yMat(i,:) = dataY(i,:)-yMeans;
end xMeans = mean(dataX);
xVars = var(dataX);
for i = :m
xMat(i,:) = (dataX(i,:) - xMeans)./xVars;
end % ???
testNum = ;
weights = zeros(testNum, n-);
for i = :testNum
w = ridgeRegression(xMat, yMat, exp(i-));
weights(i,:) = w';
end % ??????lam
hold on
axis([- -1.0 2.5]);
xlabel log(lam);
ylabel weights;
for i = :n-
x = -:;
y(,:) = weights(:,i)';
plot(x,y);
end
plot出来的图像显示,k=5的时候,出现了拟合,因此取k=5时的w值,
% resualt output ,i=5
w = ridgeRegression(xMat, yMat, exp(5-10));
三、另外一个岭回归比较好的例子
function [b,bint,r,rint,stats] = ridge1(Y,X,k)
[n,p] = size(X);
mx = mean (X);
my = mean (Y);
stdx = std(X);
stdy=std(Y);
idx = find(abs(stdx) < sqrt(eps));
MX = mx(ones(n,),:);
STDX = stdx(ones(n,),:);
Z = (X - MX) ./ STDX;Y=(Y-my)./stdy;
pseudo = sqrt(k*(n-)) * eye(p);
Zplus = [Z;pseudo];
Yplus = [Y;zeros(p,)];
[b,bint,r,rint,stats] = regress(Yplus,Zplus);
end
x=[71.35 22.90 3.76 1158.18 12.20 55.87;
67.92 17.11 1494.38 19.82 56.60;
79.38 24.91 33.60 691.56 16.17 92.78;
87.97 10.18 0.73 923.04 12.15 24.66;
59.03 7.71 3.58 696.92 13.50 61.81;
55.23 22.94 1.34 1083.84 10.76 49.79;
58.30 12.78 5.25 1180.36 9.58 57.02;
67.43 9.59 2.92 797.72 16.82 38.29;
76.63 15.12 2.55 919.49 17.79 32.07];
y=[28.46;27.76;26.02;33.29;40.84;44.50;28.09;46.24; 45.21];
x'*x;
count=;
kvec=0.1:0.1:;
for k=0.1:0.1:
count=count+;
[b,bint,r,rint,stats]=ridge1(y,x,k);
bb(:,count)=b;
stats1(count,:)=stats;
end
bb',stats1
plot(kvec',bb),xlabel('k'),ylabel('b','FontName','Symbo l')
从运行结果及图1可见,k≥0.7时每个变量相应
的岭回归系数变化较为稳定,因而可选k=0.7,建立 岭回归方程
y=-0.219 5x1-0.120 2x2-0.237 8x3- 0.244 6x4+0.203 6x5-0.249 4x6
MATLAB实现多元线性回归预测的更多相关文章
- Python 实现多元线性回归预测
一.二元输入特征线性回归 测试数据为:ex1data2.txt ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ...
- R语言 多元线性回归分析
#线性模型中有关函数#基本函数 a<-lm(模型公式,数据源) #anova(a)计算方差分析表#coef(a)提取模型系数#devinace(a)计算残差平方和#formula(a)提取模型公 ...
- R与数据分析旧笔记(六)多元线性分析 下
逐步回归 向前引入法:从一元回归开始,逐步加快变量,使指标值达到最优为止 向后剔除法:从全变量回归方程开始,逐步删去某个变量,使指标值达到最优为止 逐步筛选法:综合上述两种方法 多元线性回归的核心问题 ...
- Tensorflow 线性回归预测房价实例
在本节中将通过一个预测房屋价格的实例来讲解利用线性回归预测房屋价格,以及在tensorflow中如何实现 Tensorflow 线性回归预测房价实例 1.1. 准备工作 1.2. 归一化数据 1.3. ...
- 机器学习01:使用scikit-learn的线性回归预测Google股票
这是机器学习系列的第一篇文章. 本文将使用Python及scikit-learn的线性回归预测Google的股票走势.请千万别期望这个示例能够让你成为股票高手.下面按逐步介绍如何进行实践. 准备数据 ...
- C# chart.DataManipulator.FinancialFormula()公式的使用 线性回归预测方法
最近翻阅资料,找到 chart.DataManipulator.FinancialFormula()公式的使用,打开另一扇未曾了解的窗,供大家分享一下. 一 DataManipulator类 运行时, ...
- fslove - Matlab求解多元多次方程组
fslove - Matlab求解多元多次方程组 简介: 之前看到网上的一些资料良莠不齐,各种转载之类的,根本无法解决实际问题,所以我打算把自己的学到的总结一下,以实例出发讲解fsolve. 示例如下 ...
- MATLAB——神经网络构造线性层函数linearlayer
% example5_7.m x=-:; y=*x-; randn(); % 设置种子,便于重复执行 y=y+randn(,length(y))*1.5; % 加入噪声的直线 plot(x,y,'o' ...
- matlab 实现感知机线性二分类算法(Perceptron)
感知机是简单的线性分类模型 ,是二分类模型.其间用到随机梯度下降方法进行权值更新.参考他人代码,用matlab实现总结下. 权值求解过程通过Perceptron.m函数完成 function W = ...
随机推荐
- Python 文件 next() 方法
描述 Python 3 中的 文件 对象不支持 next() 方法. Python 3 的内置函数 next() 通过迭代器调用 __next__() 方法返回下一项. 在循环中,next()方法会在 ...
- Cross compiling coreutils and generate the manpages
When we cross compiling coreutils, there is an problem of generating man pages, because the source s ...
- 【转载并整理】javaweb单点登录
很好的一篇,讲述原理的文章: http://www.importnew.com/22863.html https://www.cnblogs.com/Leo_wl/p/6111623.html 京东s ...
- 使用 vue-cli 实现组件之间数据交换
1 使用脚手架工具用 webpack 模板初始化项目,用 webstorm 打开项目.src 目录下是要编写的源文件. main.js 文件 是主入口文件, 在es6语法中,:function(){} ...
- tensorflow中使用Batch Normalization
在深度学习中为了提高训练速度,经常会使用一些正正则化方法,如L2.dropout,后来Sergey Ioffe 等人提出Batch Normalization方法,可以防止数据分布的变化,影响神经网络 ...
- 关于 Xcode 调试工具 GDB and LLDB
xcode 5 好像弃用了GDB .而默认使用苹果自己开发的调试工具 LLDB. http://iosre.com/forum.php?mod=viewthread&tid=52 LLD ...
- jQuery学习笔记(Ajax)
jQuery对Ajax操作进行了封装,在jQuery中$.ajax方法属于最底层的方法,第2层是$.load().$.get().$.post()方法,第3层是$.getScript()和$.getJ ...
- Vivado SPI Flash程序下载
由于Vivado下载程序步骤和ISE有较大差异,特此写此文章,希望对大家有所帮助. 1,下载文件生成 在.bit文件生成后,在TCL中输入 write_cfgmem -format mcs -inte ...
- 外部程序启动App
第一种:直接通过包名: Intent LaunchIntent = getPackageManager().getLaunchIntentForPackage("com.joyodream. ...
- [Windows Azure] Guidelines for Connecting to Windows Azure SQL Database
Guidelines for Connecting to Windows Azure SQL Database 6 out of 12 rated this helpful - Rate this t ...