首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >规模(应用功能?)稀疏矩阵对数

规模(应用功能?)稀疏矩阵对数
EN

Stack Overflow用户
提问于 2017-01-11 20:43:22
回答 1查看 576关注 0票数 2

我将学习预处理缩放用于稀疏矩阵。

我的目标是“缩放”每一功能列,采用对数基列最大值。我的措辞可能不准确。我试着解释。

假设功能列有值: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),然后在代码中乘以原始矩阵乘以1 / scale

但是,如果我想取对数--基于scale向量,我不知道该怎么做。是否有可能将对数运算转换为乘法(?)还是我有其他的可能性,参与稀疏操作是有效的?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-11 22:04:41

B基中x的对数与log(x)/log(b)相同,其中日志是自然的。因此,您所描述的过程等于首先将日志(x+1)转换应用于所有内容,然后再按最大值进行缩放。日志(x+1)是一个内置函数log1p.示例:

代码语言:javascript
复制
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):

代码语言:javascript
复制
  (0, 0)        0.630929753571
  (1, 0)        1.0
  (2, 1)        1.0
  (0, 2)        1.0
  (2, 2)        0.5
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41600349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档