Scikit learn 关于标准化和缩放的问题

Scikit learn 关于标准化和缩放的问题,scikit-learn,regression,scaling,sklearn-pandas,Scikit Learn,Regression,Scaling,Sklearn Pandas,我正在尝试生成一个模型,该模型使用一个分子的几个物理化学性质(包括原子数、环数、体积等)来预测数值Y。我想使用PLS回归,我知道标准化在这里非常重要。我正在用Python编程,使用scikit学习。功能的类型和范围各不相同。一些是int64,而另一些是浮动的。某些特征通常具有较小的值(正值或负值),而其他特征的值非常大。我尝试过使用各种定标器(例如标准定标器、规格化、最小-最大定标器等)。然而,R2/Q2仍然很低。我有几个问题: 是否有可能通过缩放,一些非常重要的特征失去其重要性,从而对解释响应

我正在尝试生成一个模型,该模型使用一个分子的几个物理化学性质(包括原子数、环数、体积等)来预测数值Y。我想使用PLS回归,我知道标准化在这里非常重要。我正在用Python编程,使用scikit学习。功能的类型和范围各不相同。一些是int64,而另一些是浮动的。某些特征通常具有较小的值(正值或负值),而其他特征的值非常大。我尝试过使用各种定标器(例如标准定标器、规格化、最小-最大定标器等)。然而,R2/Q2仍然很低。我有几个问题:

  • 是否有可能通过缩放,一些非常重要的特征失去其重要性,从而对解释响应变量的方差贡献较小
  • 如果是,如果我(根据专家知识)确定了一些重要功能,是否可以扩展除这些功能以外的其他功能?还是只缩放重要功能
  • 与其他特征(例如-1到10)相比,某些特征虽然不总是相关,但其值在类似范围内(例如100-400)。是否可以仅缩放同一范围内的特定特征组
  • 失去意义?对贡献更少?没有
  • 不,不好。要么全有,要么什么都没有
  • 不。缩放的目的不是减少/增加变量的显著性/效果。它是将所有变量转换为一个可以解释的通用尺度

  • 缩放的整体思想是使模型对特征空间的分析更具鲁棒性。例如,如果您有
    2
    特征,如
    5 Kg
    5000 gm
    ,我们知道这两个特征是相同的,但对于某些算法,它们对度量空间
    敏感,如
    KNN
    PCA
    等,它们将更倾向于第二个特征,因此必须对这些算法进行缩放

    现在来问你的问题

  • 缩放不会影响特征的重要性。如上所述,它有助于更好地分析数据
  • 不,你不应该这样做,原因如上所述
  • 如果希望在模型中包含领域知识,可以将其用作先验信息。简而言之,对于线性模型,这与正则化相同。它有很好的特点。如果您认为,您有许多
    无用的特征
    ,您可以使用
    L1
    正则化,它在特征空间上创建
    稀疏
    效果,这只不过是为无用的特征分配
    0
    权重。这是你的链接

  • 还有一点,基于树的方法不需要缩放,最后,它主要取决于您选择的模型。

    感谢您的回答和建议。我听说过块缩放(见3),但我真的对这个想法感到困惑。除此之外,我还使用了scikit learn,它提供了一个PLSRegression类。该类实现了NIPALS算法,每个对象都提供了一个定标器。因此,基本上,您可以在内部进行扩展。我还没有弄清楚这里使用的确切的缩放类型。我的问题是,在我已经使用自定义标准化器对外缩放数据之后,启用训练集的内部缩放是否有意义?一些算法更喜欢不同的缩放方法,让它完成它的工作。对于exp,您使用了std_scaler,现在数据的平均值为
    0
    ,var为
    1
    。所以它也是带有负值的高斯分布。但有些算法更喜欢min-max,它的数据范围是
    (0,1)
    ,它将以所需的形式对其进行缩放。最后,它不会影响数据。谢谢。我明白这一点。我在一些例子中比较了R2/Q2,启用这两种缩放操作并不一定有帮助。谢谢你的回答。