前言
在上一篇文章《机器学习简单线性回归模型》中我们讲解分析了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中使用该数据集来进行建模。
首先我们来进行数据的读取:
1 2 3 4 5 6 7 8 9 10 11 |
#coding:utf8 from numpy import genfromtxt import numpy as np from sklearn import datasets, 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来进行建模:
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:" print regr.coef_ print "截距b: " print regr.intercept_ #进行预测 xPred = [102, 6, 0, 1, 0] yPred = regr.predict(xPred) print "预测结果: " print yPred |
最终输出结果如下:
补充
在前面介绍的时候其实有几个概念没有讲下面补充说一下,在回归问题中,有三概念方程:
-
多元回归模型:
其中ε是误差其为正太分布形式。
-
多元回归方程:
该方程即为多元回归模型的均值,其误差均值为0
-
估计多元回归方程:
该方程便是我们通过训练得出来的线性回归方程。
结束语
本文中的例子比较简单,数据比较少,只是一个简单的训练预测实例,并没有牵扯到误差分析和模型的评估,在下一篇文章中我们将使用大量数据的数据集,构造线性回归模型,并且讲解在线性的情况下,如何评估模型,以及评估的法。