逻辑回归——练习题

数据的前两列为成绩,第三列为是否录取的决定。

  • 首先加载数据,将数据打在散点图上
data = np.loadtxt('ex2data1.txt', delimiter=',')
neg = data[data[:, 2] == 0]
pos = data[data[:, 2] == 1]
fig, ax = plt.subplots()
ax.scatter(pos[:, 0], pos[:, 1], c='r', marker='+', label='Admitted')
ax.scatter(neg[:, 0], neg[:, 1], c='g', marker='o', label='Not admitted')
ax.set_xlabel('Exame 1 score')
ax.set_ylabel('Exame 2 score')
plt.show()

逻辑回归——练习题_第1张图片

  • 完成sigmoid函数,因为 h(θ)=g(θTx) h ( θ ) = g ( θ T x ) ,但是g是一个S函数,所以我们首先应该完成sigmoid函数的实现:
def sigmoid(z):
    """g(z)
    z,canbe a array, a narray, a vector and a matrix
    """
    return 1.0 / (1.0 + np.exp(-z))
  • 完成代价函数和梯度下降法函数

完成X和Y的初始化,方便以后的函数的使用

data = np.loadtxt('ex2data1.txt',delimiter=',')
x = np.mat(np.delete(data,-1,axis=1))
x = np.hstack((np.ones((x.shape[0],1)),x))
y = np.mat(data[:,-1]).T
m,n = x.shape

代价函数如下:

def costFunction(theta):
    y1 = np.array(sigmoid(x*theta))
    y0 = np.array(y)
    cost = np.sum(y0 * np.log(y1) + (1.0 - y0) * np.log(1.0 - y1))/m
    return cost

求代价函数的导数:

def deri(theta):
    h = np.array(sigmoid(x*theta))
    err = h - y
    der = (x.T * err)/m
    return der

梯度下降法求theta:

def grident(alpha, theta, iters):
    while iters > 0:
        der = deri(theta)
        theta = theta - alpha*der
        iters -= 1
    return theta

画出决策边界如图所示:
逻辑回归——练习题_第2张图片

你可能感兴趣的:(机器学习,数据挖掘)