Logistic回归

1)目标

使用Logistic回归模型来预测一个学生是否有资格入学。评估学生在两门test中的表现来决定录取率,通过以往的成绩和是否录取的学生数据建立模型,训练Logistic回归,对每一个新申请学生,你通过lr判定是否应该予以录取。

2)总结

  1. 实现算法前,应该在纸上将各个矩阵的维度整理清楚,防止不知名bug。
  2. 相比于之前的线性回归,lr由于加入了非线性的部分,梯度下降的速度会非常缓慢,可以采用高级方法,共轭梯度、BFGS等。

3)代码

import numpy as np
import matplotlib.pyplot as plt

#读取数据
data = np.loadtxt('D:\python\homewrok\data_sets\ex2data1.txt', delimiter=",")
x = data[:,[0,1]]
x = np.c_[np.ones(len(data)),x]                                          #添加第一列
y = data[:,[2]]

#变量初始化
n=3
m=len(data)
time=0                                                                   #迭代次数time
aerfa=0.001                                                              #学习率aerfa
theta=np.zeros(n)
JJ=np.zeros(250000)                                                      #代价函数

#数据可视化
plt.subplot(211)
for i in range(m):
    if y[i]==0:
        plt.scatter(x[i,[1]],x[i,[2]],c='red',marker='x')
    if y[i]==1:
        plt.scatter(x[i,[1]],x[i,[2]],c='blue',marker='o')

#目标函数
def h(theta,x):
    h1= x @ theta
    y=1/(1+np.exp(-h1))
    return y

#代价函数
def J(theta,x,y):
    yn = y.reshape(100)
    cost = yn * np.log(h(theta,x)) + (1-yn) * np.log(1-h(theta,x))
    out = -1/m * cost
    return np.sum(out)

#梯度下降
while time<250000:

    yt=y.reshape(100)       #转置
    daoshu = (aerfa / m) * (x.T @ (h(theta, x) - yt))       #向量运算,关注行和列配对
    theta = theta - daoshu                                  #迭代
    JJ[time]=J(theta,x,y)                                   #代价函数
    time+=1

#结果可视化
a=-theta[0]/theta[2]
b=-theta[1]/theta[2]
plt.plot(range(120),a+b*range(120))
plt.subplot(212)
plt.plot(range(250000),JJ)

print(theta,time)
plt.show()

4)运行结果

theta0,theta1,theta2:
在这里插入图片描述
数据可视化:加粗样式
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值