我使用scikit-learn preprocessing scaling为稀疏矩阵。比例(应用函数?)稀疏矩阵对数
我的目标是通过以对数为基础将列的最大值“缩放”每个要素列。我的措辞可能不准确。我尝试解释。
说特征列具有值:0, 8, 2
:
- 最大值= 8
- 特征值的对数8 0应该是0.0 =
math.log(0+1, 8+1)
(+1是应对零,所以是中,我们实际上正在登录底座9) - 特征值8的登录-8应为1.0 =
math.log(8+1, 8+1)
- 特征值的对数8 2应为0.5 =
math.log(2+1, 8+1)
是的,我可以很容易地应用任何基于功能的变压器FunctionTransformer,但我希望每个列的日志更改(基于)的基础(特别是最大值)。也就是说,我想要做一些像MaxAbsScaler,只取对数。
我看到MaxAbsScaler
得到第一每个列(code),然后倍数的最大的值的矢量(scale
)原始矩阵倍1/scale
在code。
但是,我不知道该怎么做,如果我想采取基于scale
向量的对数。是否有可能将对数运算转换为乘法运算(?),还是有其他可行的有效的scipy稀疏运算?
我希望我的意图清楚(可能)。
这是很好的想法!正是我需要的,谢谢! - 在类似的说明中,我猜想使用_sparse_矩阵我不能像MinMaxScaler那样先缩小到最小范围,也就是说,如果要素列的取值范围只在40和80之间,则将最小值改为0和40,然后,在你的答案中应用'log1p'。 - 我只需要为少数列执行此操作,也许在这些列上非空白地操作才有效,然后才能交换? – juanmirocks
如果你有一个稀疏矩阵,但是有些列的所有值都在40到80之间,这是一个奇怪的情况。我自己并不需要处理这种情况,你可能想发布一个单独的问题,因为它与上面的不同。 – FTP