线性回归是一种统计方法,用于对响应变量和解释变量之间的线性关系进行建模。回归函数描述了给定解释变量的响应变量的期望值,并通过线性函数进行建模。
在本文中,我们将回顾线性回归背后的理论,以及如何使用python scikit-learn中的机器学习库实现线性回归模型。
给定p维输入向量:
我们想要预测一个实值响应Y。线性回归模型允许我们预测Y,给定输入向量X有如下形式:
该模型描述了输入特征的加权总和。假设给定X下Y的期望值的回归函数是线性的或近似线性的。参数β是未知系数,输入向量X可以来自定量输入,转换输入,基数展开,交互作用项或表示类别的虚拟变量。给定一组训练数据,我们估计β参数的值:
在此,每个x是输入向量(特征值列表),每个y是响应,并且N是训练示例的数量。
如果我们回顾一下回归模型:
我们看到估计量f是一个常数加上具有相应β值(或权重)的输入的线性组合。总而言之,p是输入值或特征的数量。我们需要一种估计p + 1 β参数的方法:
估计β参数的最流行方法是最小二乘法。此方法选择最小化残差平方和(RSS)的β参数值:
简而言之,此方法选择权重来描述每个特征的重要性。
因此,现在我们应该考虑如何最小化RSS。
我们以矩阵符号重写RSS:
在矩阵X中,每一行都是输入特征,而RSS是具有p +1个参数的二次函数。我们可以对p +1β参数采用RSS的导数:
如果我们将此导数设置为零:
我们有独特的解决方案:
现在,我们有了可将RSS最小化的β参数。给定输入向量,我们可以通过训练输入处的拟合值来表示预测值:
现在我们已经涵盖了足够的理论。现在让我们讨论如何在python中实现线性回归模型。
我们将使用Kaggle的Medical Cost Personal Datasets数据。
首先,我们导入pandas库:
import pandas as pd
然后,使用'.read_csv()'方法将数据读入Pandas数据框中,并显示我们的数据:
df = pd.read_csv('insurance/insurance.csv')df#df.head()
我们将使用年龄(age),体重指数(bmi),吸烟者状况(smoker)和性别(sex)建立线性回归模型,以预测医疗费用。让我们定义输入和输出:
import numpy as npdf ['sex_code'] = np.where(df['sex'] =='female',1,0)df ['smoker_code'] = np.where(df ['smoker'] == 'yes',1,0)X = np.array(df [['age','bmi','children','sex_code','smoker_code']])y = np.array(df ['charges' ])
将数据分割以进行培训和测试:
from sklearn.model_selection import train_test_split X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2,random_state = 42)
从scikit-learn(sklearn)导入线性回归模块,定义我们的线性回归对象,并拟合我们的模型:
from sklearn.linear_model import LinearRegressionreg = LinearRegression()reg.fit(X_train,y_train)
现在,输出模型的性能。我们将使用R²指标来衡量效果。R²是一种统计量度,用于测量数据与回归线的接近程度。值介于0到1.0之间,而值1.0代表完美的模型性能:
print("Model Performance: ", reg.score(X_test, y_test))
输出结果为:Model Performance: 0.7811302113434095
我们看到我们的模型表现很好。R²为0.78意味着我们的模型可以解释数据中78%的方差。
结论
在这篇文章中,我们讨论了线性回归背后的理论。线性回归使用特征的加权总和来表示响应变量。使用最小二乘法计算模型中的权重。我们还展示了如何在python中实现线性回归模型,并使用它来根据患者特征预测医疗费用。感谢您的阅读!