多重线性回归

  • 多重线性回归内容与代码实现
  • 回归函数
  • 损失函数
  • 梯度下降
  • Sklearn 实现线性回归


多重线性回归内容与代码实现

回归函数

多重线性回归函数: 建立多个自变量与一个因变量之间的线性关系。在多重线性回归中,我们假设因变量与多个自变量之间存在线性关系,并利用给定的样本数据来确定线性关系的系数,目标是找到一组最优的系数,使得预测值与真实值之间的误差最小化。

展开式为:
线性回归检验多重中介 多重线性回归方程_线性回归检验多重中介
简化为:线性回归检验多重中介 多重线性回归方程_线性回归检验多重中介_02
代码实现:

def predict(x, w, b): 

    p = np.dot(x, w) + b     
    return p

损失函数

多重线性回归损失函数: 多重线性回归的损失函数通常使用均方误差。在多重线性回归中,我们的目标是找到一组最优的系数,使得预测值与真实值之间的误差最小化。因此,我们可以使用梯度下降法或其他优化算法来最小化损失函数,从而得到最优的系数。

公式为:
线性回归检验多重中介 多重线性回归方程_回归_03
代码实现:

def compute_cost(X, y, w, b): 

    m = X.shape[0]
    cost = 0.0
    for i in range(m):                                
        f_wb_i = np.dot(X[i], w) + b
        cost = cost + (f_wb_i - y[i])**2
    cost = cost / (2 * m)    
    return cost

梯度下降

梯度下降函数: 多重线性回归函数的梯度下降算法用于求解最小化损失函数的系数,从而建立线性回归模型。

gradient descent 整体公式为:
线性回归检验多重中介 多重线性回归方程_机器学习_04

gradient 部分公式为:
线性回归检验多重中介 多重线性回归方程_线性回归_05

代码实现:

def compute_gradient(X, y, w, b): 

    m,n = X.shape
    dj_dw = np.zeros((n,))
    dj_db = 0.

    for i in range(m):                             
        err = (np.dot(X[i], w) + b) - y[i]   
        for j in range(n):                         
            dj_dw[j] = dj_dw[j] + err * X[i, j]    
        dj_db = dj_db + err                        
    dj_dw = dj_dw / m                                
    dj_db = dj_db / m                                
        
    return dj_db, dj_dw
def gradient_descent(X, y, w_in, b_in, cost_function, compute_gradient, alpha, num_iters): 

    J_history = []
    w = copy.deepcopy(w_in)  #avoid modifying global w within function
    b = b_in
    
    for i in range(num_iters):

        dj_db,dj_dw = compute_gradient(X, y, w, b)
        w = w - alpha * dj_dw
        b = b - alpha * dj_db
      
        if i<100000:
            J_history.append( cost_function(X, y, w, b))
            
        if i% math.ceil(num_iters / 10) == 0:
            print(f"Iteration {i:4d}: Cost {J_history[-1]:8.2f}   ")
        
    return w, b, J_history

线性回归检验多重中介 多重线性回归方程_线性回归_06

Sklearn 实现线性回归

Scikit-learn(sklearn)库提供了用于线性回归模型的工具,可以通过最小化损失函数来拟合线性函数,并使用梯度下降算法调整模型参数。

具体来说,可以使用 sklearn.linear_model 模块中的 LinearRegression 类来拟合多重线性函数,我们可以创建一个 LinearRegression 类的实例,并使用 fit 方法对模型进行训练,直接得到拟合后的结果:

线性回归检验多重中介 多重线性回归方程_损失函数_07

from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston

# 加载波士顿房价数据集
boston = load_boston()
X = boston.data
y = boston.target

# 创建一个线性回归模型
lr = LinearRegression()

# 使用训练集对模型进行训练
lr.fit(X, y)

# 训练完成
# 预测新数据的房价
y_pred = lr.predict(X)

此外,我们还可以使用 sklearn.metrics 模块中的 mean_squared_error 函数来计算损失函数的均方误差(MSE);sklearn.preprocessing 模块中的 StandardScaler 类来进行特征缩放,以帮助优化梯度下降算法的性能。

from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import StandardScaler
import numpy as np

# 生成随机数据
np.random.seed(42)
X = np.random.rand(100, 3)
y = X.dot([1.5, -2, 0.5]) + 0.1 * np.random.randn(100)

# 特征缩放
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 创建线性回归模型
model = LinearRegression()

# 拟合模型
model.fit(X_scaled, y)

# 计算均方误差
y_pred = model.predict(X_scaled)
mse = mean_squared_error(y, y_pred)
print("均方误差:", mse)

# 输出模型系数
print("模型系数:", model.coef_)