我将学习预处理缩放用于稀疏矩阵。
我的目标是“缩放”每一功能列,采用对数基列最大值。我的措辞可能不准确。我试着解释。
假设功能列有值:0, 8, 2
math.log(0+1, 8+1) ( +1是用来处理零的;所以是的,我们实际上取的是日志基9)。math.log(8+1, 8+1)math.log(2+1, 8+1)是的,我可以很容易地使用FunctionTransformer应用任意的基于函数的转换器,但是我希望(基于)每个列(特别是最大值)的日志更改的基础。也就是说,我想做一些像MaxAbsScaler这样的事情,只取对数。
我看到MaxAbsScaler首先得到每个列(代码)最大值的向量(scale),然后在代码中乘以原始矩阵乘以1 / scale。
但是,如果我想取对数--基于scale向量,我不知道该怎么做。是否有可能将对数运算转换为乘法(?)还是我有其他的可能性,参与稀疏操作是有效的?
我希望我的意图是明确的(也可能)。
发布于 2017-01-11 22:04:41
B基中x的对数与log(x)/log(b)相同,其中日志是自然的。因此,您所描述的过程等于首先将日志(x+1)转换应用于所有内容,然后再按最大值进行缩放。日志(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.5https://stackoverflow.com/questions/41600349
复制相似问题