【问题标题】:Undo L2 Normalization in sklearn python在sklearn python中撤消L2规范化
【发布时间】:2016-08-04 06:28:19
【问题描述】:

一旦我使用 sklearn l2 归一化器对数据进行归一化并将其用作训练数据: 如何将预测输出转回“原始”形状?

在我的示例中,我使用标准化的房价作为 y,使用标准化的居住空间作为 x。每个用于拟合自己的 X_ 和 Y_Normalizer。

因此y_predict也处于标准化形状,我如何变成原始原始货币状态?

谢谢。

【问题讨论】:

    标签: python machine-learning scikit-learn normalization standardized


    【解决方案1】:

    如果您谈论的是sklearn.preprocessing.Normalizer,它可以标准化矩阵线,不幸的是,除非您将它们手动存储在某个地方,否则无法恢复原始规范。

    如果您使用sklearn.preprocessing.StandardScaler,它对进行规范化,那么您可以获得返回该缩放器属性所需的值(mean_,如果with_mean设置为Truestd_)

    如果您在管道中使用规范化器,则无需担心这一点,因为您不会就地修改数据:

    from sklearn.pipeline import make_pipeline
    from sklearn.preprocessing import Normalizer
    
    # classifier example
    from sklearn.svm import SVC
    
    pipeline = make_pipeline(Normalizer(), SVC())
    

    【讨论】:

      【解决方案2】:

      非常感谢您的回答,我之前不知道管道功能

      对于 L2 标准化的情况,您可以手动进行。 这是一个小数组的示例:

      x = np.array([5, 8 , 12, 15])
      
      #Using Sklearn
      normalizer_x = preprocessing.Normalizer(norm = "l2").fit(x)
      x_norm = normalizer_x.transform(x)[0]
      print x_norm
      
      >array([ 0.23363466,  0.37381545,  0.56072318,  0.70090397])
      

      或者用平方和的平方根的权重手动做:

      #Manually
      w = np.sqrt(sum(x**2))
      x_norm2 = x/w
      print x_norm2
      
      >array([ 0.23363466,  0.37381545,  0.56072318,  0.70090397])
      

      因此,将它们“返回”为原始甲酸盐很简单,只需乘以“w”即可。

      【讨论】:

      • 是的,当然你可以手动完成。然后有可能保持规范。但是问题变成了用例是什么,因为它似乎不适合典型的 sklearn 用例。
      猜你喜欢
      • 2015-12-29
      • 1970-01-01
      • 2019-12-21
      • 2015-05-20
      • 2015-12-27
      • 2011-01-01
      • 2014-02-17
      • 2010-09-12
      • 2021-03-09
      相关资源
      最近更新 更多