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学生成绩管理系统简洁版
Apr 05 Python
PyQt5每天必学之像素图控件QPixmap
Apr 19 Python
python递归实现快速排序
Aug 18 Python
python 保存float类型的小数的位数方法
Oct 17 Python
使用k8s部署Django项目的方法步骤
Jan 14 Python
Python这样操作能存储100多万行的xlsx文件
Apr 16 Python
python的常见矩阵运算(小结)
Aug 07 Python
python ubplot使用方法解析
Jan 10 Python
使用Python获取当前工作目录和执行命令的位置
Mar 09 Python
快速解释如何使用pandas的inplace参数的使用
Jul 23 Python
Python selenium实现断言3种方法解析
Sep 08 Python
Python实现淘宝秒杀功能的示例代码
Jan 19 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的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
php数据库配置文件一般做法分享
2012/07/07 PHP
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
curl实现站外采集的方法和技巧
2014/01/31 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
2016/12/24 PHP
PHP字典树(Trie树)定义与实现方法示例
2017/10/09 PHP
PHP实现基于图的深度优先遍历输出1,2,3...n的全排列功能
2017/11/10 PHP
PHP实现链表的定义与反转功能示例
2018/06/09 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
图片上传即时显示缩略图的js代码
2009/05/27 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
利用javascript打开模态对话框(示例代码)
2014/01/11 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
js实现把时间戳转换为yyyy-MM-dd hh:mm 格式(es6语法)
2017/12/28 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
python list中append()与extend()用法分享
2013/03/24 Python
Python之eval()函数危险性浅析
2014/07/03 Python
python操作redis的方法
2015/07/07 Python
TensorFLow 变量命名空间实例
2020/02/11 Python
python实现udp聊天窗口
2020/03/31 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
2020/06/16 Python
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
美国家居装饰和豪华家具购物网站:One Kings Lane
2018/12/24 全球购物
餐饮主管岗位职责
2013/12/10 职场文书
优秀的自荐信要注意哪些
2014/01/03 职场文书
道路交通安全实施方案
2014/03/12 职场文书
党员教师工作决心书
2014/03/13 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
销售员未完成销售业绩的检讨书
2014/10/12 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
法制工作总结2015
2015/07/23 职场文书
心理健康教育主题班会
2015/08/13 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
导游词之永济鹳雀楼
2020/01/16 职场文书
警用民用对讲机找不同
2022/02/18 无线电