博客摘录「 B.【机器学习实践系列二】数据挖掘-二手车价格交易预测(含EDA探索、特征工程、特征优化、模型融合等)」2023年4月15日

 原博客地址:

B.【机器学习实践系列二】数据挖掘-二手车价格交易预测(含EDA探索、特征工程、特征优化、模型融合等)_汀、人工智能的博客-CSDN博客icon-default.png?t=N2N8https://blog.csdn.net/sinat_39620217/article/details/130127123以下是我的一些整理和启发

数据查看

在进行数据挖掘之前,首先需要深入了解数据集的基本情况。我们都知道特征工程包括异常值处理、缺失值填充、归一化、规范化等操作,但实际上,并不是所有数据集都需要进行这些处理。我们需要根据数据集的具体情况进行分析,找出最合适的处理方法。

首先,我们可以使用pandas库来读取数据并生成一个dataframe数据类型。这里有一些方法可以用来查看数据的概况,例如通过查看统计描述、绘制箱线图等。异常值可能是偏离均值的点,缺失值也可能是0,需要根据具体情况来分析。

Train_data.info()  # 查看数据基本信息,可通过此方法来直接判断NaN是否存在

Train_data.describe()  # 查看数据的统计信息,根据方差和最大值最小值来判断异常值,也可以来判断是否#需要进行归一化

 特征工程

接下来,我们可以进行特征工程。在此之前,通常需要进行数据可视化来进行经验判断,然后再进行特征选择。特征工程包括以下几个方面:

  1. 数据预处理:清洗、填充缺失值、去除异常值、数据类型转换等。
  2. 特征提取:从原始数据中提取有用的信息。例如,从文本数据中提取词频、n-gram,从图像数据中提取颜色、纹理特征等。
  3. 特征构建:创建新的特征,例如组合现有特征、创建多项式特征、时间序列数据的移动平均等。
  4. 特征编码:将类别特征(如性别、职业)转换为数值型特征,例如独热编码、标签编码、二进制编码等。
  5. 特征缩放:将特征缩放到相同的尺度,如归一化、标准化、最大最小缩放等。
  6. 特征选择:从全部特征中挑选最有预测能力的特征子集,如基于相关性、基于信息增益、递归特征消除、LASSO正则化等。
  7. 降维:减少特征维数,以便于数据可视化和降低计算复杂度。常用方法有主成分分析(PCA)、线性判别分析(LDA)、t-分布邻域嵌入(t-SNE)等。

需要注意的是,在进行特征工程时,不仅要对训练集进行处理,还要对测试集进行相同的处理。

 模型训练与集成

解析原文代码:使用xgb进行五折交叉验证

# 导入分层k折交叉验证类
from sklearn.model_selection import StratifiedKFold

# 实例化一个分层k折交叉验证对象,指定分为5个子集,打乱数据,设置随机种子为0
sk = StratifiedKFold(n_splits=5, shuffle=True, random_state=0)

# 初始化两个列表,用于存储训练集和验证集上的平均绝对误差
scores_train = []
scores = []

# 使用分层k折交叉验证方法,将数据集划分为训练集和验证集
for train_ind, val_ind in sk.split(X_data, Y_data):
    # 提取训练集数据
    train_x = X_data.iloc[train_ind].values
    train_y = Y_data.iloc[train_ind]

    # 提取验证集数据
    val_x = X_data.iloc[val_ind].values
    val_y = Y_data.iloc[val_ind]

    # 用XGBoost模型拟合训练数据
    xgr.fit(train_x, train_y)

    # 对训练集和验证集进行预测
    pred_train_xgb = xgr.predict(train_x)
    pred_xgb = xgr.predict(val_x)

    # 计算训练集和验证集上的平均绝对误差
    score_train = mean_absolute_error(train_y, pred_train_xgb)
    scores_train.append(score_train)
    score = mean_absolute_error(val_y, pred_xgb)
    scores.append(score)

StratifiedKFold函数的IPO:

  • 输入(Input):数据集的特征(X_data)和标签(Y_data),折数(n_splits),是否打乱数据(shuffle),随机种子(random_state)。
  • 处理(Process):根据指定的参数对数据集进行分层k折划分。
  • 输出(Output):返回一个生成器,其中包含每次划分的训练集和验证集的索引。

所以我们在进行交叉验证,只需要定义一个对象,设置好k折,接着可以调用split来得到每次交叉的数据集列表。

循环的工作:

  1. 使用分层k折交叉验证方法将数据集划分为训练集和验证集。
  2. 用XGBoost模型拟合训练数据。
  3. 对训练集和验证集进行预测。
  4. 计算训练集和验证集上的平均绝对误差,并将误差分别添加到scores_train和scores列表中。

需要注意的是,这一步涉及到模型的具体超参数,我们需要人为调整这些参数,并使用交叉验证来评估模型参数的效果。

模型训练

在模型训练阶段,可以将模型定义和模型训练分开编码。先进行模型评估,当参数合适时,再使用整个数据集进行模型训练。这是调参的基本思路。

由于本例中使用了两个模型准备进行集成,因此需要对两个模型进行相同的训练操作。

最后,可以进行简单的模型加权融合。由于基模型较少,可以直接进行加权融合。集成学习方法有很多种,这里采用的是boosting方法。尽管使用了较强的模型,AdaBoost也是一个可行的选择。在这里值得思考的是将bagging与boosting结合起来,因为它们处理的对象不同:boosting主要处理特征,而bagging主要处理样本。如果数据量足够大,这种结合可能会提高预测效果。

总之,在进行数据挖掘时,我们需要根据数据集的具体情况来进行特征工程、模型训练和集成。在这个过程中,我们要关注模型的参数调整和训练效果,以便于获得最佳的预测结果。同时,探索不同的集成学习方法,如将bagging和boosting结合起来,也是值得尝试的方向。

猜你喜欢

转载自blog.csdn.net/qq_62862258/article/details/130176692
今日推荐