欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

python数据分析之线性回归实践

程序员文章站 2022-05-09 11:18:37
...
1、模型
  • 可以将模型理解为一个函数(一种映射规则),由训练数据来确定函数的参数,当参数确定好之后,我们就可以利用该模型对未知的数据进行求值。

  • 输入模型的数据,称为训练数据。

  • 我们使用样本数据训练模型,数据中的每个属性,我们称为特征(习惯用x表示)。每条数据的目标输出值,我们称为标签(习惯用y表示)。
    python数据分析之线性回归实践

2、回归分析
  • 回归分析是用来评估变量之间关系的统计过程
  • 用来解释自变量X与因变量Y的关系,即当自变量X发生改变时,因变量Y会如何改变。
2.1 线性回归
  • 线性回归是回归分析的一种,评估的自变量X与因变量Y之间是一种线性关系(画出来的图像是直的,每个自变量的最高此项为1)。
  • 线性回归会输出一个连续值
2.2 拟合
  • 拟合,是指构建一种算法(数学函数),使得该算法能够符合真实的数据。
  • 从机器学习的角度来讲,线性回归就是要构建一个线性函数,使得该函数与目标值之间的相符性最好。
  • 从空间的角度来看,就是要让函数的直线(面),尽可能靠近空间中所有的数据点(点到直线的平行于y轴的距离之和最短)。
2.3 损失函数
  • 损失函数,关于误差的一个函数,用来衡量模型预测值和真实值之间的差异。
  • 机器学习的目标,就是要建立一个损失函数,使得该函数的值最小。
  • 损失函数是以模型参数w作为自变量的函数,自变量可能的取值组合通常是无限的,我们的目标就是要在众多可能的组合中,找到一组最合适的自变量组合(值),使得损失函数的值最小。

在线性回归中,使用最小二乘法来定义损失函数:

python数据分析之线性回归实践

3、回归模型评估
  • 当我们建立好回归模型之后,我们可以采用MSE、RMSE、MAE、R^2等指标来进行评估模型的效果。
  • MSE(Mean Squared Error):平均平方误差,为所有样本数据误差(真实值与预测值之差)的平方和,然后取均值。
  • RMSE(Root Mean Squared Error):平均平方误差的平方根,即在MSE的基础上,取平方根。
  • MAE(Mean Absolute Error):平均绝对值误差,为所有样本数据误差的绝对值之和,然后取均值。
  • R^2:决定系数,用来表示模型拟合性的分值,值越高表示模型拟合型越好。
  • 在训练集中,R^2的取值范围是[0,1]。
  • 在测试集中,R^2的取值范围是是负无穷到1。最理想的情况是所有的样本数据的预测值与真实值相同,此时其值为1。
4、简单线性回归
  • 当只有一个自变量时,称为简单线性回归。

以波士顿房价数据集为例,预测RM(平均房间数)和MEDV(房屋的平均价格)的关系:

import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_boston
from sklearn.metrics import mean_squared_error, mean_absolute_error

boston = load_boston()   # 加载波士顿房价数据集
# 拼接data信息和target信息
data = np.concatenate([boston.data,boston.target.reshape(-1,1)],axis=1)   
feature_names = boston.feature_names.tolist()
feature_names.append("MEDV")        # 将"MEDV"(房屋的平均价格)添加至特征名列表,作为拼接数据的列名
df = pd.DataFrame(data,columns=feature_names)
df.sample(5)              # 随机抽样10条数据,进行数据概览

x, y = boston.data[:,5].reshape(-1,1),  boston.target     # 平均房间数作为x,房屋的平均价格作为y
# 划分训练集和测试集,测试集大小 test_size,随机种子 random_state,用来产生相同的随机数序列
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=0)  
lr = LinearRegression()     # 实例化用于线性回归的类
lr.fit(x_train, y_train)    # 使用训练集数据,训练模型
print("模型权重:", lr.coef_)
print("截距:", lr.intercept_)

y_hat = lr.predict(x_test)    # 根据权重和截距即可确定函数,就可以使用测试集进行预测
print("实际值:", y_test[:5])
print("预测值:", y_hat[:5])

print("均方误差(MSE):", mean_squared_error(y_test, y_hat))
print("根均方误差(RMSE):", np.sqrt(mean_squared_error(y_test, y_hat)))
print("平均绝对值误差(MAE):",mean_absolute_error(y_test, y_hat))

print("训练集R^2:",lr.score(x_train, y_train))
print("测试集R^2:",lr.score(x_test, y_test))

对于以上例子,结果为:

模型权重: [9.31294923]
截距: -36.180992646339185
实际值: [22.6 50.  23.   8.3 21.2]
预测值: [22.7979148  21.70829974 23.17043277 13.63397276 21.85730693]
均方误差(MSE)43.472041677202206
根均方误差(RMSE)6.593333123481795
平均绝对值误差(MAE): 4.212526305455822
训练集R^20.48752067939343646
测试集R^20.46790005431367815
5、多元线性回归
  • 当具有多个自变量时,称为多元线性回归。

以波士顿房价数据集为例,预测所有影响因素和MEDV(房屋的平均价格)的关系:

x, y = boston.data,  boston.target     # 所有影响因素作为x,房屋均价作为y
# 划分训练集和测试集,测试集大小 test_size,随机种子 random_state,用来产生相同的随机数序列
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.25, random_state=0)  
lr = LinearRegression()     # 实例化用于线性回归的类
lr.fit(x_train, y_train)    # 使用训练集数据,训练模型
print("模型权重:", lr.coef_)
print("截距:", lr.intercept_)

y_hat = lr.predict(x_test)
print("实际值:", y_test[:5])
print("预测值:", y_hat[:5])

print("均方误差(MSE):", mean_squared_error(y_test, y_hat))
print("根均方误差(RMSE):", np.sqrt(mean_squared_error(y_test, y_hat)))
print("平均绝对值误差(MAE):", mean_absolute_error(y_test, y_hat))

print("训练集R^2:",lr.score(x_train, y_train))
print("测试集R^2:",lr.score(x_test, y_test))

对于以上例子,结果为:

模型权重: [-1.17735289e-01  4.40174969e-02 -5.76814314e-03  2.39341594e+00
 -1.55894211e+01  3.76896770e+00 -7.03517828e-03 -1.43495641e+00
  2.40081086e-01 -1.12972810e-02 -9.85546732e-01  8.44443453e-03
 -4.99116797e-01]
截距: 36.933255457118925
实际值: [22.6 50.  23.   8.3 21.2]
预测值: [24.95233283 23.61699724 29.20588553 11.96070515 21.33362042]
均方误差(MSE)29.78224509230234
根均方误差(RMSE)5.457311159564052
平均绝对值误差(MAE): 3.668330148135715
训练集R^20.7697699488741149
测试集R^20.6354638433202132

从以上简单线性回归和多元线性回归的例子可以看出:

  • 求解简单线性回归和多元线性回归的方法是相同的,区别只是数据不一样(多元线性回归具有多个因变量)。
  • 对于波士顿房价数据集来说,综合所有因素对只根据单个因素进行预测效果更好。