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获得文件创建时间和修改时间的方法
Jun 30 Python
在Django框架中编写Context处理器的方法
Jul 20 Python
Windows中使用wxPython和py2exe开发Python的GUI程序的实例教程
Jul 11 Python
Python3中使用urllib的方法详解(header,代理,超时,认证,异常处理)
Sep 21 Python
Python内建模块struct实例详解
Feb 02 Python
Python 如何提高元组的可读性
Aug 26 Python
Python Process多进程实现过程
Oct 22 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
Python基于smtplib模块发送邮件代码实例
May 29 Python
Python调用.net动态库实现过程解析
Jun 05 Python
python实现凯撒密码、凯撒加解密算法
Jun 11 Python
Python try except else使用详解
Jan 12 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
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
php 小乘法表实现代码
2009/07/16 PHP
PHP 5.3.1 安装包 VC9 VC6不同版本的区别是什么
2010/07/04 PHP
php5.5新数组函数array_column使用
2013/07/08 PHP
PHP单元测试框架PHPUnit用法详解
2019/01/23 PHP
JQUERY操作JSON实例代码
2010/02/09 Javascript
JS简单实现文件上传实例代码(无需插件)
2013/11/15 Javascript
JavaScript处理解析JSON数据过程详解
2015/09/11 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
详解jQuery同步Ajax带来的UI线程阻塞问题及解决办法
2017/08/09 jQuery
Javascript中prototype与__proto__的关系详解
2018/03/11 Javascript
深入理解JS中Number(),parseInt(),parseFloat()三者比较
2018/08/24 Javascript
Vue项目中使用jquery的简单方法
2019/05/16 jQuery
浅谈bootstrap layer.open中end的使用方法
2019/09/12 Javascript
如何基于layui的laytpl实现数据绑定的示例代码
2020/04/10 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
详解uniapp的全局变量实现方式
2021/01/11 Javascript
Vue实现圆环进度条的示例
2021/02/06 Vue.js
Vue SPA 首屏优化方案
2021/02/26 Vue.js
[02:03]永远的信仰DOTA2 中国军团历届国际邀请赛回顾
2016/06/26 DOTA
python+opencv实现动态物体识别
2018/01/09 Python
python 列表,数组,矩阵两两转换tolist()的实例
2018/04/04 Python
使用python读取csv文件快速插入数据库的实例
2018/06/21 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Python利用pip安装tar.gz格式的离线资源包
2020/09/14 Python
Python实现EM算法实例代码
2020/10/04 Python
HTML5 Canvas自定义圆角矩形与虚线示例代码
2013/08/02 HTML / CSS
Hammitt官网:设计师手袋
2020/05/23 全球购物
工程部经理岗位职责
2013/12/08 职场文书
小学教师办公室制度
2014/02/03 职场文书
公证处委托书
2015/01/28 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
2019年自助餐厅创业计划书模板
2019/08/22 职场文书