文章目录
线性回归是一种统计学方法,用于建模和分析两个变量之间的关系:一个因变量和一个或多个自变量。线性回归模型的目的是找到最佳拟合直线(在二维空间中)或超平面(在多维空间中),这条直线(或超平面)可以用来预测输出值。
1.一些基本概念
1.1基本概念
- 因变量(响应变量):你想要预测或估计的变量。
- 自变量(解释变量):用来预测因变量的变量。
- 线性关系:假设因变量和自变量之间存在线性关系。
1.2线性回归模型的形式
线性回归模型基本形式:
y=β0+β1x1+β2x2+…+βnxn+ϵ
其中:
- 𝑦y 是因变量。
- 𝑥1,𝑥2,…,𝑥𝑛x1,x2,…,xn 是自变量。
- 𝛽0β0 是截距项。
- 𝛽1,𝛽2,…,𝛽𝑛β1,β2,…,βn 是系数,表示自变量对因变量的影响。
- 𝜖ϵ 是误差项,表示模型未能解释的变异性。
1.3模型参数的估计
参数 𝛽0,𝛽1,…,𝛽𝑛β0,β1,…,βn 通常通过最小化误差项的平方和来估计,这个过程称为最小二乘法。
1.4线性回归的类型
- 简单线性回归:只有一个自变量。
- 多元线性回归:有两个或更多自变量。
1.5线性回归的假设
- 线性关系:自变量和因变量之间存在线性关系。
- 独立性:自变量之间相互独立。
- 同方差性:误差项具有恒定的方差。
- 正态分布:误差项服从正态分布。
2.一元线性回归模型
2.1一元线性回归模型表示形式
一元线性回归是线性回归的一种形式,它只涉及一个自变量和一个因变量。这种模型的目的是找到一条直线,这条直线能够最好地拟合数据点,从而可以用于预测因变量的值。
一元线性回归模型可以表示为:
𝑦=𝛽0+𝛽1𝑥+𝜖y=β0+β1x+ϵ
2.2代码实现(python)
import numpy as np
from sklearn.linear_model import LinearRegression
# 假设有一些数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 5, 4, 5])
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X, y)
# 获取截距和斜率
intercept = model.intercept_
slope = model.coef_[0]
print("截距:", intercept)
print("斜率:", slope)
# 预测
X_new = np.array([[6]])
y_pred = model.predict(X_new)
print("预测结果:", y_pred)
3.多元线性回归
3.1多元线性回归模型表示形式
多元线性回归是线性回归的一种扩展,它允许多个自变量(解释变量)来预测一个因变量(响应变量)。这种模型可以处理更复杂的数据关系,并且可以用于评估多个因素如何共同影响结果。
多元线性回归模型可以表示为:
y=β0+β1x1+β2x2+…+βnxn+ϵ
3.2代码实现(python)
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error
# 假设有一些数据
X = np.array([[1, 1], [2, 2], [3, 3], [4, 4], [5, 5]])
y = np.array([2, 4, 5, 4, 5])
# 添加截距项
X = np.hstack([np.ones((X.shape[0], 1)), X])
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 创建线性回归模型
model = LinearRegression()
# 训练模型
model.fit(X_train, y_train)
# 预测
y_pred = model.predict(X_test)
# 评估模型
r2 = r2_score(y_test, y_pred)
mse = mean_squared_error(y_test, y_pred)
print("R-squared:", r2)
print("Mean Squared Error:", mse)
# 获取截距和系数
intercept = model.intercept_
coefficients = model.coef_
print("截距:", intercept)
print("系数:", coefficients)