数据科学 - 线性回归案例
案例:使用时长 + 平均心率预测卡路里消耗
创建一个以平均心率和时长为解释变量的线性回归表
示例
import pandas as pd
import statsmodels.formula.api as smf
full_health_data = pd.read_csv("data.csv", header=0, sep=",")
model = smf.ols('Calorie_Burnage ~ Average_Pulse + Duration', data = full_health_data)
results = model.fit()
print(results.summary())
自己试试 »
示例解释
- 导入 statsmodels.formula.api 库作为 smf。Statsmodels 是 Python 中的统计库。
- 使用 full_health_data 数据集。
- 使用 smf.ols() 创建一个基于普通最小二乘法的模型。请注意,解释变量必须在括号中先写。使用 full_health_data 数据集。
- 通过调用 .fit(),您将获得变量 results。它包含大量关于回归模型的信息。
- 调用 summary() 以获取包含线性回归结果的表格。
输出
线性回归函数可以用数学公式改写为
Calorie_Burnage = Average_Pulse * 3.1695 + Duration * 5.8424 - 334.5194
保留两位小数
Calorie_Burnage = Average_Pulse * 3.17 + Duration * 5.84 - 334.52
在 Python 中定义线性回归函数
在 Python 中定义线性回归函数以进行预测。
如果
- 平均心率为 110,训练时长为 60 分钟,卡路里消耗是多少?
- 平均心率为 140,训练时长为 45 分钟,卡路里消耗是多少?
- 平均心率为 175,训练时长为 20 分钟,卡路里消耗是多少?
示例
def Predict_Calorie_Burnage(Average_Pulse, Duration)
return(3.1695*Average_Pulse + 5.8434 * Duration - 334.5194)
print(Predict_Calorie_Burnage(110,60))
print(Predict_Calorie_Burnage(140,45))
print(Predict_Calorie_Burnage(175,20))
自己试试 »
答案
- 平均心率为 110,训练时长为 60 分钟 = 消耗 365 卡路里
- 平均心率为 140,训练时长为 45 分钟 = 消耗 372 卡路里
- 平均心率为 175,训练时长为 20 分钟 = 消耗 337 卡路里
访问系数
查看系数
- 如果平均心率增加 1,卡路里消耗增加 3.17。
- 如果时长增加 1,卡路里消耗增加 5.84。
访问 P 值
查看每个系数的 P 值。
- 平均心率、时长和截距的 P 值均为 0.00。
- 所有变量的 P 值都具有统计学意义,因为它们小于 0.05。
因此,我们可以得出结论,平均心率和时长与卡路里消耗之间存在关系。
调整后的 R 平方
如果我们有多个解释变量,R 平方就会出现问题。
如果我们添加更多变量,R 平方几乎总是会增加,而永远不会减少。
这是因为我们正在添加更多围绕线性回归函数的数据点。
如果我们添加不影响卡路里消耗的随机变量,我们就有可能错误地得出线性回归函数是良好拟合的结论。调整后的 R 平方可以解决这个问题。
因此,如果我们有多个解释变量,最好查看调整后的 R 平方值。
调整后的 R 平方为 0.814。
R 平方的值始终介于 0 到 1 之间(0% 到 100%)。
- R 平方值高表示许多数据点靠近线性回归函数线。
- R 平方值低表示线性回归函数线不适合数据。
结论:该模型很好地拟合了数据点!
恭喜!您现在已经完成了数据科学库的最后一个模块。