机器学习入门之逻辑回归 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()

代价函数(交叉熵)
代码实现:
初始化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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值