python实现逻辑回归的方法示例


Posted in Python onMay 02, 2017

本文实现的原理很简单,优化方法是用的梯度下降。后面有测试结果。

先来看看实现的示例代码:

# coding=utf-8
from math import exp

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


def sigmoid(num):
 '''

 :param num: 待计算的x
 :return: sigmoid之后的数值
 '''
 if type(num) == int or type(num) == float:
  return 1.0 / (1 + exp(-1 * num))
 else:
  raise ValueError, 'only int or float data can compute sigmoid'


class logistic():
 def __init__(self, x, y): 
  if type(x) == type(y) == list:
   self.x = np.array(x)
   self.y = np.array(y)
  elif type(x) == type(y) == np.ndarray:
   self.x = x
   self.y = y
  else:
   raise ValueError, 'input data error'

 def sigmoid(self, x):
  '''

  :param x: 输入向量
  :return: 对输入向量整体进行simgoid计算后的向量结果
  '''
  s = np.frompyfunc(lambda x: sigmoid(x), 1, 1)
  return s(x)

 def train_with_punish(self, alpha, errors, punish=0.0001):
  '''

  :param alpha: alpha为学习速率
  :param errors: 误差小于多少时停止迭代的阈值
  :param punish: 惩罚系数
  :param times: 最大迭代次数
  :return:
  '''
  self.punish = punish
  dimension = self.x.shape[1]
  self.theta = np.random.random(dimension)
  compute_error = 100000000
  times = 0
  while compute_error > errors:
   res = np.dot(self.x, self.theta)
   delta = self.sigmoid(res) - self.y
   self.theta = self.theta - alpha * np.dot(self.x.T, delta) - punish * self.theta # 带惩罚的梯度下降方法
   compute_error = np.sum(delta)
   times += 1

 def predict(self, x):
  '''

  :param x: 给入新的未标注的向量
  :return: 按照计算出的参数返回判定的类别
  '''
  x = np.array(x)
  if self.sigmoid(np.dot(x, self.theta)) > 0.5:
   return 1
  else:
   return 0


def test1():
 '''
 用来进行测试和画图,展现效果
 :return:
 '''
 x, y = make_blobs(n_samples=200, centers=2, n_features=2, random_state=0, center_box=(10, 20))
 x1 = []
 y1 = []
 x2 = []
 y2 = []
 for i in range(len(y)):
  if y[i] == 0:
   x1.append(x[i][0])
   y1.append(x[i][1])
  elif y[i] == 1:
   x2.append(x[i][0])
   y2.append(x[i][1])
 # 以上均为处理数据,生成出两类数据
 p = logistic(x, y)
 p.train_with_punish(alpha=0.00001, errors=0.005, punish=0.01) # 步长是0.00001,最大允许误差是0.005,惩罚系数是0.01
 x_test = np.arange(10, 20, 0.01)
 y_test = (-1 * p.theta[0] / p.theta[1]) * x_test
 plt.plot(x_test, y_test, c='g', label='logistic_line')
 plt.scatter(x1, y1, c='r', label='positive')
 plt.scatter(x2, y2, c='b', label='negative')
 plt.legend(loc=2)
 plt.title('punish value = ' + p.punish.__str__())
 plt.show()


if __name__ == '__main__':
 test1()

运行结果如下图

python实现逻辑回归的方法示例

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中的自定义函数学习笔记
Sep 23 Python
Python中使用第三方库xlrd来读取Excel示例
Apr 05 Python
深入浅析python with语句简介
Apr 11 Python
Python中跳台阶、变态跳台阶与矩形覆盖问题的解决方法
May 19 Python
Django 使用Ajax进行前后台交互的示例讲解
May 28 Python
python程序输出无内容的解决方式
Apr 09 Python
Jupyter Notebook折叠输出的内容实例
Apr 22 Python
Python代码执行时间测量模块timeit用法解析
Jul 01 Python
基于Django集成CAS实现流程详解
Nov 28 Python
PyCharm+Miniconda3安装配置教程详解
Feb 16 Python
python基础之匿名函数详解
Apr 21 Python
Python破解极验滑动验证码详细步骤
May 21 Python
pycharm中连接mysql数据库的步骤详解
May 02 #Python
Python多线程实现同步的四种方式
May 02 #Python
Python之Web框架Django项目搭建全过程
May 02 #Python
python3实现抓取网页资源的 N 种方法
May 02 #Python
Pycharm学习教程(2) 代码风格
May 02 #Python
Pycharm学习教程(1) 定制外观
May 02 #Python
pycharm安装图文教程
May 02 #Python
You might like
adodb与adodb_lite之比较
2006/12/31 PHP
escape unescape的php下的实现方法
2007/04/27 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
2016/04/07 PHP
基于Laravel5.4实现多字段登录功能方法示例
2017/08/11 PHP
找到一点可怜的关于dojo资料,谢谢作者!
2006/12/06 Javascript
jquery中dom操作和事件的实例学习 仿yahoo邮箱登录框的提示效果
2011/11/30 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
JS获取地址栏参数的小例子
2013/08/23 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
微信小程序开发教程-手势解锁实例
2017/01/06 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
2017/04/19 Javascript
JavaScript贪吃蛇小组件实例代码
2017/08/20 Javascript
iview给radio按钮组件加点击事件的实例
2017/09/30 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
JS浅拷贝和深拷贝原理与实现方法分析
2019/02/28 Javascript
js数组的基本使用总结
2021/01/18 Javascript
python基于twisted框架编写简单聊天室
2018/01/02 Python
Python数据类型之Set集合实例详解
2019/05/07 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
代码实例讲解python3的编码问题
2019/07/08 Python
python 监测内存和cpu的使用率实例
2019/11/28 Python
详解Pycharm出现out of memory的终极解决方法
2020/03/03 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
质检部经理岗位职责
2014/02/19 职场文书
成立公司计划书
2014/05/07 职场文书
二年级语文上册复习计划
2015/01/19 职场文书
2016元旦晚会主持词开场白和结束语
2015/12/04 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
MySQL系列之二 多实例配置
2021/07/02 MySQL
【海涛教你打DOTA】剑圣第一人称视角解说
2022/04/01 DOTA
V Rising 服务器搭建图文教程
2022/06/16 Servers
css如何把元素固定在容器底部的四种方式
2022/06/16 HTML / CSS
webpack介绍使用配置教程详解webpack介绍和使用
2022/06/25 Javascript