机器学习-多元线性回归(multiple linear regression)

本文介绍了多元线性回归的概念,包括单变量、多变量及多项式回归,并通过Python进行数据导入与分析。利用数据展示了单变量线性回归的散点图,计算了相关系数,接着进行了训练集与测试集的划分,最后实施了多变量线性回归模型的训练,得出最佳拟合线。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先甩几个典型的线性回归的模型,帮助大家捡起那些年被忘记的数学。

● 单变量线性回归: h(x)=theta0 + theta1* x 1
● 多变量线性回归: h(x)=theta0 + theta1* x 1 + theta2* x 2 + theta3* x 3
● 多项式回归: h(x)=theta0 + theta1* x 1 + theta2* (x2^2) + theta3* (x3^3)

多项式回归始终还是线性回归,你可以令x2=x22,x3=x33,简单的数据处理一下就好了,这样上述多项式回归的模型就变成多变量线性回归的模型了。

数据导入
下面我们要开始用数据说话了,先来看看数据源是什么样子吧。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from pandas import DataFrame,Series
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LinearRegression

#读取文件
datafile = u'E:\\pythondata\\dhdhdh.xlsx'#文件所在位置,u为防止路径中有中文名称,此处没有,可以省略
data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件则用read_csv
examDf = DataFrame(data)
examDf.head()

运行结果:

 Call   Connect    Return

0 2.1335 1.267760 1.176615
1 2.5534 1.352941 1.978967
2 3.3361 1.872093 2.249511
3 3.3861 1.826667 2.986597
4 3.9682 1.875000 2.798570

单变量线性回归

绘制散点图
先将上述数据中的Connect(接通量)和Return(回款量)做一个单变量的线性回归,先绘制一个散点图,大致看一下分布情况。

#绘制散点图,examDf.jt为X轴,examDf.hk为Y轴
plt.scatter(examDf.Connect,examDf.Return,color = 'darkgreen',label = "Exam Data")
 
#添加图的标签(x轴,y轴)
plt.xlabel("The Connection amount of the average account")#设置X轴标签
plt.ylabel("The ratio of average return amount")#设置Y轴标签
plt.show()#显示图像

运行结果:
在这里插入图片描述
看来商业中的实际数据总是和课本上的完美数据不一样,看这零零散散的分布,线性关系很是勉强,但是大致还是有一个线性相关的样子的,那么就看看相关系数有多少吧。

相关系数R

rDf = examDf.corr()#查看数据间的相关系数
print(rDf)

运行结果:

         Call   Connect    Return

Call 1.000000 0.445870 0.441673
Connect 0.445870 1.000000 0.745338
Return 0.441673 0.745338 1.000000
Connect(接通量)和Return(回款量)的相关系数为0.745338,还不错。

相关系数是用以反映变量之间相关关系密切程度的统计指标,对于相关性强度来说,我们一般认为:

0~0.3 弱相关

0.3~0.6 中等程度相关

0.6~1 强相关

在数学中,相关系数的计算一般是这样的,给数学狂人看:

R(相关系数) = X和Y的协方差 / (X的标准差 * Y的标准差) == cov(X,Y)/ σX * σY (即person系数)

拆分训练集和测试集
Connect(接通量)和Return(回款量)属于强相关,可以进行线性回归训练,那么我们先来拆分训练集和测试集吧。

#拆分训练集和测试集(train_test_split是存在与sklearn中的函数)
X_train,X_test,Y_train,Y_test = train_test_split(examDf.Connect,examDf
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值