一、简单的多元线性回归:

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实现多元线性回归预测的更多相关文章

  1. Python 实现多元线性回归预测

    一.二元输入特征线性回归 测试数据为:ex1data2.txt ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ,, ...

  2. R语言 多元线性回归分析

    #线性模型中有关函数#基本函数 a<-lm(模型公式,数据源) #anova(a)计算方差分析表#coef(a)提取模型系数#devinace(a)计算残差平方和#formula(a)提取模型公 ...

  3. R与数据分析旧笔记(六)多元线性分析 下

    逐步回归 向前引入法:从一元回归开始,逐步加快变量,使指标值达到最优为止 向后剔除法:从全变量回归方程开始,逐步删去某个变量,使指标值达到最优为止 逐步筛选法:综合上述两种方法 多元线性回归的核心问题 ...

  4. Tensorflow 线性回归预测房价实例

    在本节中将通过一个预测房屋价格的实例来讲解利用线性回归预测房屋价格,以及在tensorflow中如何实现 Tensorflow 线性回归预测房价实例 1.1. 准备工作 1.2. 归一化数据 1.3. ...

  5. 机器学习01:使用scikit-learn的线性回归预测Google股票

    这是机器学习系列的第一篇文章. 本文将使用Python及scikit-learn的线性回归预测Google的股票走势.请千万别期望这个示例能够让你成为股票高手.下面按逐步介绍如何进行实践. 准备数据 ...

  6. C# chart.DataManipulator.FinancialFormula()公式的使用 线性回归预测方法

    最近翻阅资料,找到 chart.DataManipulator.FinancialFormula()公式的使用,打开另一扇未曾了解的窗,供大家分享一下. 一 DataManipulator类 运行时, ...

  7. fslove - Matlab求解多元多次方程组

    fslove - Matlab求解多元多次方程组 简介: 之前看到网上的一些资料良莠不齐,各种转载之类的,根本无法解决实际问题,所以我打算把自己的学到的总结一下,以实例出发讲解fsolve. 示例如下 ...

  8. MATLAB——神经网络构造线性层函数linearlayer

    % example5_7.m x=-:; y=*x-; randn(); % 设置种子,便于重复执行 y=y+randn(,length(y))*1.5; % 加入噪声的直线 plot(x,y,'o' ...

  9. matlab 实现感知机线性二分类算法(Perceptron)

    感知机是简单的线性分类模型 ,是二分类模型.其间用到随机梯度下降方法进行权值更新.参考他人代码,用matlab实现总结下. 权值求解过程通过Perceptron.m函数完成 function W = ...

随机推荐

  1. 视图不能由多个 ListView 共享 (View can't be shared by more than one ListView) 的一个解决方法

    1.问题的起因 在WPF中遇到一异常,如题. 因此做一个Demo代码来复现问题,代码如下: <Window x:Class="WpfAppThread.MainWindow" ...

  2. Docker容器进入的4种方式(转)

    在使用Docker创建了容器之后,大家比较关心的就是如何进入该容器了,其实进入Docker容器有好几多种方式,这里我们就讲一下常用的几种进入Docker容器的方法. 进入Docker容器比较常见的几种 ...

  3. mysql打开binlog

    修改mysql的配置文件,ubuntu下mysql的配置文件存放位置为:/etc/mysql/my.cnf 找到log_bin配置项,指定一个路径: 重启数据库:/etc/init.d/mysql r ...

  4. [LeetCode] Contains Duplicate & Contains Duplicate II

    Contains Duplicate Given an array of integers, find if the array contains any duplicates. Your funct ...

  5. tomcat 8080 冲突 急速解决方法 -------屡试不爽

    cmd    输入: netstat -ano|findstr 8080 记住 最后的端口号**** 再输入: taskkill  /pid  ****  /f

  6. PureFtpd 连接数据库错误

    用Ubuntu一段时间了,作为服务器真是好用,还轻快的很. 作为服务器怎么能没有ftp呢,这里用了pureftpd,没有用vsftpd是因为听大牛说听麻烦,没用过没发言权,不过pureftpd真的挺好 ...

  7. git android.google 源码:Unknown SSL protocol error in connection to code.google.com:443

    想要提取android的源码.就必须要使用git.下面是本人安装的过程发生的问题: 1.1安装git.win的命令行的客户端(相当与svn的乌龟那样使用).http://git-scm.com/dow ...

  8. TaskAsyncHelper

    public static class TaskAsyncHelper { /// <summary> /// 将一个方法function异步运行,在执行完毕时执行回调callback / ...

  9. 【Unity】4.7 摄像机

    分类:Unity.C#.VS2015 创建日期:2016-04-11 一.简介 摄像机(Camera)是为玩家捕捉并展示世界的一种设备.场景中至少需要有一台摄像机,也可以在一个场景中使用多台摄像机.这 ...

  10. 实现一个 Virtual DOM 算法

    1 前言 本文会在教你怎么用 300~400 行代码实现一个基本的 Virtual DOM 算法,并且尝试尽量把 Virtual DOM 的算法思路阐述清楚.希望在阅读本文后,能让你深入理解 Virt ...