python实现logistic分类算法代码


Posted in Python onFebruary 28, 2020

最近在看吴恩达的机器学习课程,自己用python实现了其中的logistic算法,并用梯度下降获取最优值。

logistic分类是一个二分类问题,而我们的线性回归函数

python实现logistic分类算法代码

的取值在负无穷到正无穷之间,对于分类问题而言,我们希望假设函数的取值在0~1之间,因此logistic函数的假设函数需要改造一下

python实现logistic分类算法代码

由上面的公式可以看出,0 < h(x) < 1,这样,我们可以以1/2为分界线

python实现logistic分类算法代码

cost function可以这样定义

python实现logistic分类算法代码

其中,m是样本的数量,初始时θ可以随机给定一个初始值,算出一个初始的J(θ)值,再执行梯度下降算法迭代,直到达到最优值,我们知道,迭代的公式主要是每次减少一个偏导量

python实现logistic分类算法代码

如果将J(θ)代入化简之后,我们发现可以得到和线性回归相同的迭代函数

python实现logistic分类算法代码

按照这个迭代函数不断调整θ的值,直到两次J(θ)的值差值不超过某个极小的值之后,即认为已经达到最优解,这其实只是一个相对较优的解,并不是真正的最优解。 其中,α是学习速率,学习速率越大,就能越快达到最优解,但是学习速率过大可能会让惩罚函数最终无法收敛,整个过程python的实现如下

import math

ALPHA = 0.3
DIFF = 0.00001


def predict(theta, data):
  results = []
  for i in range(0, data.__len__()):
    temp = 0
    for j in range(1, theta.__len__()):
      temp += theta[j] * data[i][j - 1]
    temp = 1 / (1 + math.e ** (-1 * (temp + theta[0])))
    results.append(temp)
  return results


def training(training_data):
  size = training_data.__len__()
  dimension = training_data[0].__len__()
  hxs = []
  theta = []
  for i in range(0, dimension):
    theta.append(1)
  initial = 0
  for i in range(0, size):
    hx = theta[0]
    for j in range(1, dimension):
      hx += theta[j] * training_data[i][j]
    hx = 1 / (1 + math.e ** (-1 * hx))
    hxs.append(hx)
    initial += (-1 * (training_data[i][0] * math.log(hx) + (1 - training_data[i][0]) * math.log(1 - hx)))
  initial /= size
  iteration = initial
  initial = 0
  counts = 1
  while abs(iteration - initial) > DIFF:
    print("第", counts, "次迭代, diff=", abs(iteration - initial))
    initial = iteration
    gap = 0
    for j in range(0, size):
      gap += (hxs[j] - training_data[j][0])
    theta[0] = theta[0] - ALPHA * gap / size
    for i in range(1, dimension):
      gap = 0
      for j in range(0, size):
        gap += (hxs[j] - training_data[j][0]) * training_data[j][i]
      theta[i] = theta[i] - ALPHA * gap / size
      for m in range(0, size):
        hx = theta[0]
        for j in range(1, dimension):
          hx += theta[j] * training_data[i][j]
        hx = 1 / (1 + math.e ** (-1 * hx))
        hxs[i] = hx
        iteration += -1 * (training_data[i][0] * math.log(hx) + (1 - training_data[i][0]) * math.log(1 - hx))
      iteration /= size
    counts += 1
  print('training done,theta=', theta)
  return theta


if __name__ == '__main__':
  training_data = [[1, 1, 1, 1, 0, 0], [1, 1, 0, 1, 0, 0], [1, 0, 1, 0, 0, 0], [0, 0, 0, 0, 1, 1], [0, 1, 0, 0, 0, 1],
        [0, 0, 0, 0, 1, 1]]
  test_data = [[0, 1, 0, 0, 0], [0, 0, 0, 0, 1]]
  theta = training(training_data)
  res = predict(theta, test_data)
  print(res)

运行结果如下

python实现logistic分类算法代码

以上这篇python实现logistic分类算法代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python算法学习之基数排序实例
Dec 18 Python
Python模拟登陆实现代码
Jun 14 Python
CentOS下使用yum安装python-pip失败的完美解决方法
Aug 16 Python
浅谈Python NLP入门教程
Dec 25 Python
python 借助numpy保存数据为csv格式的实现方法
Jul 04 Python
python flask实现分页的示例代码
Aug 02 Python
Python 互换字典的键值对实例
Feb 12 Python
flask应用部署到服务器的方法
Jul 12 Python
Python-Seaborn热图绘制的实现方法
Jul 15 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
pycharm 设置项目的根目录教程
Feb 12 Python
python+selenium爬取微博热搜存入Mysql的实现方法
Jan 27 Python
python GUI库图形界面开发之PyQt5打印控件QPrinter详细使用方法与实例
Feb 28 #Python
使用sklearn的cross_val_score进行交叉验证实例
Feb 28 #Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 #Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 #Python
python sklearn包——混淆矩阵、分类报告等自动生成方式
Feb 28 #Python
python GUI库图形界面开发之PyQt5计数器控件QSpinBox详细使用方法与实例
Feb 28 #Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
Feb 28 #Python
You might like
十大催泪虐心动漫电影,有几部你还没看
2020/03/04 日漫
php函数的常用方法及注意之处小结
2011/07/10 PHP
php Session存储到Redis的方法
2013/11/04 PHP
php_screw安装使用教程(另一个PHP代码加密实现)
2014/05/29 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
JS获取dom 对象 ajax操作 读写cookie函数
2009/11/18 Javascript
14个有用的Jquery技巧分享
2015/01/08 Javascript
jQuery实现流动虚线框的方法
2015/01/29 Javascript
js实时获取并显示当前时间的方法
2015/07/31 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
JS打开摄像头并截图上传示例
2017/02/18 Javascript
微信小程序中页面FOR循环和嵌套循环
2017/06/21 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
Vue中的混入的使用(vue mixins)
2018/06/01 Javascript
vue .js绑定checkbox并获取、改变选中状态的实例
2018/08/24 Javascript
JavaScript实现简单的隐藏式侧边栏功能示例
2018/08/31 Javascript
Vue实现远程获取路由与页面刷新导致404错误的解决
2019/01/31 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
使用VScode 插件debugger for chrome 调试react源码的方法
2019/09/13 Javascript
python实现爬取图书封面
2018/07/05 Python
Python 给定的经纬度标注在地图上的实现方法
2019/07/05 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
阿联酋优惠券服务:Living Kool
2019/12/12 全球购物
纪律教育学习月活动总结
2014/08/27 职场文书
村干部四风问题整改措施
2014/09/30 职场文书
检讨书怎么写
2015/01/23 职场文书
教师自荐信范文
2015/03/06 职场文书
2016年过年放假安排通知
2015/08/18 职场文书
Nginx+SpringBoot实现负载均衡的示例
2021/03/31 Servers
python基础之文件处理知识总结
2021/05/23 Python
python scrapy简单模拟登录的代码分析
2021/07/21 Python
豆瓣2021评分最高动画剧集-豆瓣评分最高的动画剧集2021
2022/03/18 日漫