Sigmoid总是返回1?

2024-10-01 07:34:34 发布

您现在位置:Python中文网/ 问答频道 /正文

考虑以下因素:

def sigmoid(inSig):
    return 1.0/(1.0+np.exp(-inSig))

def classifyVector(inX, weights):
    prob = sigmoid(sum(inX*weights))
    if prob > 0.5: return 1.0
    else: return 0.0

我的理解是sigmoid结果的范围是0到1。根据这篇文章(http://clear-lines.com/blog/post/Logistic-Regression.aspx):

“正值将返回大于0.5的值,输入值越大,越接近1。我们可以把这个函数看作是返回一个概率:对于非常高或很低的x值,它属于两个组中的一个,对于接近于零的值,每个组的概率是50%/50%。“

但是,如果它是sigmoid(0),那么sigmoid似乎只产生0.5(即零分类)。除非inX或weights为零(或零向量),否则classifyVector不总是返回1吗?在

例如,考虑以下数据:

^{pr2}$

在这里,inX永远不会是零。如果一个人算出了数学,那么权重也不会是零。那么,乙状结肠如何提供一个公正的分析呢?在


Tags: returnifdefnp概率else因素sum
1条回答
网友
1楼 · 发布于 2024-10-01 07:34:34

But, the sigmoid seems to only produce a 0.5 (i.e., a zero classification) if it is Sigmoid(0). Unless inX or weights is zero (or zero vector), won't classifyVector always return a 1?

0.5是一个阈值,不是必须达到的。classifyVector将返回1如果sigmoid产生大于0.5。在0.5和0.5之间仍然有很多值。您是对的,精确获得0.5是非常罕见的,但这不是问题,因为每个小于0.5的值都将导致分类“0”。基本上(如果你计算一下)你会得到分类1,如果inSig是正的(如果是负的,则为0)。由于通过sigmoid进行压缩会使正值大于0.5,负值小于0.5(而正如您所述,零被转换为0.5)。在

相关问题 更多 >