在sklearn python中撤消L2规范化

Posted

技术标签:

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

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

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

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

谢谢。

【问题讨论】:

【参考方案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 用例。

以上是关于在sklearn python中撤消L2规范化的主要内容,如果未能解决你的问题,请参考以下文章

sklearn:拟合 RandomForestClassifier 或用数据块规范化数据

python中常用的九种预处理方法

sklearn 分类器管道所需的“列的有效规范”是啥?

sklearn StandardScaler 似乎无法正常工作

SQL Server 中层次结构和规范化的建议

使用现有层在 Caffe 中进行 L2 归一化