1. 特征工程

解读下面的代码

scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 1. Single variable feature selection (SelectKBest)
select_k_best = SelectKBest(f_regression, k=7)
X_k_best = select_k_best.fit_transform(X_scaled, y)

# 2. Model-based feature selection (Random Forest)
rf = RandomForestRegressor()
rf.fit(X_scaled, y)
importances = rf.feature_importances_

# 3. Recursive Feature Elimination
rfe = RFE(estimator=RandomForestRegressor(), n_features_to_select=7)
X_rfe = rfe.fit_transform(X_scaled, y)

# 4. Principal Component Analysis (PCA)
pca = PCA(n_components=7)
X_pca = pca.fit_transform(X_scaled)

1.1 常用方法

这段代码展示了四种不同的特征选择方法,用于预处理或改进机器学习模型的性能。每种方法都有其独特的特点和用途。以下是对每个步骤的解读:

  1. 数据标准化:

    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    

    这里使用了StandardScaler对特征数据X进行标准化。标准化是指减去平均值并除以标准差,使得处理后的数据符合标准正态分布(均值为0,标准差为1)。这是预处理数据的常见步骤,特别是在使用涉及距离计算的算法时。

  2. 单变量特征选择(SelectKBest):

    select_k_best = SelectKBest(f_regression, k=7)
    X_k_best = select_k_best.fit_transform(X_scaled, y)
    

    这里使用SelectKBest方法结合f_regression函数选择与目标变量y相关性最高的7个特征。这种方法单独评估每个特征与目标变量之间的关系。

  3. 基于模型的特征选择(随机森林):

    rf = RandomForestRegressor()
    rf.fit(X_scaled, y)
    importances = rf.feature_importances_
    

    在这部分代码中,使用随机森林回归模型RandomForestRegressor来评估特征的重要性。模型训练后,可以通过feature_importances_属性获取每个特征的重要性评分。

  4. 递归特征消除(RFE):

    rfe = RFE(estimator=RandomForestRegressor(), n_features_to_select=7)
    X_rfe = rfe.fit_transform(X_scaled, y)
    

    RFE(递归特征消除)是一种特征选择方法,它递归地考虑越来越小的特征集来选择特征。在这里,使用随机森林回归器作为基础估计器,选取7个最重要的特征。

  5. 主成分分析(PCA):

    pca = PCA(n_components=7)
    X_pca = pca.fit_transform(X_scaled)
    

    PCA是一种用于降维的技术,通过将数据转换到新的坐标系来减少数据的维度(特征数量)。在这里,PCA被用来将数据转换成7个主成分。

总的来说,这段代码展示了数据标准化和四种不同的特征选择/降维技术,这些方法通常用于数据预处理,以提高机器学习模型的性能和准确性。

1.2 这些方法有没有考虑特征间的相关度

上述特征选择方法的考虑对特征间相关性的关注程度各不相同:

  1. 单变量特征选择(SelectKBest):

    • SelectKBest方法进行特征选择时,不考虑特征间的相关性。
    • 它独立地评估每个特征与目标变量的相关性或重要性,但不考虑特征之间的相互作用或依赖性。
    • 这可能导致选择多个高度相关的特征,忽视了特征间的冗余性。
  2. 基于模型的特征选择(随机森林):

    • 随机森林在评估特征重要性时,能够捕捉特征间的非线性关系和相互作用。
    • 但是,随机森林不会显式地优化或减少特征间的相关性。它的重点是特征对模型性能的贡献,而不是特征之间的关系。
  3. 递归特征消除(RFE):

    • RFE递归地从模型中移除特征,基于模型性能来选择特征。
    • 它可能间接地考虑特征间的相关性,特别是当使用能够捕捉特征间复杂关系的模型(如随机森林)时。
    • 然而,RFE本身不专门针对减少特征间的相关性。
  4. 主成分分析(PCA):

    • PCA旨在减少数据集的维数,同时保留尽可能多的信息。
    • 它通过将原始特征转换为新的正交特征(主成分)来减少特征间的线性相关性。
    • PCA是这些方法中唯一一个显式地关注并减少特征间相关性的方法,但这种关注是限于线性关系的。

综上所述,除了PCA外,其他方法主要关注特征与目标变量的关联性,而不是特征间的相互关系。PCA是这些方法中唯一直接考虑减少特征间相关性的方法,但其仅限于处理线性相关。如果特征间的相关性是一个关键考虑因素,可能需要采用其他方法或结合多种方法来更全面地处理特征选择问题。

模型精度低

当模型的准确率停留在某个水平时,可以尝试几种方法来提高性能。以下是一些可能的策略:

  1. 更多的特征工程

    • 创建新特征:可以从现有数据中创造出新的特征。例如,可以通过组合、分解或转换现有特征来创建新的特征。
    • 特征选择:使用更高级的特征选择方法,如基于模型的特征选择或递归特征消除(RFE),来识别最重要的特征。
  2. 调整模型参数

    • 对于 XGBoost 和 LightGBM,可以调整各种超参数,如 learning_ratemax_depthn_estimatorssubsamplecolsample_bytree 等。
    • 使用交叉验证(如 GridSearchCV 或 RandomizedSearchCV)来寻找最优参数。
  3. 尝试不同的模型

    • 除了梯度提升机之外,还可以尝试其他高级模型,如深度学习模型。
    • 使用模型集成方法,如堆叠(Stacking)或投票(Voting),将多个模型的预测结果结合起来。
  4. 数据预处理和清洗

    • 确保数据没有错误或异常值,这些可能会对模型性能产生不利影响。
    • 如果适用,尝试不同的数据转换方法,如对数转换或 Box-Cox 转换。
  5. 更详细的错误分析

    • 检查模型在哪些类型的样本上表现不佳,并尝试理解原因。
    • 根据错误分析的结果调整特征工程或模型选择。
  6. 调整类别不平衡

    • 如果目标变量的类别非常不平衡,考虑使用过采样(如 SMOTE)或欠采样技术来平衡类别。
    • 使用适合处理不平衡数据的模型和评估指标。
  7. 增加数据量

    • 如果可能的话,获取更多数据可以帮助提升模型性能。

在尝试这些方法时,请注意,提升模型性能的过程通常需要多次尝试和调整。每次调整后,都需要重新评估模型,以确保改进是有效的。

11-22 08:05