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文件读写并使用mysql批量插入示例分享(python操作mysql)
Feb 17 Python
Python序列之list和tuple常用方法以及注意事项
Jan 09 Python
python通过colorama模块在控制台输出彩色文字的方法
Mar 19 Python
深入讨论Python函数的参数的默认值所引发的问题的原因
Mar 30 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
python GUI库图形界面开发之PyQt5单行文本框控件QLineEdit详细使用方法与实例
Feb 27 Python
基于python实现地址和经纬度转换
May 19 Python
Python unittest单元测试openpyxl实现过程解析
May 27 Python
python3爬虫中引用Queue的实例讲解
Nov 24 Python
Python中的面向接口编程示例详解
Jan 17 Python
python控制台打印log输出重复的解决方法
May 14 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
可快速识别放射性物质-国外大神教你diy一个开放式辐射探测器
2020/03/12 无线电
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
php使用curl获取https请求的方法
2015/02/11 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
关于viewport,Ext.panel和Ext.form.panel的关系
2009/05/07 Javascript
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
判断文件是否正在被使用的JS代码
2013/12/21 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
基于jQuery实现点击弹出层实例代码
2016/01/01 Javascript
快速解决js动态改变dom元素属性后页面及时渲染的问题
2016/07/06 Javascript
node.js中 stream使用教程
2016/08/28 Javascript
js点击任意区域弹出层消失实现代码
2016/12/27 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
详解layui弹窗父子窗口之间传参数的方法
2018/01/16 Javascript
Vue利用History记录上一页面的数据方法实例
2018/11/02 Javascript
python使用7z解压apk包的方法
2015/04/18 Python
Python实现计算文件夹下.h和.cpp文件的总行数
2015/04/23 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
Python类属性的延迟计算
2016/10/22 Python
解决每次打开pycharm直接进入项目的问题
2018/10/28 Python
python中hasattr()、getattr()、setattr()函数的使用
2019/08/16 Python
手把手教你进行Python虚拟环境配置教程
2020/02/03 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Mac中PyCharm配置Anaconda环境的方法
2020/03/04 Python
python输出结果刷新及进度条的实现操作
2020/07/13 Python
python产生模拟数据faker库的使用详解
2020/11/04 Python
Eagle Eyes Optics鹰眼光学:高性能太阳镜
2018/12/07 全球购物
美国领先的低折扣旅行网站:Hotwire
2019/01/19 全球购物
新书吧创业计划书
2014/01/31 职场文书
《假如》教学反思
2014/04/17 职场文书
学习张林森心得体会
2014/09/10 职场文书
部队个人年终总结
2015/03/02 职场文书
Python3.8官网文档之类的基础语法阅读
2021/09/04 Python
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL