8 python scaling numpy normalization scikit-learn
我将scikit-learn Min-Max定标器与其preprocessing模块与使用NumPy的"手动"方法进行了比较.但是,我注意到结果略有不同.有没有人对此有解释?
使用以下等式进行最小 - 最大缩放:

这应该与scikit-learn one相同: (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)
Run Code Online (Sandbox Code Playgroud)
在随机样本上:
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
Run Code Online (Sandbox Code Playgroud)
结果略有不同:
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()
Run Code Online (Sandbox Code Playgroud)

beh*_*uri 12
scikit-learn单独处理每个功能.因此,您需要指定axis=0何时进行min,否则numpy.min将是数组的所有元素上的min ,而不是每个列分别:
>>> xs
array([[1, 2],
[3, 4]])
>>> xs.min()
1
>>> xs.min(axis=0)
array([1, 2])
Run Code Online (Sandbox Code Playgroud)
同样的事情numpy.max; 所以正确的功能是:
def numpy_minmax(X):
xmin = X.min(axis=0)
return (X - xmin) / (X.max(axis=0) - xmin)
Run Code Online (Sandbox Code Playgroud)
这样做你将获得完全匹配:

| 归档时间: |
|
| 查看次数: |
6998 次 |
| 最近记录: |