Advertisement

How to build a Simple Linear Regression Model using sci

阅读量:

作者:禅与计算机程序设计艺术

1.简介

在数据分析领域中,默认情况下回归模型被视为一种常用的数据建模工具。它不仅能够预测变量之间的变化趋势,并且能够揭示变量间相互关联的具体模式。其中最基础且广泛应用的一种形式就是简单线性回归模型(simple linear regression model)。本文将深入探讨如何利用Python scikit-learn库构建并应用简单线性回归模型。

2.术语说明

数据集(Dataset)

简单线性回归模型中最基础的数据集通常包括如下三个要素:

输入变量集合:X = \{x_1, x_2,\dots,x_n\} ,其中X代表输入空间;其中自变量(input variables)指的是用于建模的特征或属性;这些自变量通常是一维或多维的连续型数据。

响应变量y等于{y₁}。该响应变量表示响应值。这些值通常是连续型数据。

  1. Observations (data points): N, 表示观测点数量。

模型参数(Model Parameters)

在简单线性回归模型中,参数取决于自变量X的变化程度。可表示为:y = b + βx。其中b和β是该模型的关键参数,在拟合数据时分别决定了直线在截距处和斜率上的值。当存在多个自变量时,则该模型的参数数量与自变量数目一致。

3. 算法原理及具体操作步骤

尽管简单线性回归模型的训练过程相对复杂一些,在训练过程中会涉及较多步骤以确保数据拟合得更为精确。为了使读者能够更好地理解这一过程,在本节中我们将详细阐述构建模型、优化方法以及评估指标的基础知识。随后将介绍利用Python scikit-learn库实现简单线性回归的具体方法。

3.1 模型建立

什么是损失函数?

在构建复杂系统的过程中,
其中最为核心的关键点就在于对系统的运行效率进行精确地量化与评估。
一般而言,在构建系统时,
我们需要先确定系统的各项性能指标并为其设定相应的评估标准。
在此基础上,
我们需要设计出一套科学合理的评价体系,并在此基础上制定相应的优化方案。
只有这样才可以确保系统能够达到最佳的工作状态并实现预期的目标。

损失函数的含义可以粗略地分为两类:

  • 训练误差(training error),即为经验风险(empirical risk),是用于衡量当前学习任务中预测结果与真实标签之间的差异的一种指标。它是评估机器学习算法性能的重要指标之一。具体而言,在分类问题中,默认情况下分类器输出的概率分布应与真实分布尽可能接近;而在回归问题中,默认情况下预测函数应尽可能逼近目标函数的真实值。然而需要注意的是,在不同配置下的学习过程可能得出相同的 training error值;此外,在实际应用中我们通常会基于测试集的结果才是更为可靠的评估依据。

泛化误差(generalization error),也被称作验证错误率或交叉验证中的留出法验证错误率(holdout validation error)。它是指模型对未见过的新数据进行预测时的表现能力评估指标。通常情况下,泛化错误率低于训练错误率是因为经过充分的训练后,在训练数据集上表现出色;然而需要注意的是,在实际应用中仅降低泛化错误并不等同于提升模型性能效果(effectiveness),因为不同测试集往往包含不同的特征分布特性。

在线性回归模型中

设其中y为实际输出变量,则\hat{y}为其基于模型的预测结果,并假设样本数量为N个数据点。在模型预测结果与真实观测之间存在差异的情况下(即预测不准确),均方误差(MSE)会相应地增大;相反地,在预测结果与真实观测高度吻合的情况下(即预测准确),均方误差则会减小。作为评估回归模型性能的关键指标之一,在没有系统偏差的前提下(即无偏估计),均方误差能够有效地反映出模型输出与真实目标之间的差距特性;同时由于其计算过程相对简单直接(易于解析求解),使得其具备了良好的解释性和应用价值;此外,在面对异常观测点时(即数据分布中出现极端情况),由于平方误差的影响被弱化(即对异常点不敏感),因此均方误差表现出了较好的鲁棒性特征

如何选择学习速率?

在模型训练的过程中,还存在一个至关重要的超参数项——即learning rate.该值决定了权重更新的大小与方向.当learning rate值过高时会导致model发散;而当learning rate值过低时则会减缓convergence的速度.同样地,在设置learning rate时过高可能引发underfitting的问题;而过低的learning rate则可能导致overfitting现象.因此,合理选择learning rate是一个非常关键的任务

如何解决欠拟合问题?

在模型训练阶段进行操作时,若模型过于简单导致出现欠拟合现象(underfitting),则其泛化误差会随着迭代次数增加而趋于减小.与此同时,训练误差会持续上升.为改善这一情况并提升模型性能,则需要采取以下措施:优化模型架构,引入正则化技术以及扩大训练数据量等策略.

通常来说,欠拟合问题可以分为三种情况:

为了实现能够充分捕捉信息的目的, 模型必须满足输入数据特性的要求. 通常情况下, 可以通过增加更多相关的属性或优化其内部架构来解决这一问题.

由于数据的多样性不足,在训练过程中需要确保数据具有更加丰富的多样性特征。通常而言,在这种情况下可以通过获取更多高质量的数据样本以及引入适当的数据噪声和缺失值来改善模型的泛化能力

训练数据中存在较大的噪声水平,则需要我们采用适当的降噪技术来处理这些问题。通常情况下,在实际应用中我们可以通过减少噪声影响或者选择更为稳定的解决方案来应对这一挑战。

一般情况下,在解决欠拟合问题时,可以通过以下几个步骤来改善模型:

通过引入其他相关的属性和关键信息的补充与整合,在现有基础上进一步提升模型的表现

  1. 采用正则化技术。正则项被定义为一种用于正规化的手段,在机器学习中被广泛应用于防止过拟合现象的发生。其通过惩罚模型的复杂度来约束权重的变化范围,在一定程度上有助于防止模型过于复杂的倾向。

  2. 采用规模更为庞大的训练数据集。在对训练数据集进行扩充后,我们可以使模型能够更好地探索不同特征之间的相互作用。

欠拟合问题的核心问题在于选择适当的模型架构,并非仅限于数据质量较高的场景

3.2 模型优化

完成模型训练后即可对模型性能进行评价。在对模型进行评价时,我们主要关注训练偏差、泛化偏差和其他相关指标。

训练误差

训练误差直接反映了模型在当前训练数据集上的性能表现。在模型进行训练的过程中:

  • 当训练误差持续下降时,
    预示着模型逐渐掌握了数据中的内在规律;
  • 相反地,
    如果观察到持续升高的误差,
    则预示着模型可能出现过拟合现象。

泛化误差

模型在面对新数据时的泛化能力由其产生的误差程度所决定。尽管泛化误差数值较低,并不能完全代表模型的完美性;实际上这仅能说明该模型对于训练集的数据具有较好的拟合效果。一旦达到这样一个优化平衡状态后,则认为该模型具备良好的稳定性特征,并可应用于实际预测任务中。

混淆矩阵(Confusion Matrix)

混淆矩阵是一个二分类任务中使用的核心工具,它不仅展示了实际值与预测值之间的匹配情况,还具体地将这些对应关系归纳为四个具体的类别。该方法采用表格形式进行呈现:分为四个具体的类别

  • True Positive(TP): 预测为正例,实际也是正例的样本数。

  • False Positive(FP): 预测为正例,实际为负例的样本数。

  • True Negative(TN): 预测为负例,实际也是负例的样本数。

  • False Negative(FN): 预测为负例,实际为正例的样本数。

对于分类器性能的评估而言, 混淆矩阵是一个关键工具。例如, 在实际数据集中, 正类样本占比高达90%. 假设模型在训练集上的性能表现优异, 这意味着模型将大部分正类样本成功分类. 在此情况下, 在混淆矩阵中左上角的位置标记着TP值. 而右下角对应的是TN值, 也就是真实阴性数量.

ROC曲线(Receiver Operating Characteristic Curve)

ROC曲线(Receiver Operating Characteristic curve)是一种广泛应用的二分类评估工具。该方法通过横轴代表假阳性率(FPR),即1-特异性;以及纵轴代表真阳性率(TPR)即敏感度来展示分类器的表现。当ROC曲线上方区域面积越大时,则表明分类器的整体性能越优;特别地,在极端情况下当曲线上升至左上方区域时,则可反映较高的灵敏度与较低的假阳性率之间的权衡关系

PR曲线(Precision Recall Curve)

该PR曲线上(即Precision Recall curve)也包括在常见的二分类性能可视化方法中。其横轴代表Recall值、纵轴代表Precision值,在图表中表现为一条从左下到右上的趋势线;当该趋势线越接近左上角时,则表明模型的查准率越高

F1 score

F1 Score represents the harmonic mean of precision and recall, serving as an overall evaluation of these two metrics. The value of the F1 Score approaches 1 when both precision and recall are high, indicating strong model performance. F1 Score can be calculated using either the F1 Measure or by computing the harmonic mean.

4. 代码实例及解释说明

本节将利用Python scikit-learn库构建基础线性回归模型,并对模型输出进行解析;随后我们通过两个实际案例来进行展示:第一案例采用数值型数据作为输入;第二案例则基于 Boston 房价数据集展开分析

4.1 用数字作为输入

复制代码
    import numpy as np
    from sklearn import datasets, linear_model
    
    # 创建随机数生成器
    np.random.seed(0)
    
    # 生成输入和输出数据
    X = np.sort(5 * np.random.rand(40, 1), axis=0)
    y = np.sin(X).ravel()
    
    # 将数据划分为训练集和测试集
    train_size = int(len(X) * 0.7)
    test_size = len(X) - train_size
    X_train, X_test = X[:train_size], X[train_size:]
    y_train, y_test = y[:train_size], y[train_size:]
    
    # 创建线性回归模型对象
    reg = linear_model.LinearRegression()
    
    # 拟合模型
    reg.fit(X_train, y_train)
    
    # 对测试数据进行预测
    y_pred = reg.predict(X_test)
    
    # 打印预测结果和评估指标
    print("Coefficients:", reg.coef_)
    print("Mean Squared Error: %.2f"
      % mean_squared_error(y_test, y_pred))
    print('Variance Score: %.2f' % r2_score(y_test, y_pred))
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

运行以上代码,可以得到如下输出:

复制代码
    Coefficients: [0.9785105]
    Mean Squared Error: 0.00
    Variance Score: 1.00
    
      
      
    
    代码解读

图形化展示模型效果:

复制代码
    import matplotlib.pyplot as plt
    
    plt.scatter(X_test, y_test, color='black')
    plt.plot(X_test, y_pred, color='blue', linewidth=3)
    
    plt.xticks(())
    plt.yticks(())
    
    plt.show()
    
      
      
      
      
      
      
      
      
    
    代码解读

4.2 用波士顿房价数据集作为输入

复制代码
    import pandas as pd
    from sklearn.datasets import load_boston
    from sklearn.linear_model import LinearRegression
    from sklearn.metrics import mean_squared_error, r2_score
    from sklearn.model_selection import train_test_split
    
    # 从数据集加载数据
    dataset = load_boston()
    features = dataset['data']
    target = dataset['target']
    feature_names = dataset['feature_names']
    
    # 分割数据集
    X_train, X_test, y_train, y_test = train_test_split(
    features, target, test_size=0.2, random_state=42)
    
    # 创建模型
    lin_reg = LinearRegression()
    
    # 拟合模型
    lin_reg.fit(X_train, y_train)
    
    # 预测结果
    y_pred = lin_reg.predict(X_test)
    
    # 评估模型
    mse = mean_squared_error(y_test, y_pred)
    r2 = r2_score(y_test, y_pred)
    
    print('Mean Squared Error:', mse)
    print('Variance Score:', r2)
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

运行以上代码,可以得到如下输出:

复制代码
    Mean Squared Error: 20.349907154831225
    Variance Score: 0.8541310636717595
    
      
    
    代码解读

图形化展示模型效果:

复制代码
    import matplotlib.pyplot as plt
    
    plt.scatter(y_test, y_pred, color='black')
    
    plt.xlabel('Actual Value')
    plt.ylabel('Predicted Value')
    plt.title('Actual vs Predicted Values')
    
    plt.plot([min(y_test), max(y_test)],
         [min(y_test), max(y_test)], 'k--', lw=4)
    
    plt.axis('equal')
    plt.show()
    
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

5. 未来发展方向

尽管简单线性回归模型的建模过程相对简单,在模型结构上仍有一些值得进一步探讨和改进的地方

多种类型的输入特征。回归模型不仅能够处理连续型自变量,并且还可以应对分类型以及顺序型等多种自变量类型。

  • 多元回归分析方法是一种用于处理多因素影响关系的数据分析技术。
    在自变量中存在多个因素时,
    我们能够应用多元回归分析方法来进行建模。
    该分析方法有助于揭示各因素之间的相互关联及其影响程度。

  • 除了均方误差之外还有其他几种常见的损失函数可以用于线性回归模型的评估。
    例如Huber损失函数(Huber loss function)。

*规范化。规范化是机器学习中的一个重要技术手段,在具体应用中通常采用惩罚函数的方式对模型进行约束以实现复杂性控制和行为规范。规范化方法通过引入惩罚项的方式约束模型复杂性的同时也能有效规范其行为进而避免过拟合现象的发生从而提升模型的泛化能力

  • 梯度下降法是一种常用的优化方法。在机器学习领域中, 梯度下降法被视为一种重要的优化技术.当处理模型训练时, 在参数空间中寻找最优解的过程中, 梯度下降法能够有效地引导模型收敛到最小值点.

贝叶斯统计学是现代统计学的重要组成部分。贝叶斯统计学是一种基于先验知识的推断方法,在处理复杂数据时表现出色;它依赖于先验信息来进行参数估计和假设检验。

全部评论 (0)

还没有任何评论哟~