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抓taobao图片爬虫
Oct 26 Python
Python中使用PIPE操作Linux管道
Feb 04 Python
Python中设置变量作为默认值时容易遇到的错误
Apr 03 Python
Python安装第三方库及常见问题处理方法汇总
Sep 13 Python
Python微信库:itchat的用法详解
Aug 14 Python
Django数据库操作的实例(增删改查)
Sep 04 Python
python调用c++传递数组的实例
Feb 13 Python
Django组件content-type使用方法详解
Jul 19 Python
简单易懂Pytorch实战实例VGG深度网络
Aug 27 Python
Python实现井字棋小游戏
Mar 09 Python
Anaconda+Pycharm环境下的PyTorch配置方法
Mar 13 Python
如何在python中判断变量的类型
Jul 29 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
Protoss魔法科技
2020/03/14 星际争霸
改进的IP计数器
2006/10/09 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
PHP实现mysqli批量执行多条语句的方法示例
2017/07/22 PHP
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
js获取input长度并根据页面宽度设置其大小及居中对齐
2014/08/22 Javascript
jQuery中offset()方法用法实例
2015/01/16 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
详解Nodejs之静态资源处理
2017/06/05 NodeJs
详解vue slot插槽的使用方法
2017/06/13 Javascript
JS 验证密码 不能为空,必须含有数字、字母、特殊字符,长度在8-12位
2017/06/21 Javascript
vue-cli中打包图片路径错误的解决方法
2017/10/26 Javascript
原生js封装的ajax方法示例
2018/08/02 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
JavaScript命名空间模式实例详解
2019/06/20 Javascript
js脚本中执行java后台代码方法解析
2019/10/11 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
Vue中添加滚动事件设置的方法详解
2020/09/14 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
[02:12]打造更好的电竞完美世界:完美盛典回顾篇
2018/12/19 DOTA
python中的对象拷贝示例 python引用传递
2014/01/23 Python
Python的Flask站点中集成xhEditor文本编辑器的教程
2016/06/13 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
基于python实现高速视频传输程序
2019/05/05 Python
css3中新增的样式使用示例附效果图
2014/08/19 HTML / CSS
HTML5 visibilityState属性详细介绍和使用实例
2014/05/03 HTML / CSS
终端业务员岗位职责
2013/11/27 职场文书
教师实习自我鉴定
2013/12/18 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
事假请假条范文
2014/04/11 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
初中差生评语
2014/12/29 职场文书
幼儿园万圣节活动总结
2015/05/05 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书