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数据标准化