- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我需要 logit 和反 logit 函数,以便 logit(inv_logit(n)) == n
。我使用 numpy,这是我所拥有的:
import numpy as np
def logit(p):
return np.log(p) - np.log(1 - p)
def inv_logit(p):
return np.exp(p) / (1 + np.exp(p))
这里是值:
print logit(inv_logit(2))
2.0
print logit(inv_logit(10))
10.0
print logit(inv_logit(20))
20.000000018 #well, pretty close
print logit(inv_logit(50))
Warning: divide by zero encountered in log
inf
现在让我们测试负数
print logit(inv_logit(-10))
-10.0
print logit(inv_logit(-20))
-20.0
print logit(inv_logit(-200))
-200.0
print logit(inv_logit(-500))
-500.0
print logit(inv_logit(-2000))
Warning: divide by zero encountered in log
-inf
所以我的问题是:实现这些功能的正确方法是什么,这样要求 logit(inv_logit(n)) == n
将适用于任何 n
在尽可能广泛的范围内(至少 [-1e4; 1e4)?
而且(我确定这与第一个有关)为什么我的函数在负值下比在正值下更稳定?
最佳答案
要么使用
1.bigfloat 包支持任意精度浮点运算。
2。SymPy 符号 数学包。我将给出两者的例子:
首先,bigfloat:
http://packages.python.org/bigfloat/
这是一个简单的例子:
from bigfloat import *
def logit(p):
with precision(100000):
return log(p)- log(1 -BigFloat(p))
def inv_logit(p):
with precision(100000):
return exp(p) / (1 + exp(p))
int(round(logit(inv_logit(12422.0))))
# gives 12422
int(round(logit(inv_logit(-12422.0))))
# gives -12422
这真的很慢。您可能需要考虑重构您的问题,并对某些部分进行分析。像这样的情况在实际问题中很少见 - 我很好奇你正在处理什么样的问题。
示例安装:
wget http://pypi.python.org/packages/source/b/bigfloat/bigfloat-0.3.0a2.tar.gz
tar xvzf bigfloat-0.3.0a2.tar.gz
cd bigfloat-0.3.0a2
as root:
python setup.py install
关于您的函数在负值下表现更好的原因。考虑:
>>> float(inv_logit(-15))
3.059022269256247e-07
>>> float(inv_logit(15))
0.9999996940977731
在第一种情况下, float 很容易表示这个值。移动小数点以便前导零:0.0000... 不需要存储。在第二种情况下,所有前导 0.999 都需要存储,因此您需要所有额外的精度才能在稍后在 logit() 中执行 1-p 时获得准确的结果。
这是符号数学方式(明显更快!):
from sympy import *
def inv_logit(p):
return exp(p) / (1 + exp(p))
def logit(p):
return log(p)- log(1 -p)
x=Symbol('x')
expr=logit(inv_logit(x))
# expr is now:
# -log(1 - exp(x)/(1 + exp(x))) + log(exp(x)/(1 + exp(x)))
# rewrite it: (there are many other ways to do this. read the doc)
# you may want to make an expansion (of some suitable kind) instead.
expr=cancel(powsimp(expr)).expand()
# it is now 'x'
# just evaluate any expression like this:
result=expr.subs(x,123.231)
# result is now an equation containing: 123.231
# to get the float:
result.evalf()
在这里可以找到 Sympy http://docs.sympy.org/ .在 ubuntu 中,它是通过突触发现的。
关于python - 极值的 logit 和反 logit 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9478663/
我在程序 R 中使用 mlogit 包。我已将数据从原始宽格式转换为长格式。这是转换后的 data.frame 的示例,我将其称为“long_perp”。所有的自变量都是个体特定的。我在数据集中有 4
我需要 logit 和反 logit 函数,以便 logit(inv_logit(n)) == n。我使用 numpy,这是我所拥有的: import numpy as np def logit(p)
我正在尝试制作一个简单的 CNN 分类器模型。对于我的训练图像 (BATCH_SIZEx227x227x1) 和标签 (BATCH_SIZEx7) 数据集,我使用 numpy ndarray,它们通过
我有这样一句话:"I like sitting in my new chair and _____ about life" . 我有一组特定的 token ,如 ["watch", "run", "t
在仔细阅读 logit 模型说明时,我遇到了一种叫做“尺度参数”的可能性。有人可以解释一下这是什么以及它的用途。不使用它会发生什么。另外,它也用于概率模型吗? 干杯 最佳答案 这是 5 个月前提出的问
我知道这两个模型有不同的方程,但我不确定为什么人们使用 logistic 模型而不是 logit 模型,反之亦然?其背后的主要原因是什么?如果我的响应变量是一个决策变量(是,否),那么这里哪个模型会更
我似乎无法弄清楚对逻辑回归模型进行评分的语法。 logit = sm.Logit(data[response],sm.add_constant(data[features])) model = log
当我尝试使用 softmax 交叉熵函数时,我收到一个 ValueError 消息 ValueError: Rank mismatch: Rank of labels (received 2) sho
我正在尝试创建一个神经网络,该网络一次从多个 csv 文件中获取 13 个特征作为输入,并在每次迭代后测量准确性。这是我的代码片段: import tensorflow as tf import nu
我已经启动了tensorflow,并尝试实现简单的神经网络,并识别来自analyticsvidhya.com的数字练习问题,并遵循以下帖子: https://www.analyticsvidhya.c
请尝试给出参数化解决方案(有三个以上的选择)。 我有一个带有 beta 值的字典: {'B_X1': 2.0, 'B_X2': -3.0} 这个数据框: X1_123 X1_456 X1_789
让我使用 UCLA 的多项 logit 示例作为运行示例--- library(nnet) library(foreign) ml <- read.dta("http://www.ats.ucla.e
我是 TF 机器学习新手。我生成了这个数据集并将其导出到 .csv 文件中。它在这里:tftest.csv . “分布”列对应于一个独特的方程组,我试图将其压缩为 SageMath 中的一系列数字。
我是一名新手程序员,试图关注this指导。但是,我遇到了一个问题。该指南说将损失函数定义为: def loss(labels, logits): return tf.keras.losses.
在 python 中使用统计模型进行逻辑回归时,我试图将协方差类型从非稳健更改为稳健。 我阅读了 statsmodels.org 上的文档,但无法找到有关如何执行此操作的解决方案。 如果这里有人可以帮
我通常使用 mfx 包和 logitmfx 函数生成 logit 模型边际效应。但是,我使用的当前调查具有权重(由于某些人群的过度采样,这对样本中 DV 的比例有很大影响)并且 logitmfx 似乎
在 Tensorflow 中,我有一个分类器网络和不平衡的训练类。由于各种原因,我不能使用重采样来补偿不平衡的数据。因此,我不得不通过其他方式来补偿失衡,特别是根据每个类中的示例数量将 logits
我正在 Keras 中创建一个模型并想计算我自己的指标(困惑度)。这需要使用非标准化概率/logits。然而,keras 模型只返回 softmax 概率: model = Sequential()
我是 R 并行计算的初学者。我遇到了 doParallel 包,我认为它对我的情况可能有用。 以下代码旨在并行评估多个 pglm 回归: require("foreach") require("doP
我想获得具有标准误差的多项式 logit 模型的平均边际效应 (AME)。为此,我尝试了不同的方法,但到目前为止还没有达到目标。 最好的尝试 我最好的尝试是使用 mlogit 手动获取 AME。我在下
我是一名优秀的程序员,十分优秀!