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爬虫_自动获取seebug的poc实例
Aug 05 Python
Python 监测文件是否更新的方法
Jun 10 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
使用Python和OpenCV检测图像中的物体并将物体裁剪下来
Oct 30 Python
Python守护进程实现过程详解
Feb 10 Python
详解用Python进行时间序列预测的7种方法
Mar 13 Python
Python urllib2运行过程原理解析
Jun 04 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
接口自动化多层嵌套json数据处理代码实例
Nov 20 Python
python自动化之如何利用allure生成测试报告
May 02 Python
如何在python中实现ECDSA你知道吗
Nov 23 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 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 使用post,get的一种简洁方式
2010/04/25 PHP
深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非
2013/06/05 PHP
php注册登录系统简化版
2020/12/28 PHP
自制PHP框架之路由与控制器
2017/05/07 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
PHP 8新特性简介
2020/08/18 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
JavaScript DOM 学习第九章 选取范围的介绍
2010/02/19 Javascript
小米公司JavaScript面试题
2014/12/29 Javascript
JS表的模拟方法
2015/02/05 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
Node.js配合node-http-proxy解决本地开发ajax跨域问题
2016/08/31 Javascript
flexslider.js实现移动端轮播
2017/02/05 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
element-ui 的el-button组件中添加自定义颜色和图标的实现方法
2018/10/26 Javascript
Vue项目从webpack3.x升级webpack4不完全指南
2019/04/28 Javascript
微信小程序日历插件代码实例
2019/12/04 Javascript
WEB前端性能优化的7大手段详解
2020/02/04 Javascript
使用Vue+Django+Ant Design做一个留言评论模块的示例代码
2020/06/01 Javascript
Python提取网页中超链接的方法
2016/09/18 Python
正确理解python中的关键字“with”与上下文管理器
2017/04/21 Python
python实现图书馆研习室自动预约功能
2018/04/27 Python
python获取txt文件词向量过程详解
2019/07/05 Python
Python基于pip实现离线打包过程详解
2020/05/15 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
Charlotte Tilbury美国官网:英国美妆品牌
2017/10/13 全球购物
竞选班委演讲稿
2014/04/28 职场文书
企业演讲稿范文大全
2014/05/20 职场文书
大学活动总结模板
2014/07/10 职场文书
2015年事业单位工作总结
2015/04/27 职场文书
获奖感言一句话
2015/07/31 职场文书
2016年度优秀辅导员事迹材料
2016/02/26 职场文书
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
Python中如何处理常见报错
2022/01/18 Python