决策边界概念-阈值
说到决策边界,就需要提出阈值的概念,什么是阈值?
阈值的理解可以浅显的认为,相当于一个边界线,大于这个边界线是一个结果,小于这个边界线则是另一个结果。在逻辑回归中,大于这个边界线就是1,小于这个边界线则就是0。
拿 sigmoid 函数举例
g
(
x
)
=
1
1
+
e
−
x
g(x)=\frac1 {1+e^{-x}}
g(x)=1+e−x1
当
x
=
0
x=0
x=0 时为 sigmoid function 的决策边界。
即所有
x
>
0
x>0
x>0 的部分
g
(
x
)
=
1
g(x)=1
g(x)=1,所有
x
<
0
x<0
x<0 的部分
g
(
x
)
=
0
g(x)=0
g(x)=0。
python-sigmoid Function 函数图像:
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10,10)
f = []
for i in x:
f_value = 1/(1+np.exp(-i))
f.append(f_value)
plt.plot(x, f, c='b', label='function')
plt.title("Sigmoid Function")
plt.ylabel('g(z)')
plt.xlabel('z')
plt.legend()
plt.show()
引用到 逻辑回归
那么逻辑回归的线性边界是多少呢?
先最简单的逻辑回归例子来看:
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac1 {1+e^{-z}}
g(z)=1+e−z1,
z
=
0.5
x
+
1
z=0.5x+1
z=0.5x+1
g
(
x
)
=
1
1
+
−
(
0.5
x
+
1
)
g(x)=\frac1 {1+^{-(0.5x+1)}}
g(x)=1+−(0.5x+1)1
很明显,decision boundary为
z
=
0
z=0
z=0 的时候,即
0.5
x
+
1
=
0
0.5x+1=0
0.5x+1=0 时。
最后用实例来看
g
(
z
)
=
1
1
+
e
−
z
g(z)=\frac1 {1+e^{-z}}
g(z)=1+e−z1,
z
=
x
0
+
x
1
−
3
z=x_0+x_1-3
z=x0+x1−3
python code
import numpy as np
import matplotlib.pyplot as plt
X = np.array([[0.5, 1.5], [1,1], [1.5, 0.5], [3, 0.5], [2, 2], [1, 2.5]])
y = np.array([0, 0, 0, 1, 1, 1]).reshape(-1,1)
x_0 = []
x_1 = []
x_00 = []
x_11 = []
for i in range(len(X)):
if y[i]==0:
x_0.append(X[i,0])
x_1.append(X[i,1])
if y[i]==1:
x_00.append(X[i,0])
x_11.append(X[i,1])
fig,ax = plt.subplots(1,1,figsize=(4,4))
plt.scatter(x_0, x_1, marker='o', c='b', label='0')
plt.scatter(x_00, x_11, marker='x', c='r', label='1')
ax.set_ylabel('$x_1$')
ax.set_xlabel('$x_0$')
plt.show()
画阈值:
z
=
x
0
+
x
1
−
3
=
0
z=x_0+x_1-3=0
z=x0+x1−3=0
即
x
0
+
x
1
=
3
x_0+x_1=3
x0+x1=3
python code
import numpy as np
import matplotlib.pyplot as plt
X = np.array([[0.5, 1.5], [1,1], [1.5, 0.5], [3, 0.5], [2, 2], [1, 2.5]])
y = np.array([0, 0, 0, 1, 1, 1]).reshape(-1,1)
x_0 = []
x_1 = []
x_00 = []
x_11 = []
for i in range(len(X)):
if y[i]==0:
x_0.append(X[i,0])
x_1.append(X[i,1])
if y[i]==1:
x_00.append(X[i,0])
x_11.append(X[i,1])
fig,ax = plt.subplots(1,1,figsize=(4,4))
plt.scatter(x_0, x_1, marker='o', c='b', label='0')
plt.scatter(x_00, x_11, marker='x', c='r', label='1')
# 画阈值
x = []
f = []
for j in range(0,4):
x.append(j)
f_value = 3-j
f.append(f_value)
plt.plot(x, f, c='g')
ax.set_ylabel('$x_1$')
ax.set_xlabel('$x_0$')
plt.show()
end—>