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脚本实现下载合并SAE日志
Feb 10 Python
Python socket网络编程TCP/IP服务器与客户端通信
Jan 05 Python
python3.5实现socket通讯示例(TCP)
Feb 07 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Python简单定义与使用二叉树示例
May 11 Python
python3爬虫学习之数据存储txt的案例详解
Apr 24 Python
python字符串和常用数据结构知识总结
May 21 Python
Python matplotlib学习笔记之坐标轴范围
Jun 28 Python
python机器学习实现决策树
Nov 11 Python
Django创建一个后台的基本步骤记录
Oct 02 Python
python数字类型和占位符详情
Mar 13 Python
Python探索生命起源 matplotlib细胞自动机动画演示
Apr 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
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
面向对象的编程思想在javascript中的运用上部
2009/11/20 Javascript
javascript 构建一个xmlhttp对象池合理创建和使用xmlhttp对象
2010/01/15 Javascript
Juqery Html(),append()等方法的Bug解决方法
2010/12/13 Javascript
javascript+xml实现简单图片轮换(只支持IE)
2012/12/23 Javascript
JavaScript的21条基本知识点
2014/03/04 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
jQuery标签替换函数replaceWith()的使用例子
2014/08/28 Javascript
jQuery插件slides实现无缝轮播图特效
2015/04/17 Javascript
jQuery中使用each处理json数据
2015/04/23 Javascript
JavaScript数据类型学习笔记
2016/01/25 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
React Native验证码倒计时工具类分享
2017/10/24 Javascript
vue+elementUI实现表单和图片上传及验证功能示例
2019/05/14 Javascript
python实现的udp协议Server和Client代码实例
2014/06/04 Python
Python中使用partial改变方法默认参数实例
2015/04/28 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
Python决策树之基于信息增益的特征选择示例
2018/06/25 Python
tensorflow使用神经网络实现mnist分类
2018/09/08 Python
Python使用lambda表达式对字典排序操作示例
2019/07/25 Python
TensorFlow打印输出tensor的值
2020/04/19 Python
python为什么会环境变量设置不成功
2020/06/23 Python
澳大利亚个性化儿童礼品网站:Bright Star Kids
2019/06/14 全球购物
Helly Hansen工作服美国官方网上商店:为最恶劣的环境
2019/09/04 全球购物
拉飞逸官网:Lafayette 148 New York
2020/07/15 全球购物
Servlet的生命周期
2013/08/25 面试题
生物化工专业个人自荐信
2013/09/26 职场文书
区域销售经理岗位职责
2013/12/10 职场文书
先进集体获奖感言
2014/02/13 职场文书
2014年质量管理工作总结
2014/12/01 职场文书
CocosCreator ScrollView优化系列之分帧加载
2021/04/14 Python