机器学习——多元线性回归分析(multiple regression)及应用
1、多元回归分析与简单线性回归区别
多个自变量x
2、多元回归模型
,其中,
是参数,
是误差值
3、多元回归方程

4、估计多元回归方程
,一个样本被用来计算
的点估计
5、估计流程(与简单线性回归类似)

6、估计方法
使sum of squares最小,
,运算与简单线性回归类似,涉及线性代数和矩阵代数的运算
7、举例
一家快递公司送货,X1:运输里程;X2:运输次数;Y:总运输时间



8、描述参数含义
:平均每多送1英里,运输时间延长0.0611小时
:平均每多一次运输,运输时间延长0.923小时
9、预测
问题:如果一个运输任务是跑102英里,运输6次,预计时间是多长?

10、如果自变量里面有分类型变量(categorical data),如何处理?

11、关于误差的分布

12、对第一个表格的数据,快递公司运输问题用Python进行代码实现
将运输里程、运输次数、总运输时间按列的形式保存到文件TransportData.csv文件中,如下图:

Python3.5实现代码为:
-
#!/usr/bin/env python -
# -*- coding:utf-8 -*- -
# Author:ZhengzhengLiu -
from numpy import genfromtxt #genfromtxt函数创建数组表格数据 -
import numpy as np -
from sklearn import datasets,linear_model -
#读取数据,r后边内容当做完整的字符串,忽略里面的特殊字符 -
dataPath = r'F:\PythonCode\Regresssion\TransportData.csv' -
transportData = genfromtxt(dataPath,delimiter=',') #将路径下的文本文件导入并转化成numpy数组格式 -
print("transportData:",transportData) -
X = transportData[:,:-1] #取所有行和除了最后一列的所有列作为特征向量 -
Y = transportData[:,-1] #取所有行和最后一列作为回归的值 -
print("X:",X) -
print("Y:",Y) -
#建立回归模型 -
regr = linear_model.LinearRegression() -
regr.fit(X,Y) -
print("coefficients:",regr.coef_) #b1,...,bp(与x相结合的各个参数) -
print("intercept:",regr.intercept_) #b0(截面) -
x_pred = [102,6] -
y_pred = regr.predict(x_pred) #预测 -
print("y_pred:",y_pred)
运行结果:
-
transportData: [[ 100. 4. 9.3] -
[ 50. 3. 4.8] -
[ 100. 4. 8.9] -
[ 100. 2. 6.5] -
[ 50. 2. 4.2] -
[ 80. 2. 6.2] -
[ 75. 3. 7.4] -
[ 65. 4. 6. ] -
[ 90. 3. 7.6] -
[ 90. 2. 6.4]] -
X: [[ 100. 4.] -
[ 50. 3.] -
[ 100. 4.] -
[ 100. 2.] -
[ 50. 2.] -
[ 80. 2.] -
[ 75. 3.] -
[ 65. 4.] -
[ 90. 3.] -
[ 90. 2.]] -
Y: [ 9.3 4.8 8.9 6.5 4.2 6.2 7.4 6. 7.6 6.4] -
coefficients: [ 0.06231881 0.88000431] -
intercept: -0.807517256255 -
y_pred: [ 10.82902718]
13、当自变量中有分类变量(如:车型)时,多元线性回归处理
将分类变量转化成0,1,2等数字来表示。0:小车,1:SUV,2:卡车,转码格式为:用一个3维数表示,所用车辆类型为1,其余车型为0.
将运输里程、运输次数、运输车型、总运输时间按列的形式保存到文件TransportData2.csv文件中,转码格式如下图:
转码格式:(转化过程,不是最终存储内容)

将转码后的数据保存在TransportData2.csv文件中:

对前面的代码稍作修改即可:
-
#!/usr/bin/env python -
# -*- coding:utf-8 -*- -
# Author:ZhengzhengLiu -
#多元线性回归处理自变量中有分类变量 -
from numpy import genfromtxt #genfromtxt函数创建数组表格数据 -
import numpy as np -
from sklearn import datasets,linear_model -
#读取数据,r后边内容当做完整的字符串,忽略里面的特殊字符 -
dataPath = r'F:\PythonCode\Regresssion\TransportData2.csv' -
transportData = genfromtxt(dataPath,delimiter=',') #将路径下的文本文件导入并转化成numpy数组格式 -
print("transportData:",transportData) -
X = transportData[:,:-1] #取所有行和除了最后一列的所有列作为特征向量 -
Y = transportData[:,-1] #取所有行和最后一列作为回归的值 -
print("X:",X) -
print("Y:",Y) -
#建立回归模型 -
regr = linear_model.LinearRegression() -
regr.fit(X,Y) -
print("coefficients:",regr.coef_) #b1,...,b5(与x相结合的各个参数) -
print("intercept:",regr.intercept_) #b0(截面) -
x_pred = [102,6,0,0,1] -
y_pred = regr.predict(x_pred) #预测 -
print("y_pred:",y_pred)
运行结果:
-
transportData: [[ 100. 4. 0. 1. 0. 9.3] -
[ 50. 3. 1. 0. 0. 4.8] -
[ 100. 4. 0. 1. 0. 8.9] -
[ 100. 2. 0. 0. 1. 6.5] -
[ 50. 2. 0. 0. 1. 4.2] -
[ 80. 2. 0. 1. 0. 6.2] -
[ 75. 3. 0. 1. 0. 7.4] -
[ 65. 4. 1. 0. 0. 6. ] -
[ 90. 3. 1. 0. 0. 7.6] -
[ 90. 2. 1. 0. 0. 6.4]] -
X: [[ 100. 4. 0. 1. 0.] -
[ 50. 3. 1. 0. 0.] -
[ 100. 4. 0. 1. 0.] -
[ 100. 2. 0. 0. 1.] -
[ 50. 2. 0. 0. 1.] -
[ 80. 2. 0. 1. 0.] -
[ 75. 3. 0. 1. 0.] -
[ 65. 4. 1. 0. 0.] -
[ 90. 3. 1. 0. 0.] -
[ 90. 2. 1. 0. 0.]] -
Y: [ 9.3 4.8 8.9 6.5 4.2 6.2 7.4 6. 7.6 6.4] -
coefficients: [ 0.05545649 0.69545199 -0.1734737 0.57081602 -0.39734232] -
intercept: 0.197201946472 -
y_pred: [ 9.62913307]
--------------------- 本文来自 loveliuzz 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/loveliuzz/article/details/78006493?utm_source=copy
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)