简单线性回归(Simple Linear Regression)和多元线性回归(Multiple Regression)学习笔记

简单线性回归(Simple Linear Regression)

0.前提介绍:
为什么需要统计量?
统计量:描述数据特征
0.1集中趋势衡量
0.1.1均值(平均数,平均值) (mean):(求和除以个数,Ex也可以表示x求均值)
在这里插入图片描述
0.1.2中位数(median) : 将数据中的各个数值按照大小顺序排列,居于中间位置的变量
0.1.2.1.给数据排序: 1,2,2,6,9
0.1.2.2.找出位置处于中间的变量: 2
当n为奇数的时候:直接取位置处于中间的变量
当n为偶数的时候,取中间两个量的平均值
0.1.2众数(mode) : 数据中出现次数最多的数
0.2.1.离散程度衡量
0.2.1.1方差(variance):
在这里插入图片描述
例如:{6, 2,9,1, 2}
(1)(6- 4)^2 + (2- 4)^2 + (9- 4)^2 +(1- 4)^2 + (2- 4)^2
=4+4+25+9+4= 46
(2) n-1=5-1=4
(3) 46/ 4 = 11.5
0.2.1.2标准差(standard deviation):方差开平方
在这里插入图片描述
S= sqrt(11.5) = 3.39
1.回归问题与分类问题区别:
回归(regression) :Y变量为连续数值型( continuous numerical variable)
如:房价,人数,降雨量
分类( Classification): Y变量为类别型(categorical variable)
如:颜色类别,电脑品牌,有无信誉

2.简单线性回归( Simple Linear Regression)
2.1很多做决定过过程通常是根据两个或者多个变量之间的关系
2.3回归分析(regression analysis)用来建立方程模拟两个或者多个变量之间如何关联
2.4被预测的变量叫做:因变量(dependent variable), y,即输出(output)
2.5被用来进行预测的变量叫做:自变量(independent variable), x,即输入(input)
3.简单线性回归介绍
3.1简单线性回归包含一个自变量(x)和一 个因变量(y)
3.2以上两个变量的关系用一条直线来模拟
3.3如果包含两个以上的自变量,则称作多元回归分析( multiple regression)
4.简单线性回归模型
4.1被用来描述因变量(y)和自变量(X)以及偏差(error)之间关系的方程叫做回归模型
4.2简单线性回归的模型是:
在这里插入图片描述
β为参数,X为自变量,ε为偏差
5.单线性回归方程:(ε满足正态分布,切均值为0)
E(y)=β0+β1x
这个方程对应的图像是一条直线, 称作回归线
其中,β0是回归线的截距
β1是回归线的斜率
E(y)是在一个给定x值下y的期望值(均值)
6.正向线性关系:
在这里插入图片描述
7.负向线性关系:
在这里插入图片描述
8.无关系:(斜率等于0)
在这里插入图片描述

9.估计的简单线性回归方程
在这里插入图片描述
b0为截距β0的估计值,b1是斜率β1的估计值
这个方程叫做估计线性方程( estimated regression line)
其中,bo是估计线性方程的纵截距
b是估计线性方程的斜率
y是在自变量x等于一个给定值的时候,y的估计值

10.线性回归分析流程:(ε的期望值(均值)为0,所以E(y)无ε)
在这里插入图片描述
11.关于偏差ε的假定
11.1是一个随机的变量,均值(或期望值)为0
11.2 ε的方差(variance)对于所有的自变量x是一样的
11.3 ε的值是独立的
11.4 ε满足正态分布
简单线性回归(Simple Linear Regression)下

简单线性回归模型举例:

汽车卖家做电视广告数量与卖出的汽车数里:
在这里插入图片描述

1.1如何练处适合简单线性回归模型的最佳回归线?
在这里插入图片描述
最佳回归线标准:(实际值y为红点,估计值y(hat)为线上的值)
在这里插入图片描述
使sum of squares(平方和)最小:

1.1.2最佳回归线计算
在这里插入图片描述
b0为截距β0的估计值,b1是斜率β1的估计值,(y ̅ 和x ̅ 都经过这条线,带入b1可求出b0)
分子= (1-2)(14-20)+(3-2)(24-20)+(2-2)(18-20)+(1-2)(17-20)+(3-2)(27-20)
=6+4+0+3+7
= 20
分母= (1-2) ^2 +(3-2)^2 +(2-2)2+(1-2)2+ (3-2)^2
=1+1+0+1+1
=4
b1 = 20/4 =5
b0=20-5*2=20- 10= 10
实例code:

import numpy as np
def fitSLR(x,y):
    n = len(x) #x,y长度一样,包含相同元素个数
    denominator = 0 #分母,计算完数据后不会为0,
    numeritor = 0 #分子
    for i in range(0,n):#实例有n组数
        numeritor += (x[i]-np.mean(x))*(y[i]-np.mean(y))
        denominator += (x[i]-np.mean(x))**2 
    print('numeritor:',numeritor)
    print('denominator:',denominator)
    b1 = numeritor/float(denominator)
    b0 = np.mean(y) - (b1*np.mean(x))
    return b0,b1
def predict(x,b0,b1): #这里x为要预测的实例的值
    y_test=b0+b1*x
    return y_test

x = [1,3,2,1,3]
y = [14,24,18,17,27]
b0,b1 = fitSLR(x=x,y=y)   
print('intercept:',b0)
print('slope:',b1)

x_test = 6
y_test = predict(x_test,b0,b1)
print('y_test:',y_test)

其中x_ given= 6(实例)
==Y_ hat=5*6+ 10 = 40 ==
运行结果如下:
numeritor: 20.0
denominator: 4.0
intercept: 10.0
slope: 5.0
y_test: 40.0

多元线性回归(Multiple Regression)上

多元回归分析( multipleregression)
1.与简单线性回归区别( simple linear regression):
MR有多个自变量(x)
2.多元回归模型
y=β0+β1 X1+β2X2+ … +βpXp+ε (多元的平面)
其中:β0(截面), β1, β2…βp是参数
ε是误差值
3.多元回归方程(等式左右同时取期望值,等式右边取期望值等于所有个体的期望值之和)
E(y)=β0+β1x1+B2X2+ … +βpXp
4.估计多元回归方程:
y_hat=b0+b1 x+b2x2+ … +bpXp
一个样本被用来计算β0, β1, β2… βp的点估计值分别为b0, b1, b2…,bp

5.估计流程(即预测过程,与简单线性回归类似一样)
在这里插入图片描述
Regression Model:y=β0+β1x+β2x+….βpx+ε,以下同理变化
Sample Data:现实中很多数据是难以统计完全的,所以用抽取的样本来计算.
6.估计方法
使sum of squares(平方和)最小:(多元曲面上估算值到实际值的差之和最小)
在这里插入图片描述
运算与简单线性回归类似,涉及到线性代数和矩阵的运算
7.例子(使用python计算)
一家快递公司送货 , X1 :运输里程(mile);X2 :运输次数;Y :总运输时间(h).
在这里插入图片描述
Time = b0+ b1Miles + b2Deliveries
计算结果:(下节课做详细运算)
Time = -0.869 + 0.0611 Miles + 0.923 Deliveries
8.描述参数含义
b0: 常数项
b1: 平均每多运送一英里,运输时间延长0.0611小时
b2:平均每多一次运输, 运输时间延长0.923小时

9.预测
如果一个运输任务是跑102英里,运输6次,预计多少小时?
Time = -0.869 +0.0611102+ 0.923 6=10.9 (小时)
10.如果自变量(x)中有分类型变量( categorical data) ,如何处理?
(regression与classfication的区别在于y是否连续)
答:x既可以使用连续性变量也可以使用分类型变量
在这里插入图片描述
0,1,2只是作为标签,与其本身大小无关

11.关于误差的分布
误差ε是一个随机变量,均值为0
ε的方差对于所有的自变量来说相等
所有ε的值是独立的
ε满足正态分布,并且通过β0+ β1 x1+β2x2+ … +βpxp反映y的期望值

多元线性回归(Multiple Regression)下

一家快递公司送货 , X1 :运输里程(mile);X2 :运输次数;Y :总运输时间(h).
在这里插入图片描述
目的,求出b0, b1,…bp:
Y_ hat=b0+b1X1+b2X2+ … +bpXp.

多元线性回归code实例:

from numpy import genfromtxt #将csv文件的数据转换成np的array形式
import numpy as np
from sklearn import datasets,linear_model

#1.导入数据
dataPath = r'C:\Users\Administrator.Bili-2019LEMOKD\Desktop\新建文件夹\Delivery.csv'
DeliveryData = genfromtxt(dataPath,delimiter=',') #genfromtxt将数据转换成矩阵形式;csv文件每个cell以逗号为分隔符,所以分隔符为","
print(DeliveryData) #会自动将文件中的数据读取并转换为矩阵形式,并放到文件的第一行第一列开始
X = DeliveryData[:, :-1]#取所有维度第一(0)列和第二(1)列的数作为x(取左不取右,所以不含倒数第一列)
# print(X)
Y = DeliveryData[:,-1]
# print(Y)

#2.建模
regr = linear_model.LinearRegression()
regr.fit(X,Y)
print('coefficient:',regr.coef_)   #x的系数(b1~bp)
print('intercept',regr.intercept_) #截距(面)

#3.预测
xSample = np.array([[102,6]]) #array!!
yPred = regr.predict(xSample)
print('predicted y:',yPred)

运行结果如下:
[[100. 4. 9.3]
[ 50. 3. 4.8]
[100. 4. 8.9]
[100. 2. 6.5]
[ 50. 2. 4.2]
[ 80. 2. 6.2]
[ 75. 3. 7.4]
[ 65. 4. 6. ]
[ 90. 3. 7.6]
[ 90. 2. 6.1]]
coefficient: [0.0611346 0.92342537]
intercept -0.868701466781709
predicted y: [10.90757981]

如果自变量中有分类型变量(categorical data) :
将车型Dummy Varible转换成0和1:

同样可以用上面的代码执行:

from numpy import genfromtxt #将csv文件的数据转换成np的array形式
import numpy as np
from sklearn import datasets,linear_model

#1.导入数据
dataPath = r'C:\Users\Administrator.Bili-2019LEMOKD\Desktop\新建文件夹\DeliveryDummy.csv'
eliveryData = genfromtxt(dataPath,delimiter=',')
print(DeliveryData) 
'''打印出结果如果莫名多出几行(-1或nan),可能是复制数据到csv文件时有空数据,进入csv删除那几行即可'''
X = DeliveryData[:, :-1]
print('X:',X)
Y = DeliveryData[:,-1]
print('Y:',Y)

#2.建模
regr = linear_model.LinearRegression()
regr.fit(X,Y)
print('coefficient:',regr.coef_)   #x的系数(5个x,b1~b5)
print('intercept',regr.intercept_) #截距(面)

#3.预测
xSample = np.array([[102,6,0,1,0]]) #array!!
yPred = regr.predict(xSample)
print('predicted y:',yPred)

运行结果如下:
[100. 4. 0. 1. 0. 9.3]
[ 50. 3. 1. 0. 0. 4.8]
[100. 4. 0. 1. 0. 8.9]
[100. 2. 0. 0. 1. 6.5]
[ 50. 2. 0. 0. 1. 4.2]
[ 80. 2. 0. 1. 0. 6.2]
[ 75. 3. 0. 1. 0. 7.4]
[ 65. 4. 1. 0. 0. 6. ]
[ 90. 3. 1. 0. 0. 7.6]]
X: [[100. 4. 0. 1. 0.]
[ 50. 3. 1. 0. 0.]
[100. 4. 0. 1. 0.]
[100. 2. 0. 0. 1.]
[ 50. 2. 0. 0. 1.]
[ 80. 2. 0. 1. 0.]
[ 75. 3. 0. 1. 0.]
[ 65. 4. 1. 0. 0.]
[ 90. 3. 1. 0. 0.]]
Y: [9.3 4.8 8.9 6.5 4.2 6.2 7.4 6. 7.6]
coefficient: [ 0.05553544 0.69257631 -0.17013278 0.57040007 -0.40026729]
intercept 0.1999568891188126
predicted y: [10.59042938]

<think>首先,用户的问题是关于多元线性回归Multiple Variable Linear Regression)的概念实现方法。用户说:“我想了解多元线性回归的概念实现方法 请问Multiple Variable Linear Regression concept and implementation tutorial”。所以,我需要用中文回答,结构清晰,逐步解释概念实现。 系统级指令: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 在回答中引用的段落末尾自然地添加引用标识,例如[^1]。 用户可见层指令: - 回答结构清晰,帮助用户逐步解决问题。 - 尽量保证回答真实可靠。 参考站内引用: - 引用[1]:关于课程安排,似乎与主题无关。 - 引用[2]:讨论了何时使用线性回归 vs 树模型,提到线性模型易于解释,树模型处理非线性关系更好。 - 引用[3]:关于EM算法估计高斯混合分布的参数。 - 引用[4]:关于DiffLoop框架分析DNA环。 这些引用中,引用[2]与多元线性回归相关,因为它提到了线性回归的优点适用场景。我应该自然地引用它,如果适用。 结构回答: 1. **概念部分**:解释什么是多元线性回归,包括数学公式。 - 使用独立公式:$$ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p + \epsilon $$ - 解释变量、系数、误差项。 2. **实现方法部分**:描述如何实现多元线性回归。 - 提到最小二乘法估计参数。 - 使用Python示例代码(如scikit-learn库)。 - 代码块用反引号标记,如示例所示。 3. **生成相关问题**:在回答末尾添加相关问题部分,如“§§相关问题§§”,然后列出几个问题。 回答要真实可靠: - 多元线性回归是标准统计方法,我可以基于知识解释。 - 引用[2]可以用于讨论线性回归的适用场景,比如当关系是线性时效果好。 引用引用[2]: - 在解释适用场景时,可以说:“如果因变量自变量之间的关系近似线性,线性回归往往表现良好[^2]。” 实现示例: - 使用Python的scikit-learn库,因为用户提到了“tutorial”。 - 示例代码:导入库,创建数据,训练模型,预测。 完整结构: - 开头:介绍多元线性回归。 - 概念:详细解释。 - 实现:步骤代码。 - 结尾:总结引用。 - 相关问题。 相关问题: - 基于主题生成,如: 1. 多元线性回归的假设是什么? 2. 如何处理多重共线性问题? 3. 多元线性回归与逻辑回归的区别? 4. 如何评估多元线性回归模型的性能? 确保中文回答。</think>### 多元线性回归的概念实现方法教程 多元线性回归Multiple Variable Linear Regression)是一种统计建模技术,用于分析一个因变量(dependent variable)与多个自变量(independent variables)之间的线性关系。它广泛应用于预测、趋势分析数据挖掘领域。在本教程中,我将逐步解释其核心概念、数学原理实现方法(使用Python),确保内容真实可靠,基于经典统计学知识[^2]。 #### **概念部分** 多元线性回归假设因变量$y$与$p$个自变量$x_1, x_2, \ldots, x_p$之间存在线性关系。模型的基本形式为: $$ y = \beta_0 + \beta_1 x_1 + \beta_2 x_2 + \cdots + \beta_p x_p + \epsilon $$ 其中: - $y$ 是因变量(需要预测的变量)。 - $x_1, x_2, \ldots, x_p$ 是自变量(预测变量)。 - $\beta_0$ 是截距项(intercept),表示当所有自变量为零时$y$的期望值。 - $\beta_1, \beta_2, \ldots, \beta_p$ 是回归系数(coefficients),表示每个自变量对$y$的影响程度。 - $\epsilon$ 是随机误差项,假设服从均值为零、方差为$\sigma^2$的正态分布,即$\epsilon \sim N(0, \sigma^2)$。 模型的目标是通过数据估计系数$\beta_j$,使预测值尽可能接近真实值。常用方法是**最小二乘法(Ordinary Least Squares, OLS)**,它最小化残差平方(RSS): $$ \min_{\beta} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 $$ 其中$\hat{y}_i$是预测值,$n$是样本数量。OLS估计的系数具有无偏性最小方差性(在满足高斯-马尔可夫假设条件下)。 **关键特性**: - **适用场景**:当因变量与自变量之间的关系近似线性时,多元线性回归表现良好,且模型易于解释[^2]。 - **假设条件**:包括线性关系、误差项独立同分布、自变量间无多重共线性等。如果数据高度非线性,树模型(如决策树)可能更合适[^2]。 - **优势**:计算高效、可解释性强,系数直接反映变量影响方向(正/负)强度。 #### **实现方法部分** 实现多元线性回归分为数据准备、模型训练评估三步。我将使用Python的`scikit-learn`库(一个标准机器学习库)进行演示。代码基于真实数据集(示例使用Boston房价数据集),确保可复现。 **步骤1: 环境准备** 安装必要库(如未安装): ```bash pip install numpy pandas scikit-learn matplotlib ``` **步骤2: 数据加载预处理** ```python import numpy as np import pandas as pd from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared_error, r2_score import matplotlib.pyplot as plt # 加载数据集(以Boston房价数据集为例) from sklearn.datasets import fetch_openml boston = fetch_openml(name=&#39;boston&#39;, version=1) X = pd.DataFrame(boston.data, columns=boston.feature_names) # 自变量:如犯罪率、房间数等 y = boston.target # 因变量:房价 # 数据预处理:划分训练集测试集(80%训练,20%测试) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) print(f"训练集大小: {X_train.shape}, 测试集大小: {X_test.shape}") ``` **步骤3: 模型训练预测** ```python # 创建多元线性回归模型 model = LinearRegression() # 训练模型(使用训练集) model.fit(X_train, y_train) # 预测测试集结果 y_pred = model.predict(X_test) # 输出系数截距 print("回归系数:", model.coef_) # 每个自变量的系数β_j print("截距项:", model.intercept_) # β_0 ``` **步骤4: 模型评估** 评估指标包括均方误差(MSE)决定系数(R²): ```python # 计算性能指标 mse = mean_squared_error(y_test, y_pred) r2 = r2_score(y_test, y_pred) print(f"均方误差 (MSE): {mse:.2f}") print(f"决定系数 (): {r2:.2f}") # R²接近1表示模型拟合良好 # 可视化预测 vs 真实值(以第一自变量为例) plt.scatter(X_test.iloc[:, 0], y_test, color=&#39;blue&#39;, label=&#39;真实值&#39;) plt.scatter(X_test.iloc[:, 0], y_pred, color=&#39;red&#39;, label=&#39;预测值&#39;) plt.xlabel(&#39;自变量 (如犯罪率)&#39;) plt.ylabel(&#39;房价&#39;) plt.legend() plt.show() ``` **输出解释**: - **回归系数**:正系数表示自变量增加时$y$增加,负系数表示减少(例如,房间数增加可能推高房价)。 - **R²值**:范围[0,1],值越高说明模型解释力越强(一般>0.7为良好)。 - **MSE**:衡量预测误差,值越小越好。 **注意事项**: - 如果自变量间存在多重共线性(如高度相关),使用岭回归(Ridge Regression)或Lasso回归改进。 - 数据需标准化(如使用`sklearn.preprocessing.StandardScaler`)以避免尺度影响系数。 #### **总结** 多元线性回归是一种基础但强大的预测工具,适用于线性关系明显的场景。通过最小二乘法估计系数,实现简单且可解释性强[^2]。在实际应用中,结合数据探索(如散点图)模型诊断(如残差分析)能提升可靠性。完整代码可在Jupyter Notebook中运行。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值