300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > python多元线性回归实例_Python机器学习多元线性回归模型 | kTWO-个人博客

python多元线性回归实例_Python机器学习多元线性回归模型 | kTWO-个人博客

时间:2019-10-04 21:19:51

相关推荐

python多元线性回归实例_Python机器学习多元线性回归模型 | kTWO-个人博客

前言

在上一篇文章《机器学习简单线性回归模型》中我们讲解分析了Python机器学习中单输入的线性回归模型,但是在实际生活中,我们遇到的问题都是多个条件决定的问题,在机器学习中我们称之为多元或多输入的问题,在性回归分析中,通常也都是多输入的问题。下面我们就来简单的分析一下多元情况下的线性回归分析问题。

多元回归模型

我门首先看一个运输公司的运输时间的数据实例:

上表中的数据是运输公司的运输时间和运送英里数、次数、车型的关系数据,从这个数据中我们可以知道,影响时间的因素有3个,并且其关系呈现出基本的线性关系,这就是典型的多元线性问题。细心的同学可能可以看出来,在这数据中,英里数、次数和车型相比其类型有点差异,英里数和次数都是一个有大小的数字,其大小直接影响时间,但是车型不是一个有数值的特征值,车型是以类别来分的,其数值只是其车型的代表数字而已,是不能直接拿来用的,所以我们后面会将,将类别的数据归一化,转换为可用的数据。

很明显与简单的单输入模型想比,其区别在于输入的个数是单个还是多个。我们首先看一下单输入的时候的回归方程:y = ax + b ,我们的方程中只有a和b两个参数,自变量只有x一个,因变量只有y一个,我们从这个方程中来推导一下元回归方程应该是什么样的呢?假设现在有n个输入,那么也就是有多个自变量x,我们可以记为x1、x2、x3.......,那么从上式中可以推导出,其参数肯定也不止a和b两个,每个x的旁边都乘上了一个参数a,所以我们多元回归方程如下:

这里的a和b都便是我们训练模型得到的最佳参数值。

同样,我们的参数也可以像简单的单输入的回归方程一样来确定,也是通过最小二乘法,不过此时的运算将上述到多维空间,设计到线性代数和矩阵运算,还是比较复杂的,公式我们这里就不做推导了,其推导流程跟单输入的类似,我们可以将参数a和x放在向量矩阵中,使用最小二乘法的推导方式来得出。最小二乘法的理论推导在上一篇文章中已经给出了,不明白的同学可以再去看一下。其基本结论如下:

上式中的X'是军阵X的转置,-1代表逆矩阵。

多元线性回归Python应用

下面我们使用上面的运输公司的例子来讲一下在Python中我们如何来对多元线性进行建模预测,其实在sklearn中已经为我们封装好了这么一个类,我们直接调用就可以了。下面看我们的例子

首先呢,我们前面说过,车型是类别,不是数值,我们需要进行数据处理,其处理方式便是将车型归一化,比如这里的0,我们将化为100,这里的1我们化为010,这里的2我们化为001,最终处理过的数据如下:

因为数据比较少,所以这里我们是手工修改的,若数据量比较大的话可以在Python中调用函数来进行数据的预处理,前面的文章中也有实例,这里就不多说了。我们将这个文件保存为csv,在Python中使用该数据集来进行建模。

首先我们来进行数据的读取:

#coding:utf8

fromnumpyimportgenfromtxt

importnumpyasnp

fromsklearnimportdatasets,linear_model

#读取数据

path=r"./data/data-line.csv";

#delimiter是分隔符,因为是csv是使用,进行分割的,skip_header是从第几行开始读

data=genfromtxt(path,delimiter=',',skip_header=1)

print"data:\n",data

1

2

3

4

5

6

7

8

9

10

11

#coding:utf8

fromnumpyimportgenfromtxt

importnumpyasnp

fromsklearnimportdatasets,linear_model

#读取数据

path=r"./data/data-line.csv";

#delimiter是分隔符,因为是csv是使用,进行分割的,skip_header是从第几行开始读

data=genfromtxt(path,delimiter=',',skip_header=1)

print"data:\n",data

我么使用了numpy中的genfromtext方法来进行数据的读取,其读取到的结果如下:

读取到了数据之后我们就将数据分为特征值X和标记,然后使用sklearn中的linear_model来进行建模:

#进行建模

regr=linear_model.LinearRegression()

regr.fit(X,Y)

print"x的系数值a:"

printregr.coef_

print"截距b:"

printregr.intercept_

#进行预测

xPred=[102,6,0,1,0]

yPred=regr.predict(xPred)

print"预测结果:"

printyPred

1

2

3

4

5

6

7

8

9

10

11

12

13

14

#进行建模

regr=linear_model.LinearRegression()

regr.fit(X,Y)

print"x的系数值a:"

printregr.coef_

print"截距b:"

printregr.intercept_

#进行预测

xPred=[102,6,0,1,0]

yPred=regr.predict(xPred)

print"预测结果:"

printyPred

最终输出结果如下:

补充

在前面介绍的时候其实有几个概念没有讲下面补充说一下,在回归问题中,有三概念方程:

多元回归模型:

其中ε是误差其为正太分布形式。

多元回归方程:

该方程即为多元回归模型的均值,其误差均值为0

估计多元回归方程:

该方程便是我们通过训练得出来的线性回归方程。

结束语

本文中的例子比较简单,数据比较少,只是一个简单的训练预测实例,并没有牵扯到误差分析和模型的评估,在下一篇文章中我们将使用大量数据的数据集,构造线性回归模型,并且讲解在线性的情况下,如何评估模型,以及评估的法。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。