gpt4 book ai didi

python - scikit-learn MinMaxScaler 产生的结果与 NumPy 实现略有不同

转载 作者:太空狗 更新时间:2023-10-29 21:31:37 25 4
gpt4 key购买 nike

我将来自 preprocessing 模块的 scikit-learn Min-Max 缩放器与使用 NumPy 的“手动”方法进行了比较。但是,我注意到结果略有不同。有人对此有解释吗?

使用以下等式进行最小-最大缩放:

enter image description here

应该与 scikit-learn 相同:(X - X.min(axis=0))/(X.max(axis=0) - X.min(axis=0))

我正在使用以下两种方法:

def numpy_minmax(X):
xmin = X.min()
return (X - xmin) / (X.max() - xmin)

def sci_minmax(X):
minmax_scale = preprocessing.MinMaxScaler(feature_range=(0, 1), copy=True)
return minmax_scale.fit_transform(X)

在随机样本上:

import numpy as np

np.random.seed(123)

# A random 2D-array ranging from 0-100

X = np.random.rand(100,2)
X.dtype = np.float64
X *= 100

结果略有不同:

from matplotlib import pyplot as plt

sci_mm = sci_minmax(X)
numpy_mm = numpy_minmax(X)

plt.scatter(numpy_mm[:,0], numpy_mm[:,1],
color='g',
label='NumPy bottom-up',
alpha=0.5,
marker='o'
)

plt.scatter(sci_mm[:,0], sci_mm[:,1],
color='b',
label='scikit-learn',
alpha=0.5,
marker='x'
)

plt.legend()
plt.grid()

plt.show()

enter image description here

最佳答案

scikit-learn 单独处理每个功能。因此,您需要在取min 时指定axis=0,否则numpy.min 将是all 数组的元素,不是每列单独:

>>> xs
array([[1, 2],
[3, 4]])
>>> xs.min()
1
>>> xs.min(axis=0)
array([1, 2])

numpy.max 也是一样;所以正确的函数是:

def numpy_minmax(X):
xmin = X.min(axis=0)
return (X - xmin) / (X.max(axis=0) - xmin)

这样做你会得到一个完全匹配:

exact match

关于python - scikit-learn MinMaxScaler 产生的结果与 NumPy 实现略有不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24724717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com