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 相关文章推荐
使用PDB模式调试Python程序介绍
Apr 05 Python
python模拟enum枚举类型的方法小结
Apr 30 Python
在DigitalOcean的服务器上部署flaskblog应用
Dec 19 Python
Python实现SMTP发送邮件详细教程
Mar 02 Python
Python检测生僻字的实现方法
Oct 23 Python
python在ubuntu中的几种安装方法(小结)
Dec 08 Python
python2.7实现邮件发送功能
Dec 12 Python
python去重,一个由dict组成的list的去重示例
Jan 21 Python
Python Excel处理库openpyxl使用详解
May 09 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
python生成特定分布数的实例
Dec 05 Python
Django视图类型总结
Feb 17 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
PHP与MongoDB简介|安全|M+PHP应用实例详解
2013/06/17 PHP
php Xdebug的安装与使用详解
2013/06/20 PHP
[原创]ThinkPHP让../Public在模板不解析(直接输出)的方法
2015/10/09 PHP
PHP简单获取上月、本月、近15天、近30天的方法示例
2017/07/03 PHP
JavaScript中继承的一些示例方法与属性参考
2010/08/07 Javascript
JavaScript 处理Iframe自适应高度(同或不同域名下)
2013/03/29 Javascript
超简单JS二级、多级联动的简单实例
2014/02/18 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
jquery实现对联广告的方法
2015/02/05 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
JavaScript在网页中画圆的函数arc使用方法
2015/11/13 Javascript
JavaScript兼容浏览器FF/IE技巧
2016/08/14 Javascript
vue中渐进过渡效果实现
2016/10/27 Javascript
Vue2.0利用vue-resource上传文件到七牛的实例代码
2017/07/28 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
2018/08/14 jQuery
javascript递归函数定义和用法示例分析
2020/07/22 Javascript
Python 性能优化技巧总结
2016/11/01 Python
Python实现翻转数组功能示例
2018/01/12 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
2018/01/24 Python
使用python根据端口号关闭进程的方法
2018/11/06 Python
python 将字符串中的数字相加求和的实现
2019/07/18 Python
django项目中使用云片网发送短信验证码的实现
2021/01/19 Python
浅谈Python xlwings 读取Excel文件的正确姿势
2021/02/26 Python
移动端Web页面的CSS3 flex布局快速上手指南
2016/05/31 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
2018/01/29 HTML / CSS
英国折扣零售连锁店:QD Stores
2018/12/08 全球购物
大学生实习证明范本
2014/01/15 职场文书
模范家庭事迹材料
2014/02/10 职场文书
团支部建设方案
2014/05/02 职场文书
兵马俑导游词
2015/02/02 职场文书
教研活动主持词
2015/07/03 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
校园文化艺术节开幕词
2016/03/04 职场文书
python实现简易名片管理系统
2021/04/11 Python
Java 在线考试云平台的实现
2021/11/23 Java/Android
Python万能模板案例之matplotlib绘制直方图的基本配置
2022/04/13 Python