机器学习入门之逻辑回归 logistic_regression

sigmoid 函数:
逻辑回归模型的假设函数:
sigmoid函数定义:

def sigmoid(z):
    # your code here  (appro ~ 1 lines)
    gz = 1/(1+np.exp(-z))
    return gz

绘图:

fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(np.arange(-10, 10, step=0.01),
        sigmoid(np.arange(-10, 10, step=0.01)))
ax.set_ylim((-0.1,1.1))
ax.set_xlabel('z', fontsize=18)
ax.set_ylabel('g(z)', fontsize=18)
ax.set_title('sigmoid function', fontsize=18)
plt.show()

机器学习入门之逻辑回归 logistic_regression_第1张图片
代码实现:
初始化thetatheta=np.zeros(n)(这里X为m * n 所以theta 是n * 1,注意这里n需要根据x的列来修改)

def cost(theta, X, y):
    cost1 = np.log(1-sigmoid(X.dot(theta))).dot(-y)
    cost2 = np.log(1-sigmoid(X.dot(theta))).dot(1-y)
    costf = (cost1-cost2)/len(X)
    return costf

注意X.dot(theta)与X*theta的区别
x的每一行表示一组数据,每一列表示一个特征
z = x.dot(theta) 为类似与线性回归中的预测值
经过sigmoid函数映射为值在(-1,1)

批量梯度下降
代码实现:

def gradient(theta, X, y):
    grad = X.T.dot((sigmoid(X.dot(theta)-y)))/len(X)
    return grad

参数拟合:
这里我使用 scipy.optimize.minimize 去寻找参数

import scipy.optimize as opt
res = opt.minimize(fun=cost, x0=theta, args=(X, y), method='Newton-CG', jac=gradient)

你可能感兴趣的:(机器学习入门之逻辑回归 logistic_regression)