【问题标题】:Sigmoid always returns 1?Sigmoid 总是返回 1?
【发布时间】:2017-03-20 04:47:04
【问题描述】:

考虑以下几点:

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 为零(或零向量),否则分类向量不会总是返回 1 吗?

例如,考虑以下数据:

trainset = np.array([[1,1,1],[2,2,2],[3,3,3],[4,4,4]])
trainlbl = np.array([1,12,11,40])

在这里,inX 永远不会为零。如果计算出数学,权重也不会为零。那么,sigmoid 如何提供公平的分析呢?

【问题讨论】:

  • 可能会替换 l 中的 1。 2 和 1.0?据我记得 Python 这可能会改变整个部门的类型。 [这是用于神经网络吗?]
  • 为什么param叫inSig而var叫inX?
  • 我编辑了它。这是一个逻辑回归。
  • 尝试将 1 更改为 1.0?这可能无济于事,但也许有......
  • 我试过了,但它没有改变任何东西 - 我认为分子中的 1.0 已经解决了这个问题。

标签: python machine-learning classification regression sigmoid


【解决方案1】:

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

0.5 是一个阈值,不是必须达到的。如果 sigmoid 产生超过 0.5,则分类向量将返回 1。还有很多剩余的值 - 0 到 0.5 之间的所有值。您说得对,恰好获得 0.5 是极其罕见的,但这不是问题,因为每个小于 0.5 的值都会导致分类为“0”。基本上(如果您计算数学),如果inSig 为正(如果为负,则为 0),您将得到分类 1。由于通过 sigmoid 压缩会使正值变得大于 0.5 而负值小于 0.5(而正如您所说 - 零被转换为 0.5)。

【讨论】:

    猜你喜欢
    • 2021-09-18
    • 2016-11-21
    • 2019-10-10
    • 2014-04-13
    • 2013-11-04
    • 2011-12-09
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多