考虑以下因素:
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永远不会是零。如果一个人算出了数学,那么权重也不会是零。那么,乙状结肠如何提供一个公正的分析呢?在
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)。在相关问题 更多 >
编程相关推荐