python - MinMaxScaling 没有返回正确的值
问题描述
我有一个大数组(形状为 (125501, 34000)),我正在尝试使用 MinMaxScaling,但输出的缩放数组完全错误:
from sklearn.preprocessing import MinMaxScaler
print dataset
[[ 124 77 10743 ... 28 56 1]
[ 0 0 189 ... 0 0 0]
[ 0 0 1518 ... 0 0 0]
...
[ 1 0 0 ... 0 0 0]
[ 35 5 2 ... 0 0 0]
[ 29 8 1 ... 2 1 0]]
mx = MinMaxScaler(feature_range=(0,1))
scaled = mx.fit_transform(dataset)
print scaled
[[0.99988379 0.99997088 0.99958496 ... 0.99999933 0.99996154 0.99999913]
[0.99988374 0.99997084 0.99958004 ... 0.99999931 0.99996151 0.99999913]
[0.99988374 0.99997084 0.99958066 ... 0.99999931 0.99996151 0.99999913]
...
[0.99988374 0.99997084 0.99957995 ... 0.99999931 0.99996151 0.99999913]
[0.99988375 0.99997084 0.99957996 ... 0.99999931 0.99996151 0.99999913]
[0.99988375 0.99997084 0.99957996 ... 0.99999931 0.99996151 0.99999913]]
所有的输出值似乎都介于 0.996 和 0.999 之间,尽管显然情况并非如此。例如,每个特征的最大值是:
print mx.data_max_
[249706. 62620. 902419. ... 1475. 82652. 1879.]
与最大值 (249706) 相比,第一列有一些非常小的值(例如 124、0、35 等),但输出仍然是 ~0.999。
有谁知道为什么会这样?
解决方案
一个可能的原因可能是每个特征列中的最小值和所有其他值之间是否存在巨大差异(正如评论中提到的@Kevin Fang)。您可以尝试使用如下示例数据集:
import numpy as np
from sklearn.preprocessing import MinMaxScaler
dataset = [[150, -1000], [125, 775], [175, 700], [-1000, 725]]
print(np.array(dataset))
输入数据集:
[[ 150 -1000]
[ 125 775]
[ 175 700]
[-1000 725]]
因为数据集中每列的最小值和每列中的每个其他数字都存在差异。
mx = MinMaxScaler(feature_range=(0,1))
scaled = mx.fit_transform(dataset)
print(scaled)
输出:
[[ 0.9787234 0. ]
[ 0.95744681 1. ]
[ 1. 0.95774648]
[ 0. 0.97183099]]
除了每列的最小值(0)之外,所有其他值都很高。因此,您可能必须在处理前处理异常值(最少)。
从sklearn 文档中关于它的计算方式如下:
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))
X_scaled = X_std * (max - min) + min
推荐阅读
- react-native - 如何始终将初始屏幕推送到堆栈导航器(react-navigation@5)
- css - SVG 上的最大宽度调整大小在 Firefox 中不起作用
- yowsup - Yowsup 号码验证缺少 config.json
- python - 覆盖 sys.stdout 在 Windows 平台上的 Github 操作中立即退出 python 3
- php-7.4 - 编码使用 Laravel-Admin 导出的 CSV 文件
- salesforce - 销售人员营销云 c# api querydefinition 获取状态
- forms - 为防止表单输入的实体创建 JpaRepository
- java - Android Matomo 在多次访问中发送动作
- c++ - API/命令获取机器需要重启的原因
- reactjs - 如何在不更改先前下拉列表的值的情况下对选项下拉列表使用反应映射功能?