gpt4 book ai didi

python - 以对数方式缩放(应用函数?)稀疏矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:49 25 4
gpt4 key购买 nike

我正在使用 scikit-learn preprocessing scaling对于稀疏矩阵。

我的目标是通过对列最大值取对数来“缩放”每个特征列。我的措辞可能不准确。我试着解释一下。

假设特征列有值:0, 8, 2:

  • 最大值 = 8
  • 特征值 0 的 Log-8 应该是 0.0 = math.log(0+1, 8+1)(+1 是为了处理零;所以是的,我们实际上是在取对数基数 9)
  • 特征值 8 的 Log-8 应该是 1.0 = math.log(8+1, 8+1)
  • 特征值 2 的 Log-8 应该是 0.5 = math.log(2+1, 8+1)

是的,我可以使用 FunctionTransformer 轻松应用任何基于函数的转换器,但我希望日志的基础更改(基于)每一列(特别是最大值)。也就是说,我想做类似 MaxAbsScaler 的事情。 , 只取对数。

我看到 MaxAbsScaler 首先获取每列最大值的向量 (scale) (code),然后将原始矩阵乘以 1/比例 code .

但是,如果我想根据 scale 向量取对数,我不知道该怎么做。甚至可以将对数运算转换为乘法(?),或者我是否有其他有效的 scipy 稀疏运算的可能性?

我希望我的意图是明确的(并且是可能的)。

最佳答案

以 b 为底的 x 的对数与 log(x)/log(b) 相同,其中对数是自然的。因此,您描述的过程相当于首先对所有内容应用 log(x+1) 转换,然后按最大绝对值进行缩放。方便的是,log(x+1) 是一个内置函数,log1p。示例:

from sklearn.preprocessing import FunctionTransformer, maxabs_scale
from scipy.sparse import csc_matrix
import numpy as np
logtran = FunctionTransformer(np.log1p, accept_sparse=True)
X = csc_matrix([[ 1., 0, 8], [ 2., 0, 0], [ 0, 1., 2]])
Y = maxabs_scale(logtran.transform(X))

输出(稀疏矩阵 Y):

  (0, 0)        0.630929753571
(1, 0) 1.0
(2, 1) 1.0
(0, 2) 1.0
(2, 2) 0.5

关于python - 以对数方式缩放(应用函数?)稀疏矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41600349/

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