Sigmoid总是返回1?

时间:2016-11-06 22:05:27

标签: python machine-learning classification regression sigmoid

请考虑以下事项:

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或权重为零(或零向量),否则classifyVector不会返回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如何提供公平的分析?

1 个答案:

答案 0 :(得分:0)

  但是,如果它是Sigmoid(0),则sigmoid似乎只产生0.5(即零分类)。除非inX或权重为零(或零向量),否则获胜的classifyVector总是返回1?

0.5是一个阈值,不是人们必须达到的。 classifyVector将返回1 iff sigmoid产生超过 0.5。还有很多剩余的值 - 介于0和0.5之间。你是正确的,获得正好0.5非常罕见,但这不是一个问题,因为每个小于0.5的值将导致分类" 0"。基本上(如果你处理数学)你将得到分类1 iff inSig为正(如果为负则为0)。由于通过sigmoid挤压使得正值大于0.5而负值小于0.5(而正如你所说的那样 - 零转换为0.5)。