AI 基础知识从0.1到0.2——用“房价预测”入门机器学习全流程 - 学习笔记

原文链接:AI 基础知识从0.1到0.2——用“房价预测”入门机器学习全流程

AI 基础知识从0.1到0.2——用“房价预测”入门机器学习全流程

  1. 按照以下流程来训练一个预测房价的回归任务:
    1. 需求分析 → 明确目标、指标、资源。
    2. 数据收集 → EDA、清洗、预处理。
    3. 划分数据集 → 训练集 / 验证集 / 测试集。
    4. 特征工程 → 特征选择、生成、转换。
    5. 模型选择 → 基于任务和数据选择候选模型。
    6. 训练与调优 → 基线训练、超参数调优。
    7. 模型评估 → 测试集评估、误差分析。
    8. 优化改进 → 数据、特征、模型层面的迭代。
    9. 部署与监控 → 服务化部署、性能监控、文档记录。
    10. 反馈与迭代 → 根据反馈持续改进。

一、需求分析

  1. 目标:房价预测需求的目标是根据房屋的一些特征(如面积、房间数量等),预测房屋的价格。
  2. 指标:这里我们采用均方误差(MSE)来衡量模型预测效果的标准,它是预测值与真实值差值平方的平均值,值越小说明模型预测越准确。
    1. 衡量模型预测结果与真实结果之间差异的函数被称之为损失函数,使用 MSE 会带来两个好处:
      1. 消除正负号的影响,让误差 “绝对值化”,防止求和之后误差互相抵消;
      2. 放大误差便于模型优化,例如误差为 3 和 0.4,平方后变为 9 和 0.16,差异更明显。
  3. 资源:包括使用的数据集、编程语言、库和框架等;
    1. 数据集:kaggle 公开的房价数据集。
    2. 工具:Python 编程语言,使用 pandas、numpy、scikit-learn 等库。
    3. 计算资源:个人电脑即可完成,数据量不大。

二、数据收集

  1. 获取数据并进行初步的探索性数据分析(EDA),了解数据的基本情况,并进行必要的清洗和预处理;
    1. 下载数据集:前往 Kaggle 竞赛页面下载 train.csv 和 test.csv 文件。
    2. 加载数据:使用 pandas 加载数据集。
    3. 探索数据:查看数据的基本信息、统计描述,以及缺失值情况。
    4. 可视化:了解目标变量(房价)及其与各特征的关系。
  2. pandas 是一个数据分析库,提供了大量的数据结构和函数,用于高效地处理和分析结构化数据。
  3. Matplotlib 是 Python 广泛应用的绘图库,可以创建各式各样的静态、动态及交互式可视化图形。
  4. Seaborn 是基于 Matplotlib 的数据可视化库,提供更高级的统计图形接口,能够创建统计图形。

三、划分数据集

  1. 划分数据集
    1. 训练集:训练集是用于训练模型的数据,一般占总数据集的 60%-80%。
    2. 验证集:验证集不参与模型的训练,而是用来评估模型在未见过的数据上的表现,一般占总数据集的 10%-20%。
    3. 测试集:模拟真实世界的未知数据,用于最终评估模型的泛化能力,一般占总数据集的 10%-20%。
  2. sklearn 是一个数据分析库,提供了大量的数据结构和函数,用于高效地处理和分析结构化数据;

四、特征工程

  1. 特征工程是提升模型性能的重要步骤,涉及选择有用的特征、生成新特征以及对特征进行转换。Kaggle的 House Prices 数据集包含大量有用的特征,其中既有数值型特征,也有类别型特征。我们对数据做几个处理:
    1. 处理缺失值:
      1. 对于类别型特征,使用**众数(出现次数最多的值)**进行填充。
      2. 对于数值型特征,使用中位数进行填充。
    2. 编码类别变量:
      1. 使用 One-Hot 编码将类别型特征转换为数值型。
        1. One-Hot 编码是将类别型变量转换为数值型变量的一种常用方法,它会为每个类别创建一个新的二进制列,该列的值为 1 表示该样本属于该类别,为 0 表示不属于该类别。
      2. 使用 align 确保训练集和验证集具有相同的特征,缺失的特征填充为 0。
    3. 特征缩放:
      1. 使用 StandardScaler 对数值型特征进行标准化,使其具有均值为 0,标准差为 1 的分布,有助于模型更好地收敛。
      2. 特征缩放是对数据集中的特征进行转换,使得不同特征的取值范围大致相同。例如一个特征的取值范围在 0~10 之间,而另一个特征的取值范围在 1000~10000 之间,通过特征缩放可以将这些特征的取值范围调整到相近的区间,从而使模型能够更加公平地对待每个特征。

五、模型选择

拟合

  1. 拟合(Fitting)是机器学习和统计学中的一个基本概念,指的是构建一个模型,使其能够准确地描述或预测给定数据集中的模式和关系
    1. 欠拟合(Underfitting):模型在训练数据和测试数据上都表现不佳,通常是由于模型过于简单,无法捕捉数据中的潜在模式。
    2. 过拟合(Overfitting):模型在训练数据上表现良好,但在未见过的测试数据上表现较差,通常是由于模型过于复杂,捕捉到了数据中的噪声,只是记忆了训练数据本身,没有找到背后的模式规律。
  2. 泛化与拟合相对的概念,模型的泛化能力是用来衡量模型在训练数据以外数据上表现的指标,一个具有良好泛化能力的模型不仅能准确拟合训练数据,还能有效地预测和处理新的、看不见的数据。

模型复杂度

  1. 模型复杂度是一个用来衡量机器学习模型在结构、参数等方面复杂程度的指标,用来反映模型对数据的拟合与泛化之间的平衡关系
    1. 通常来讲复杂度低的模型容易欠拟合,复杂度高的模型容易过度拟合训练数据中的噪声和细节,泛化能力差。
  2. 为了获得良好的泛化性能,需要在模型复杂度和过拟合、欠拟合之间找到一个平衡
    1. 当模型复杂度太低时候,训练误差和验证误差都很大,模型欠拟合;
    2. 当训练误差越来越小但验证误差越来越大时候,意味着模型已经过拟合,而验证误差开始上升的点是我们想要的模型。
    3. 通常可以使用交叉验证、正则化等方法来调整模型复杂度,选择合适的模型结构和参数,使模型在训练数据上能够充分学习到数据的规律,同时在新数据上也具有较好的泛化能力。

image.png

正则化

  1. 正则化是用于防止模型过拟合、提高模型泛化能力的技术,通常过拟合是因为模型复杂,学习到了训练数据中的噪声和细节,而不是数据的真实规律。
  2. 正则化的**基本思想是在模型的损失函数中添加一个正则化项,对模型的复杂度进行惩罚,从而限制模型的参数取值范围,使得模型更加简单平滑,减少对训练数据的过拟合。有两种常见的正则化类型:
    1. L1 正则化(Lasso 正则化):在损失函数中添加参数绝对值之和作为正则化项,具有特征选择的作用,它会使一些参数变为零,从而可以自动筛选出对模型重要的特征,减少模型的复杂度。
    2. L2 正则化(岭回归):在损失函数中添加参数平方和作为正则化项,会使参数的值变小,但不会使参数变为零。它可以防止模型的参数过大,使得模型更加稳定,减少过拟合的风险。

决策树与随机森林

  1. 决策树是一种基于树形结构的模型。在模型中,每个内部节点表示一个特征的判断,每个分支代表判断结果,而每个叶子节点则给出最终的预测或决策。
    1. 比如预测一张图片内的动物是否为 dog,每个叶子都包含一组可能的物种中的一种动物物种。 image.png
  2. 构建决策树主要是对每个候选特征,尝试找出一个分裂标准或阈值,使得数据依据这个特征被分成两个或多个子集后,子集内的样本更加同质,对于回归问题,通常使用 MSE 的降低量作为评价指标。
    1. 这一过程是递归的,从根节点开始,直到满足一定的停止条件。建成整棵树后,可以通过剪枝技术进一步简化模型,剪除对总模型预测贡献不大的分支,从而提高模型对新数据的泛化能力。
  3. 随机森林通过构建并结合多个决策树的预测结果,以获得更加稳定和准确的最终结果。
    1. 主要构建过程是:
      1. 从原始训练集随机地抽取若干子样本,建立多个数据集。
      2. 在每个节点进行分裂时,不是考查所有特征,而是从随机选择的一部分特征中选择最佳分裂点
      3. 训练完毕后,对于新的输入数据,每棵树给出一个预测,然后通过**多数投票(或平均)**的方式来决定最终结果。
    2. 这种随机性和多个模型的结合,使得随机森林在应对高维数据和具有噪声的数据时,通常比单一决策树有更好的泛化能力。
  4. LinearRegression:是一种基本的线性回归模型,它通过 MSE 来拟合数据,从而找到最优的回归系数。
  5. Ridge:是线性回归的一种扩展,也称为岭回归,它在普通线性回归的基础上增加了一个 L2 正则化,可以有效防止模型过拟合。
  6. RandomForestRegressor:是一种基于决策树的集成学习模型,通过构建多个决策树并对它们的预测结果进行平均来进行回归预测。随机森林可以处理高维数据,具有较好的泛化能力和抗过拟合能力。

六、训练与调优

  1. 训练与调优的主要过程:首先训练基线模型,然后通过调整超参数提升模型性能,使用交叉验证防止过拟合;
    1. 训练基线模型:训练线性回归、岭回归和随机森林模型。
    2. 评估基线模型:使用验证集评估每个模型的均方误差(MSE)。
    3. 超参数调优:使用 GridSearchCV 对随机森林模型的超参数进行网格搜索,寻找最佳参数组合。
  2. 基线模型是指在进行模型改进和优化之前,建立的一个简单、基础的模型。这个模型通常使用默认的参数设置和较为常规的方法构建,作为后续模型改进的参考标准;
  3. 模型参数(权重和偏置)是在训练过程中通过数据自动学习得到的;
  4. **超参数(Hyperparameter)**是指在模型训练开始前,由用户预先设置的参数,用于控制整个训练过程和模型结构,是开发者根据经验、实验或者一些启发式方法在模型训练之前手动设置的;
    1. 常见的超参数包括:
      1. 学习率(Learning Rate):控制模型的权重更新幅度。学习率过大可能导致模型不稳定,过小则可能导致收敛速度过慢。
      2. 正则化参数:例如 L1 或 L2 正则化,用于控制模型复杂度和防止过拟合。
      3. 批次大小(Batch Size):每次训练模型时使用的数据样本数量。较大的批次可以提高训练效率,但可能需要更多的内存。
      4. 隐藏层数量和单元(Hidden Layers and Units):在神经网络中决定架构的复杂性。
      5. 决策树的最大深度(Max Depth of Decision Tree):限制树的最大层数,以防止过拟合。
  5. 交叉验证是一种评估和选择模型的技术,用于防止模型过拟合以及更准确地评估模型的性能。其基本思想:
    1. 交叉验证通过把数据集划分成多个子集,让每个子集都轮流作为验证集,其余的数据作为训练集,从而可以对模型在不同数据划分下的表现进行充分的评估。
  6. GridSearchCV 是 scikit-learn 库中用于超参数调优的工具,其主要作用是帮助你自动遍历预定义的超参数组合,通过交叉验证(Cross Validation)来寻找最佳的参数设置,从而优化模型性能。
    1. 根据提供的参数字典,生成所有可能的参数组合。如果有两个超参数,每个都有三个候选值,那么最终会有 3 × 3 = 9 种组合。
    2. 对于每一种超参数组合,GridSearchCV 都会使用交叉验证在训练数据上进行评估。
    3. 比较所有超参数组合对应的评估指标,根据指定的评分标准(如准确率、F1 分数、均方 MSE 等)选择出表现最好的超参数组合。

七、模型评估

  1. 在选择最优模型后,使用验证集进行最终评估,并进行误差分析以了解模型的不足。
  2. RMSE 是“均方根误差”,也就是 MSE 的平方根,其单位与目标变量的原始单位一致,可以更直观地反映了预测误差的平均水平。

八、优化改进

  1. 基于评估结果,可以从数据、特征和模型多个层面进行优化:
    1. 数据层面:
      1. 获取更多数据:采集更多相关数据,提升模型的泛化能力。
      2. 处理异常值:识别并处理数据中的异常值,以减少其对模型的负面影响。
    2. 特征层面:
      1. 生成新特征:如房屋总面积、房屋价值比率等。
      2. 特征选择:去除低相关性或冗余的特征,简化模型。
      3. 特征转换:对数变换、Box-Cox变换等,处理偏态分布的特征。
    3. 模型层面:
      1. 尝试其它模型:如梯度提升树(XGBoost、LightGBM)、支持向量机(SVM)等。
      2. 进一步超参数调优:扩展搜索范围或使用更高级的搜索方法(如随机搜索、贝叶斯优化)。
      3. 集成方法:结合多个模型的预测结果,提升整体性能。
  2. 可以通过三个手段优化模型:
    1. 生成新特征:通过组合现有特征生成新的特征,如总房间数,可能提升模型的表现。
    2. 特征选择:通过相关性分析选择与目标变量高度相关的特征,减少模型复杂度,提升性能。
    3. 重新训练模型:使用优化后的特征集重新训练随机森林模型,并评估其性能。

九、部署与监控

  1. 一旦模型表现满意,就可以将其部署为服务,使其能够接受新数据并返回预测结果。同时,建立监控机制,确保模型在实际应用中的性能。使用 **joblib **将训练好的模型和 Scaler 持久化保存,以便在 API 中加载使用。

十、反馈与迭代

  1. 部署后的模型需要持续监控其表现,并根据实际反馈进行改进。
    1. 监控模型性能:定期评估模型在新数据上的表现,确保其准确性。
    2. 数据更新:随着时间推移,数据分布发生变化,需要定期更新训练数据以保持模型的有效性。
    3. 迭代优化:基于监控和反馈结果,进行特征工程、模型调整或选择新模型
0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
反正没人会看
下载 APP