BLOG

个人博客,记录学习与生活

一元线性回归

Published Dec. 2, 2019, 7:57 p.m. by kkk

一元线性回归理论与实践

理论

回归问题,最简单也是最为普遍的就是线性回归问题,而一元线性回归(或简单线性回归)可是一块敲门砖。

模型

一元线性回归,包括两类数据:数学上通常命名为自变量($X$)与因变量($Y$),两者一一对应。样本如下:

$$ X:x_1,x_2,\cdots ,x_n $$

$$ Y:y_1,y_2,\cdots,y_n $$

该理论认为两者具有以下关系:

$$Y=aX + b + \epsilon $$

即两者称线性关系,式中$\epsilon $为引入的随机误差(或随机扰动),通常为服从$N(0,\sigma^2 )$的正态项。可这样认为:有一个一元线性系统(模型),样本数据都是由该系统生成,由于系统一定程度的随机性,数据在整体服从一元线性关系的基础上会有着一定程度的数值偏离。

问题

按照前面提及的思想,数据为一个一元线性系统生成,按照上述公式模型,那么对于一组给定的样本数据,我们要做的就是通过该组数据复现出(具体化)模型(即求出参数$a,b$),然后便可根据该模型来支持我们的分析工作和预测工作。

参数求解的简要思路

对该问题,实际上有着数学和计算机科学的两种解决思路,前者着重于纯粹的数学理论,后者在一定的数学理论基础上,辅以计算机优势(重复迭代计算)。两思路可进一步归类于统计方法和机器学习。

统计方法

由于$\epsilon$为正态项,那么可以把$y_i$看作是$a,b,x_i,\sigma $已知下的变量,服从正态分布$N(aX+b,\sigma^2)$,采用参数估计中的最大似然估计。似然函数如下: $$ P(Y|a,b,X,\sigma^2)=\prod P(y_i|a,b,x_i,\sigma^2) $$

$$ \ln (P(Y|a,b,X)) = -0.5n\ln (2\pi \sigma ^2)-(\frac{1}{2\sigma ^2})\sum _i(y_i-ax_i -b)^2 $$

采用最大似然估计,参数$(a,b)$的估计量值为$(\hat{a},\hat{b})$,则有: $$ (\hat{a},\hat{b})=\arg\min_{a,b}P(Y|a,b,X,\sigma ^2) = \arg\max_{a,b}\sum_i(y_i-ax_i-b)^2 $$ 利用微积分求极值思路可求出估计量$(\hat{a},\hat{b})$

机器学习

首先定义损失函数 $$ J(a,b)=\frac{1}{2n}\sum_{i=1}^n(ax_i+b-y_i) $$ 然后通过梯度下降对其进行迭代参数更新,直至参数收敛。


实践


步骤:

  1. 数据预处理
  2. 调用模型
  3. 预测结果
  4. 可视化

数据集(学习时间、学习成绩):

$$X:(2.5, 5.1, 3.2, 8.5, 3.5, 1.5, 9.2, 5.5, 8.3, 2.7, 7.7, \ 5.9, 4.5, 3.3, 1.1, 8.9, 2.5, 1.9, 6.1, 7.4, 2.7, 4.8, 3.8,\ 6.9, 7.8, 2.1, 2.2, 2.5)$$

$$Y:(21, 47, 27, 75, 30, 20, 88, 60, 81, 25, 85, 62, 41, 42,\ 17, 95, 30, 24, 67, 69, 30, 54, 35, 76, 86, 93, 93, 93)$$


数据预处理

此处仅需两个步骤:数据读取和数据集拆分

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

dataset = pd.read_csv('studentscores.csv')
X = dataset.iloc[ : , : 1 ].values
Y = dataset.iloc[ : , 1 ].values

from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split( X, Y, test_size = 0.25, random_state = 0) 

调用模型

from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train.reshape(-1,1) , Y_train) 
# 接收的X需为二维,因为LinearRegression并不只针对一元线性回归
'''
model.coef_:自变量和因变量的相关系数(回归系数),即一元函数y=ax+b中的a
model.intercept_:截距,b
'''

预测结果

Y_pre = model.predict(X_test.reshape(-1,1))
score = model.score(Y_test, Y_pre)

model.score用于衡量模型的预测效果,定义如下

$$R^2 = 1-\Big(\frac{u}{v}\Big)$$

其中,$u$是预测值和真实值的残差和(系统误差和随机误差),$v$是真实值和真实值平均数的残差和(随机误差)

可视化

训练集
plt.scatter(X_train, Y_train, color='red')
plt.plot(X_train, model.predict(X_train.reshape(-1,1)), color='blue')
plt.show()
测试集
plt.scatter(X_test , Y_test, color = 'red')
plt.plot(X_test , Y_pre, color ='blue')
plt.show()

Share this post
< Pre: 数据预处理 Pos: 数据结构和操作的部分库 >
No comments
Similar posts
Add a new comment