python实现逻辑回归的示例


Posted in Python onOctober 09, 2020

代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_classification


def initialize_params(dims):
  w = np.zeros((dims, 1))
  b = 0
  return w, b

def sigmoid(x):
  z = 1 / (1 + np.exp(-x))
  return z

def logistic(X, y, w, b):
  num_train = X.shape[0]
  y_hat = sigmoid(np.dot(X, w) + b)
  loss = -1 / num_train * np.sum(y * np.log(y_hat) + (1-y) * np.log(1-y_hat))
  cost = -1 / num_train * np.sum(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat))
  dw = np.dot(X.T, (y_hat - y)) / num_train
  db = np.sum(y_hat - y) / num_train
  return y_hat, cost, dw, db


def linear_train(X, y, learning_rate, epochs):
  # 参数初始化
  w, b = initialize_params(X.shape[1])

  loss_list = []
  for i in range(epochs):
    # 计算当前的预测值、损失和梯度
    y_hat, loss, dw, db = logistic(X, y, w, b)
    loss_list.append(loss)

    # 基于梯度下降的参数更新
    w += -learning_rate * dw
    b += -learning_rate * db

    # 打印迭代次数和损失
    if i % 10000 == 0:
      print("epoch %d loss %f" % (i, loss))

    # 保存参数
    params = {
      'w': w,
      'b': b
    }

    # 保存梯度
    grads = {
      'dw': dw,
      'db': db
    }

  return loss_list, loss, params, grads

def predict(X, params):
  w = params['w']
  b = params['b']
  y_pred = sigmoid(np.dot(X, w) + b)
  return y_pred


if __name__ == "__main__":
  # 生成数据
  X, labels = make_classification(n_samples=100,
                  n_features=2,
                  n_informative=2,
                  n_redundant=0,
                  random_state=1,
                  n_clusters_per_class=2)
  print(X.shape)
  print(labels.shape)

  # 生成伪随机数
  rng = np.random.RandomState(2)
  X += 2 * rng.uniform(size=X.shape)

  # 划分训练集和测试集
  offset = int(X.shape[0] * 0.9)
  X_train, y_train = X[:offset], labels[:offset]
  X_test, y_test = X[offset:], labels[offset:]
  y_train = y_train.reshape((-1, 1))
  y_test = y_test.reshape((-1, 1))
  print('X_train=', X_train.shape)
  print('y_train=', y_train.shape)
  print('X_test=', X_test.shape)
  print('y_test=', y_test.shape)

  # 训练
  loss_list, loss, params, grads = linear_train(X_train, y_train, 0.01, 100000)
  print(params)

  # 预测
  y_pred = predict(X_test, params)
  print(y_pred[:10])

以上就是python实现逻辑回归的示例的详细内容,更多关于python 逻辑回归的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python 文件管理实例详解
Nov 10 Python
Windows下python2.7.8安装图文教程
May 26 Python
Python中在脚本中引用其他文件函数的实现方法
Jun 23 Python
python遍历 truple list dictionary的几种方法总结
Sep 11 Python
Python实现二分查找与bisect模块详解
Jan 13 Python
关于Python数据结构中字典的心得
Dec 04 Python
python实现数据库跨服务器迁移
Apr 12 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
Numpy 改变数组维度的几种方法小结
Aug 02 Python
python实现登录与注册系统
Nov 30 Python
python自动化调用百度api解决验证码
Apr 13 Python
Python装饰器详细介绍
Mar 25 Python
Django生成数据库及添加用户报错解决方案
Oct 09 #Python
pip已经安装好第三方库但pycharm中import时还是标红的解决方案
Oct 09 #Python
python实现数据结构中双向循环链表操作的示例
Oct 09 #Python
Python collections模块的使用方法
Oct 09 #Python
python爬取代理IP并进行有效的IP测试实现
Oct 09 #Python
Python中Selenium模块的使用详解
Oct 09 #Python
python利用platform模块获取系统信息
Oct 09 #Python
You might like
php正则
2006/07/07 PHP
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
android上传图片到PHP的过程详解
2015/08/03 PHP
Zend Framework教程之模型Model用法简单实例
2016/03/04 PHP
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
Google 静态地图API实现代码
2010/11/19 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
jquery无刷新验证邮箱地址实现实例
2014/02/19 Javascript
jquery如何根据值设置默认的选中项
2014/03/17 Javascript
js全选按钮的实现方法
2015/11/17 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
2016/01/17 Javascript
高效Web开发的10个jQuery代码片段
2016/07/22 Javascript
JavaScript遍历Json串浏览器输出的结果不统一问题
2016/11/03 Javascript
javascript稀疏数组(sparse array)和密集数组用法分析
2016/12/28 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
ES6中的箭头函数实例详解
2017/04/06 Javascript
vue生成token保存在客户端localStorage中的方法
2017/10/25 Javascript
JavaScript Window窗口对象属性和使用方法
2020/01/19 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
python中函数传参详解
2016/07/03 Python
用python写个自动SSH登录远程服务器的小工具(实例)
2017/06/17 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
python实现移位加密和解密
2019/03/22 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
Python 实现微信自动回复的方法
2020/09/11 Python
Lacoste(法国鳄鱼)加拿大官网:以标志性的POLO衫而闻名
2019/05/15 全球购物
排序都有哪几种方法?请列举。用JAVA实现一个快速排序
2014/02/16 面试题
英语自荐信范文
2013/12/11 职场文书
2014年单位植树节活动方案
2014/03/23 职场文书
2014年副班长工作总结
2014/12/10 职场文书
初婚初育证明范本
2015/06/18 职场文书
初中团委工作总结
2015/08/13 职场文书
2016年共产党员个人承诺书
2016/03/24 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android