请考虑以下事项:
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如何提供公平的分析?
答案 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)。