sklearn standardscaler transform VS fit_transform 输出

Posted

技术标签:

【中文标题】sklearn standardscaler transform VS fit_transform 输出【英文标题】:slearn standard scaler transform VS fit_transform output 【发布时间】:2016-08-25 20:48:43 【问题描述】:

我正在使用 sklearn 标准缩放器来规范化熊猫数据框中的某些列。虽然 fit_transform 按预期工作,但 transform 没有。这是我的工作:

non_categorical_variable = ['var1','var5']
scaler = StandardScaler()
train[non_categorical_variable] = scaler.fit_transform(train[non_categorical_variable])

而且效果很好,但这不起作用:

test[non_categorical_variable] = scaler.transform(test[non_categorical_variable])

这是错误信息:

文件“main_FM.py”,第 286 行,在 predict_first_stage 中

test[non_categorical_features] = scaler.transform(test[non_categorical_features])

TypeError: 'coo_matrix' 对象没有属性 'getitem'

现在,如果我简单地输入以下内容,一切正常并匹配。

print test[non_categorical_variable]
print scaler.transform(test[non_categorical_variable])

print type(test[non_categorical_variable])
print type(scaler.transform(test[non_categorical_variable]))

print test[non_categorical_variable].shape
print scaler.transform(test[non_categorical_variable]).shape

感谢您的帮助!

【问题讨论】:

你能模拟一些样本数据供我们测试吗? 如果你能给出这些打印语句的输出会很棒。如果您可以创建一个重现错误的最小示例,那就更好了。当您致电transform 时,它是在以前安装的scaler 上还是在新的scaler 上?这可能来自 sklearn 与 pandas 的奇怪且不完全成熟的交互(我会先将相关列完全转换为 numpy 并重新检查)。 non_categorical_features 是一个列表吗?您显示的错误并非来自缩放器(除非您已发布部分错误消息)。同样在打印语句中,您使用的是non_categorical_variable 而不是non_categorical_features 感谢您的帮助。事实上,我认为错误来自 HotOneEncoding 之后的行,但错误报告中有一个错误,并且报告了错误的行。我正在对此进行调查。如有必要,我会更新帖子或重新发布 【参考方案1】:

可能test 是一个稀疏矩阵,而train 不是。因此test[non_categorical_variable] 失败,因为稀疏矩阵不支持 gettiem 接口。

如果您使用的是 OneHotEncoder,则可以将其 sparse 参数设置为 false。

【讨论】:

以上是关于sklearn standardscaler transform VS fit_transform 输出的主要内容,如果未能解决你的问题,请参考以下文章

sklearn 笔记:数据归一化(StandardScaler)

sklearn.preprocessing.StandardScaler数据标准化

意外的结果sklearn StandardScaler

用于 R 的可训练 sklearn StandardScaler

sklearn StandardScaler 返回全零

sklearn StandardScaler 似乎无法正常工作