[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类
ps:本博客内容根据唐宇迪的的机器学习经典算法 学习视频复制总结而来
http://www.abcplus.com.cn/course/83/tasks
逻辑回归
问题描述:我们将建立一个逻辑回归模型来预测一个学生是否被大学录取。假设你是一个大学系的管理员,你想根据两次考试的结果来决定每个申请人的录取机会。你有以前的申请人的历史数据,你可以用它作为逻辑回归的训练集。对于每一个培训例子,你有两个考试的申请人的分数和录取决定。为了做到这一点,我们将建立一个分类模型,根据考试成绩估计入学概率。
数据下载:https://pan.baidu.com/s/1pNbtrjP
数据大概长这个样
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRMypGzrtvCKyvco-3v-DepKovRz0C_wzKXaUbnj6Jvbb.png)
1、查看数据基本属性
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRIFT_N83nn_9BDshCFs4zZXwdue14vFhTfxNA-5ujOUg.png)
2、画图观察
plot结构剖析
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRMk0YwaD-I3r0gvVKKptJxIhlxh4FpN_FhedBtNl4yRx.png)
上图来自https://www.jianshu.com/p/b4b5dd20e48a
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRG16jrygf_cNYQYEwz3454xWPrc-fMiNc9BMh659TYb2.png)
3、建立分类器(求解出三个参数θ0、θ1、θ2)
设定阈值,根据阈值判断录取结果(此处设置为50%,≥50%即判断录取)
要完成的模块:
-sigmoid
: 映射到概率的函数
model
: 返回预测结果值cost
: 根据参数计算损失gradient
: 计算每个参数的梯度方向descent
: 进行参数更新accuracy
: 计算精度
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRHwGJG3ecNETwBzeVbGxzjl8PX_UDS1Im5ca6f59ju7Y.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRP70vnGfr1eUMGK3QHYIWSd26eSzii_pq05UfG_u-Z4e.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRKCVL0ygpDecPt1mEnKYjnhul51hIBIP5a3KRLu0ef6g.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRHmj0fPFMoPAlOTerqF1dJpjq6Hz9-6U1pbVGQua2Ep7.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRJX-i6pIjzNBvGTVMYOZ1Ye-x29lz-M5KgvUPCtKd8t2.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRHUddx4IT-PWIwbTKkLdO8jfZ7oyfipAKj0PtmB8819k.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRCy2u4igLIWJ615nnfOW304VIFkDJ-nzEQ9YbCvIgAk_.png)
4、损失函数
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRL7fklbDQGto_JsVxqGQVTIbfSmN0eyC9I0ZW-BjfT93.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRCO-nfnW38aF9Oey1sUIVlA0ph03WrvnCbtSv59bsi_i.png)
5、计算梯度
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRAewYucDwaM3NKojIclj3WuHcuinK7olPyJLULBJxnOv.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRNgFeCg5lNHXyDVTRh8-SCAyPwC0Fo54dGFDxdsz8Xty.png)
6、梯度下降(比较三种梯度下降方法)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRLUqi5p2KTMoy2LybAtAU0eIreBFrM9sD45a-Xytv4L9.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRJ0fYWPQ4ullp9rTIXTeQShROdGmsLs_zXimQ8-b3Ht0.png)
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRHtoNdz3cPUm8FH_kaFMpx_PjN3y6CTPolzN0CIWfwiM.png)
下面这段代码仅仅是将过程可视化
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRH_ahDWRNTaLEp1tQcN_n81hVOevr1Yyb-SzvbOK5QYA.png)
7、不同的停止策略
①设定迭代次数
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRLytI59heC12Qnpcxw0RvfVy5Umy6HIcvBpcJf05-tMq.png)
②根据损失值停止
上面的迭代次数过少,修改阈值为1E-6,迭代次数大概需要110000次 。会发现值再次降低
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRIsQQTyipEqHl3jFVGRfiNEE9epMlOXWrqCnnymsmNt4.png)
这种策略虽然准确度较高,但是迭代次数多,计算量大
③、根据梯度变化停止
设定阈值 0.05,差不多需要40 000次迭代
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRJ-PBQU0y8RPJxDAEyUOL6qbce89WLbCJJbo0AjP7zYu.png)
8、对比不同的梯度下降方法
①Stochastic descent 随机梯度下降
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRPpLkdEv-7ODpl_k75-uxQyOG09DiZ8ZkqNFJ-eYuHhr.png)
相当不稳定,再来试试把学习率调小一些
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRNeWeF0Vw1qDdi2UfedeVTP7FfrYXBY44gUj7IbiDa8d.png)
速度快,效果和稳定性都差,需要很小的学习率
②Mini-batch descent小批量梯度下降
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRNn9QpS_aBjGQHCL3xMwOXNB1ZIBETZNNpd2jsNT0SGx.png)
标准化/归一化
浮动仍然比较大,我们来尝试下对数据进行标准化 将数据按其属性(按列进行)减去其均值,然后除以其方差。最后得到的结果是,对每个属性/每列来说所有数据都聚集在0附近,方差值为1。
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRBWnqJ5rMIi8Op-Cg0P253PTffPRFijsa9oMCM8SXnFE.png)
它好多了!原始数据,只能达到达到0.61,而我们得到了0.38个在这里! 所以对数据做预处理是非常重要的。
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sROP75jtTzJ1Mae3nzWiwbOPMkvORTmpewemjsaZtNDIK.png)
更多的迭代次数会使得损失下降的更多!
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRFo7efRE4ukUiQI_1sq7RIUg_Jd5pRQPlvHPwzc6L-kB.png)
随机梯度下降更快,但是我们需要迭代的次数也需要更多,所以还是用batch的比较合适!
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRCmZs3ag1-a-jqML7Bk9wB7w19ouJSQ5D1VfUuF57yG9.png)
9、精度
![[Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类 [Python]数据挖掘(1)、梯度下降求解逻辑回归——考核成绩分类](https://cdn.ancii.com/article/image/v1/sY/fn/RV/VRfYnsfiw8FmOoknmURpIFvt83OoTLmvYbgtNNkTlaAc6fjsFlGjxhdnaYx1i61XdqhGH7QDP8QahA_OAk6sRNOxHzstjgfRb6FF3UaVS81yrdQTc9VC2pbyM-s8qLX4.png)