0

次の点を考慮してください。

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

私の理解では、シグモイドの結果の範囲は 0 から 1 です。この投稿 ( http://clear-lines.com/blog/post/Logistic-Regression.aspx ) によると:

「正の値は 0.5 より大きい値を返し、入力値が大きいほど 1 に近づきます。この関数は確率を返すと考えることができます。x の値が非常に高いか低い場合、高い確実性があります。 2 つのグループのいずれかに属し、ゼロに近い値の場合、各グループの確率は 50% / 50% です。」

しかし、シグモイドが Sigmoid(0) の場合、シグモイドは 0.5 (つまり、ゼロ分類) しか生成しないようです。inX または weights がゼロ (またはゼロ ベクトル) でない限り、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 がゼロになることはありません。計算すると、重みもゼロにはなりません。では、シグモイドはどのようにして公正な分析を提供できるのでしょうか?

4

1 に答える 1