机器学习——多元线性回归分析(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实现代码为:

 

 
  1. #!/usr/bin/env python

  2. # -*- coding:utf-8 -*-

  3. # Author:ZhengzhengLiu

  4.  
  5. from numpy import genfromtxt #genfromtxt函数创建数组表格数据

  6. import numpy as np

  7. from sklearn import datasets,linear_model

  8.  
  9. #读取数据,r后边内容当做完整的字符串,忽略里面的特殊字符

  10. dataPath = r'F:\PythonCode\Regresssion\TransportData.csv'

  11. transportData = genfromtxt(dataPath,delimiter=',') #将路径下的文本文件导入并转化成numpy数组格式

  12. print("transportData:",transportData)

  13.  
  14. X = transportData[:,:-1] #取所有行和除了最后一列的所有列作为特征向量

  15. Y = transportData[:,-1] #取所有行和最后一列作为回归的值

  16. print("X:",X)

  17. print("Y:",Y)

  18.  
  19. #建立回归模型

  20. regr = linear_model.LinearRegression()

  21. regr.fit(X,Y)

  22. print("coefficients:",regr.coef_) #b1,...,bp(与x相结合的各个参数)

  23. print("intercept:",regr.intercept_) #b0(截面)

  24.  
  25. x_pred = [102,6]

  26. y_pred = regr.predict(x_pred) #预测

  27. print("y_pred:",y_pred)

运行结果:

 

 
  1. transportData: [[ 100. 4. 9.3]

  2. [ 50. 3. 4.8]

  3. [ 100. 4. 8.9]

  4. [ 100. 2. 6.5]

  5. [ 50. 2. 4.2]

  6. [ 80. 2. 6.2]

  7. [ 75. 3. 7.4]

  8. [ 65. 4. 6. ]

  9. [ 90. 3. 7.6]

  10. [ 90. 2. 6.4]]

  11. X: [[ 100. 4.]

  12. [ 50. 3.]

  13. [ 100. 4.]

  14. [ 100. 2.]

  15. [ 50. 2.]

  16. [ 80. 2.]

  17. [ 75. 3.]

  18. [ 65. 4.]

  19. [ 90. 3.]

  20. [ 90. 2.]]

  21. Y: [ 9.3 4.8 8.9 6.5 4.2 6.2 7.4 6. 7.6 6.4]

  22. coefficients: [ 0.06231881 0.88000431]

  23. intercept: -0.807517256255

  24. y_pred: [ 10.82902718]

13、当自变量中有分类变量(如:车型)时,多元线性回归处理

将分类变量转化成0,1,2等数字来表示。0:小车,1:SUV,2:卡车,转码格式为:用一个3维数表示,所用车辆类型为1,其余车型为0.

将运输里程、运输次数、运输车型、总运输时间按列的形式保存到文件TransportData2.csv文件中,转码格式如下图:

转码格式:(转化过程,不是最终存储内容)

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


对前面的代码稍作修改即可:

 

 
  1. #!/usr/bin/env python

  2. # -*- coding:utf-8 -*-

  3. # Author:ZhengzhengLiu

  4.  
  5. #多元线性回归处理自变量中有分类变量

  6. from numpy import genfromtxt #genfromtxt函数创建数组表格数据

  7. import numpy as np

  8. from sklearn import datasets,linear_model

  9.  
  10. #读取数据,r后边内容当做完整的字符串,忽略里面的特殊字符

  11. dataPath = r'F:\PythonCode\Regresssion\TransportData2.csv'

  12. transportData = genfromtxt(dataPath,delimiter=',') #将路径下的文本文件导入并转化成numpy数组格式

  13. print("transportData:",transportData)

  14.  
  15. X = transportData[:,:-1] #取所有行和除了最后一列的所有列作为特征向量

  16. Y = transportData[:,-1] #取所有行和最后一列作为回归的值

  17. print("X:",X)

  18. print("Y:",Y)

  19.  
  20. #建立回归模型

  21. regr = linear_model.LinearRegression()

  22. regr.fit(X,Y)

  23. print("coefficients:",regr.coef_) #b1,...,b5(与x相结合的各个参数)

  24. print("intercept:",regr.intercept_) #b0(截面)

  25.  
  26. x_pred = [102,6,0,0,1]

  27. y_pred = regr.predict(x_pred) #预测

  28. print("y_pred:",y_pred)

运行结果:

 

 
  1. transportData: [[ 100. 4. 0. 1. 0. 9.3]

  2. [ 50. 3. 1. 0. 0. 4.8]

  3. [ 100. 4. 0. 1. 0. 8.9]

  4. [ 100. 2. 0. 0. 1. 6.5]

  5. [ 50. 2. 0. 0. 1. 4.2]

  6. [ 80. 2. 0. 1. 0. 6.2]

  7. [ 75. 3. 0. 1. 0. 7.4]

  8. [ 65. 4. 1. 0. 0. 6. ]

  9. [ 90. 3. 1. 0. 0. 7.6]

  10. [ 90. 2. 1. 0. 0. 6.4]]

  11. X: [[ 100. 4. 0. 1. 0.]

  12. [ 50. 3. 1. 0. 0.]

  13. [ 100. 4. 0. 1. 0.]

  14. [ 100. 2. 0. 0. 1.]

  15. [ 50. 2. 0. 0. 1.]

  16. [ 80. 2. 0. 1. 0.]

  17. [ 75. 3. 0. 1. 0.]

  18. [ 65. 4. 1. 0. 0.]

  19. [ 90. 3. 1. 0. 0.]

  20. [ 90. 2. 1. 0. 0.]]

  21. Y: [ 9.3 4.8 8.9 6.5 4.2 6.2 7.4 6. 7.6 6.4]

  22. coefficients: [ 0.05545649 0.69545199 -0.1734737 0.57081602 -0.39734232]

  23. intercept: 0.197201946472

  24. y_pred: [ 9.62913307]

 

 

--------------------- 本文来自 loveliuzz 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/loveliuzz/article/details/78006493?utm_source=copy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值