scikit-learn - scikit learn中MinMaxScaler中属性min_的含义
问题描述
从文档:
sklearn.preprocessing.MinMaxScaler.min_ : ndarray, shape (n_features,) 每个特征调整为最小值。
我不明白这意味着什么,也无法在其他地方找到更好的解释。
from sklearn import preprocessing
import numpy as np
x_test = np.array([[ 1., -1., 2.],
[ 2., 0., 0.],
[ 0., 1., -1.]])
scaler = preprocessing.MinMaxScaler().fit(x_test)
print(scaler.min_)
输出:
[0. 0.5 0.33333333]
所以它不仅仅是数据中观察到的最小值(实际上是data_min_)。这个 min_ 属性代表什么?
解决方案
MinMaxScaler
您可以在以下站点上找到一个很好的解释:http: //benalexkeen.com/feature-scaling-with-scikit-learn/#Min-Max-Scaler
在 scikit-learn 中,您可以:
import numpy as np
from sklearn import preprocessing
x = np.array([[1., -1., 2.],
[2., 0., 0.],
[0., 1., -1.]])
print(x)
# [[ 1. -1. 2.]
# [ 2. 0. 0.]
# [ 0. 1. -1.]]
scaler = preprocessing.MinMaxScaler().fit(x)
x_transformed = scaler.transform(x)
print(x_transformed)
# [[0.5 0. 1. ]
# [1. 0.5 0.33333333]
# [0. 1. 0. ]]
的拟合实例MinMaxScaler
在内部保存方法:
# [[ 1. -1. 2.]
# [ 2. 0. 0.]
# [ 0. 1. -1.]]
print(scaler.data_min_)
# [ 0. -1. -1.]
print(scaler.data_max_)
# [ 2. 1. 2.]
或者,您可以计算和缩放每个值numpy
:
x_plain_np = np.apply_along_axis(lambda col: (col- np.min(col)) / (np.max(col) - np.min(col)), 0, x)
print(x_plain_np)
# [[0.5 0. 1. ]
# [1. 0.5 0.33333333]
# [0. 1. 0. ]]
这是所有关于self.min_
:
data_range = data_max - data_min
self.scale_ = ((feature_range[1] - feature_range[0]) /
_handle_zeros_in_scale(data_range))
self.min_ = feature_range[0] - data_min * self.scale_
(0, 1)
是 的默认值feature_range
。在您的示例中,我们可以重现每个步骤:
第一:计算data_range
:
data_range = scaler.data_max_ - scaler.data_min_
print(data_range) # [2. 2. 3.]
第二:计算scale_
:
scale_ = ((scaler.feature_range[1] - scaler.feature_range[0]) / # 1 - 0
preprocessing.data._handle_zeros_in_scale(data_range)) # we have no zeros
print(scale_) # [0.5 0.5 0.33333333]
第三:计算min_
:
min_ = scaler.feature_range[0] - scaler.data_min_ * scale_
print(min_) # [0. 0.5 0.33333333]
我们的结果与内部结果相匹配:
print(min_) # [0. 0.5 0.33333333]
print(scaler.min_) # [0. 0.5 0.33333333]
最后我们可以使用scale_
andmin_
来转换我们的数据:
x *= self.scale_
x += self.min_
推荐阅读
- elasticsearch - Filebeat add_tags 处理器发送标签但不能在仪表板可视化中使用
- python - open_note() 缺少 1 个必需的位置参数:'docid'
- azure-data-factory-2 - 是否可以在数据工厂计划触发器/翻转窗口触发器中指定跳过日期/期间?
- .net - 从自托管 WCF 服务跟踪客户端 TLS 版本
- reactjs - Next.js 导航栏:单击来自不同的链接时突出显示不清晰
- android - ParseError at [row,col]:[66,34] 消息:-xml-names-19990114#AttributeNSNotUnique?Button&layout_column
- javascript - 如何从同名的父母中删除同名的孩子?
- xml - Ansible Xml 模块 - 从寄存器中获取带有命名空间的 xml 值
- c - stm32 Nucleo 中的 RTC 值
- flutter - 使用 CustomMarkerBitmap 创建自定义谷歌地图标记图标