python-3.x - 为什么standardscaler和normalizer需要不同的数据输入?
问题描述
我正在尝试以下代码,发现它StandardScaler(or MinMaxScaler)
和Normalizer
处理sklearn
数据的方式非常不同。这个问题使管道建设更加困难。我想知道这种设计差异是否是故意的。
from sklearn.preprocessing import StandardScaler, Normalizer, MinMaxScaler
对于Normalizer
,数据被“水平”读取。
Normalizer(norm = 'max').fit_transform([[ 1., 1., 2., 10],
[ 2., 0., 0., 100],
[ 0., -1., -1., 1000]])
#array([[ 0.1 , 0.1 , 0.2 , 1. ],
# [ 0.02 , 0. , 0. , 1. ],
# [ 0. , -0.001, -0.001, 1. ]])
对于StandardScaler
和MinMaxScaler
,数据被“垂直”读取。
StandardScaler().fit_transform([[ 1., 1., 2., 10],
[ 2., 0., 0., 100],
[ 0., -1., -1., 1000]])
#array([[ 0. , 1.22474487, 1.33630621, -0.80538727],
# [ 1.22474487, 0. , -0.26726124, -0.60404045],
# [-1.22474487, -1.22474487, -1.06904497, 1.40942772]])
MinMaxScaler().fit_transform([[ 1., 1., 2., 10],
[ 2., 0., 0., 100],
[ 0., -1., -1., 1000]])
#array([[0.5 , 1. , 1. , 0. ],
# [1. , 0.5 , 0.33333333, 0.09090909],
# [0. , 0. , 0. , 1. ]])
解决方案
这是预期的行为,因为StandardScaler
和Normalizer
服务于不同的目的。作品“StandardScaler
垂直”,因为它...
通过去除均值和缩放到单位方差来标准化 [s] 特征
[...] 通过计算训练集中样本的相关统计数据,居中和缩放在每个特征上独立发生。然后使用变换方法存储平均值和标准偏差以用于以后的数据。
而Normalizer
作品“水平”,因为它...
将[s] 个样本单独标准化为单位范数。
具有至少一个非零分量的每个样本(即数据矩阵的每一行)独立于其他样本重新缩放,以使其范数(l1 或 l2)等于 1。
请查看 scikit-learn 文档(上面的链接),以获得更多洞察力,这更好地满足您的目的。
推荐阅读
- php - 多级下拉菜单的输出
- r - 是否可以计算上周的日期值但锚定到特定日期?
- javascript - Handlebars - 从填充的数组中获取信息并显示结果
- android - 我是否需要仅为移动应用 API 后端创建 JSON Web 令牌?
- mysql - Google SQL 副本落后于 master
- javascript - Mapbox 只添加最后一个标记?
- angular - http.get() 传递 ID
- unit-testing - 在 .NET Core 中的内存数据库与 Moqing 框架
- ios - 如何在 swift 中在某些视图控制器之间正确共享变量?
- javascript - 将内容从 iframe 复制到 div