在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
设置为True
和 std_
)
如果您在管道中使用规范化器,则无需担心这一点,因为您不会就地修改数据:
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 或用数据块规范化数据