- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将每个 channel (R、G、B)的图像像素值标准化到范围 [0, 1]。
#!/usr/bin/env python
import numpy as np
import scipy
from sklearn import preprocessing
original = scipy.misc.imread('Crocodylus-johnsoni-3.jpg')
scipy.misc.imshow(original)
transformed = np.zeros(original.shape, dtype=np.float64)
scaler = preprocessing.MinMaxScaler()
for channel in range(3):
transformed[:, :, channel] = scaler.fit_transform(original[:, :, channel])
scipy.misc.imsave("transformed.jpg", transformed)
服用https://commons.wikimedia.org/wiki/File:Crocodylus-johnsoni-3.jpg ,我得到以下“标准化”结果:
正如您所看到的,右侧有从上到下的线条。那里发生了什么?在我看来,正常化出了问题。如果是这样:我该如何解决它?
最佳答案
在 scikit-learn 中,形状为 (m, n) 的二维数组通常被解释为 m 个样本的集合,每个样本都有 >n 个功能。
MinMaxScaler.fit_transform()
转换每个特征,因此数组的每一列都独立于其他列进行转换。这会导致图像中出现垂直“条纹”。
看起来您打算独立缩放每个颜色 channel 。要使用 MinMaxScaler
实现此目的,请重新调整输入的形状,使每个 channel 变成一列。也就是说,如果原始图像的形状为 (m, n, 3),则在将其传递给 fit_transform()
方法之前将其 reshape 为 (m*n, 3),然后恢复形状创建转换后的数组的结果。
例如,
ascolumns = original.reshape(-1, 3)
t = scaler.fit_transform(ascolumns)
transformed = t.reshape(original.shape)
有了这个,转换
看起来像这样:
该图像看起来与原始图像一模一样,因为事实证明,在数组 original
中,每个 channel 的最小值和最大值分别为 0 和 255:
In [41]: original.min(axis=(0, 1))
Out[41]: array([0, 0, 0], dtype=uint8)
In [42]: original.max(axis=(0, 1))
Out[42]: array([255, 255, 255], dtype=uint8)
因此,在这种情况下,fit_transform 所做的就是将所有输入值统一转换为浮点范围 [0.0, 1.0]。如果其中一个 channel 的最小值或最大值不同,则变换后的图像看起来会有所不同。
<小时/>顺便说一句,使用纯 numpy 执行转换并不困难。 (我使用的是 Python 3,因此在下面,除法会自动将结果转换为浮点型。如果您使用的是 Python 2,则需要将参数之一转换为浮点型,或者使用 from __future__ 导入部门
。)
In [58]: omin = original.min(axis=(0, 1), keepdims=True)
In [59]: omax = original.max(axis=(0, 1), keepdims=True)
In [60]: xformed = (original - omin)/(omax - omin)
In [61]: np.allclose(xformed, transformed)
Out[61]: True
(该方法的一个潜在问题是,如果其中一个 channel 恒定,它将生成错误,因为这样 omax - omin
中的值之一将为 0。)
关于numpy - 为什么 MinMaxScaler 会向图像添加线条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37751717/
我正在使用从 Lynda.com 获取的 sklearn MinMaxScaler 代码来缩放预测代码的数据集。特征范围应该是 (0,1),但我注意到我的试验数据中有些列大于 1。我相信这导致我的预测
我正在尝试规范化 df 并保存列和行索引/标题。 Sym1 Sym2 Sym3 Sym4 1 1 1 1 2 8 1 3 3 2 9
现在,我的数据在一个 2 x 2 numpy 数组中。如果我要在数组上使用 MinMaxScaler fit_transform,它将逐列对其进行归一化,而我希望将整个 np 数组一起归一化。有办法吗
现在我一直在解决扩展新数据的问题。在我的方案中,我已经训练并测试了模型,所有 x_train 和 x_test 都使用 sklearn.MinMaxScaler() 进行了缩放。然后,应用于实时过程,
我有一个包含 5 个特征的数据集。其中两个特征非常相似,但不具有相同的最小值和最大值。 ... | feature 2 | feature 3 | ... ----------------------
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 去年关闭。 Improve this questio
我想使用MinMaxScaler缩放Pandas dataFrame中的某些(但不是全部)列。我该怎么做? 最佳答案 由于sklearn> = 0.20,您可以使用Column Transformer
假设我有以下数据框 +---+-----+-------+ |day| time| result| +---+-----+-------+ | 1| 6 | 0
在 sklearn 的 MinMaxScaler 的早期版本中,人们可以指定缩放器对数据进行标准化的最小值和最大值。换句话说,以下情况是可能的: from sklearn import preproc
我想将每个 channel (R、G、B)的图像像素值标准化到范围 [0, 1]。 最小示例 #!/usr/bin/env python import numpy as np import scipy
我目前正在预处理我的数据,我知道我必须使用与我的训练集和测试集相同的缩放参数。然而,当我应用 sklearn 库中的 transform 方法时,我注意到一些奇怪的事情。 我首先在训练集上使用了 pr
我有三个数据框,每个数据框都使用 MinMaxScaler() 单独缩放。 def scale_dataframe(values_to_be_scaled) values = values_t
我像这样使用 sklearn MinMaxScaler()。 from sklearn.preprocessing import MinMaxScaler sc = MinMaxScaler() tr
我想将 PySpark 的 MinMaxScalar 应用于 PySpark 数据框 df 的多列。到目前为止,我只知道如何将其应用于单个列,例如x。 from pyspark.ml.feature
我有 1320 个训练样本(海面温度),每个样本都是一个二维数组(160,320),因此最终数组的形状为(1320,160,320)。我想使用 MinMaxScaler() 将它们标准化为 0 到 1
所以,我有这个疑问,并一直在寻找答案。所以问题是当我使用时, from sklearn import preprocessing min_max_scaler = preprocessing.MinM
我根据它的列缩放了一个矩阵,如下所示: scaler = MinMaxScaler(feature_range=(-1, 1)) data = np.array([[-1, 2], [-0.5, 6]
我正在尝试使用 sklearn.preprocessing.MinMaxScaler 来缩放使用 Keras 构建的 RNN 的 y 值 from sklearn.preprocessing impo
我正在尝试使用 sklearn 中的 preprocessing 将一些数字缩放到 0 - 1 的范围内。这就是我所做的: data = [44.645, 44.055, 44.54, 44.04,
我想在多个 pandas DataFrame 上“一起”应用 MinmaxScaler。这意味着我希望缩放器对这些列中的所有数据执行,而不是对每一列单独执行。 我的 DataFrame 有 20 列。
我是一名优秀的程序员,十分优秀!