我们用Python来自己编写Logistics算法

首先,先将一些理论。Logistics算法用于实现线性可分的二分类问题

1. Sigmoid函数

fx=1/(1+exp(-x))

Sigmoid函数是常用的阈值函数之一,函数图像如下(是不是很像累积分布函数,值域都是0~1)

所以,我们选用Sigmoid函数来表示二分类的概率

Px=sig(Wx+b)

2. 损失函数

为了考察,模型与真实值之间拟合的好坏,我们需要设定损失函数来描述模型与真实值之间的差距。在Logistics模型中,我们选取最大似然函数的对数形式来作为模型的损失函数。

最大似然函数:

h为sigmoid函数,X为特征变量,y为分类标识(0,1)变量 ,m为变量个数

损失函数:

我们的优化目标为最小化损失函数,用到的是梯度下降算法。

3. 梯度下降算法

d为梯度下降方向,w为变量

我们顺着梯度方向更新权值W

直到目标函数达到最优值

4. 梯度下降算法来实现Logistics Regression模型

利用梯度下降算法对损失函数进行处理,求得梯度下降算法的最优值。

小x是样本X的特征分量,由上式得到的更新公式为

将上述的权重更新公式,代入模型进行训练,就得到了Logistics回归模型的权重值

5. 举个栗子

要分类的样本

我们的目标就是要得到上图的那条分界线

# -*- coding: utf-8 -*-#%% 导入包
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np#%% 导入数据
data=pd.read_table('Logistics_Regression/lr.txt',sep='\t',names=['x','y','label'])
print(data.head())
x=data['x']
y=data['y']
label=data['label']
plt.scatter(data[label==0]['x'],data[label==0]['y'],s=10,c='b')
plt.scatter(data[label==1]['x'],data[label==1]['y'],s=10,c='r')
plt.xlabel('x')
plt.ylabel('y')
feature=data.iloc[:,0:2]
#%%
print(np.shape(np.shape(feature)[0]))
print(type(np.shape(feature)[0]))
w=lr_train_bgd(feature,label,1000,0.01)
w=pd.DataFrame(w)
print(w)
xx=np.arange(-0.5,11.5,0.01)
yy=-xx*(float(w.loc[0]/w.loc[1]))+float(w.loc[2]/(-w.loc[1]))
plt.plot(xx,yy)#%%定义sig函数
def sig(x):
#  input: x
#  output: sigmond函数值import numpy as npreturn 1/(1+np.exp(-x))#%% 训练模型
def lr_train_bgd(feature,label,maxCycle,alpha):
#   利用梯度下降算法训练LR模型
#   input: feature(特征) label(标签) maxCycle(最大迭代次数) alpha(学习率)
#   output: w(权重)import numpy as npfeature['bias']=np.ones((np.shape(feature)[0],1))n=np.shape(feature)[1]w=np.mat(np.ones((n,1)))i=0while i<=maxCycle:#小于最大迭代次数i+=1h=sig(np.mat(feature)*w)err=np.mat(label).T-h #误差if i%100==0:print ("\t-----------iter"+str(i)+\",train error rate= "+str(error_rate(h,np.mat(label).T)))w=w+alpha*np.mat(feature).T*errreturn w#%%error_rate函数的实现
def error_rate(h,label):
#计算当前的损失函数值
#input: h:预测值
#       label:实际值
#output:err/m : 错误率import numpy as npm=np.shape(h)[0]sum_err=0.0for i in range(m):if h[i,0]>0 and (1-h[i,0])>0:sum_err-=(label[i,0]*np.log(h[i,0])+\(1-label[i,0])*np.log(1-h[i,0]))else:sum_err-=0return sum_err/m

样本数据在附件中,大家快下载试试吧

6. 结果

得到的权重为4.527177,-4.793982,1.394178

用Python 编写Logistics算法相关推荐

  1. python编写美颜算法

    好的,在 Python 中编写美颜算法需要使用到图像处理和机器学习相关的库. 一种常用的方法是使用 OpenCV 库进行图像处理,可以对图像进行裁剪.旋转.缩放等操作. 然后使用机器学习模型对图像进行 ...

  2. python颜色识别算法_纯Python编写K-means算法,提取图片中的主体颜色

    在文章 今天我用Python手写了一个K-means算法,来完成同样的功能. 聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓"物以类聚,人以群分&qu ...

  3. 用python编写Djikstra算法进行机器人路径规划

    为了机器人在寻路的过程中避障并且找到最短距离,我们需要使用一些算法进行路径规划(Path Planning),常用的算法有Djikstra算法.A*算法等等,在github上有一个非常好的项目叫做Py ...

  4. Python编写每日星座运势获取算法

    Python编写每日星座运势获取算法 获取每日星座运势是许多人关注的一个话题.本文将介绍如何使用Python编写一个获取每日星座运势的程序,并附上完整的源代码. 首先,我们需要导入一些必要的库,包括r ...

  5. python二元函数如何编写_利用python实现PSO算法优化二元函数

    python实现PSO算法优化二元函数,具体代码如下所示: import numpy as np import random import matplotlib.pyplot as plt from ...

  6. 用python编写一个汉诺塔的移动函数_python实现的汉诺塔算法示例

    本文实例讲述了python实现的汉诺塔算法.分享给大家供大家参考,具体如下: 规则: 圆盘从下面开始按大小顺序重新摆放在另一根柱子上.并且规定 在小圆盘上不能放大圆盘 在三根柱子之间一次只能移动一个圆 ...

  7. 1-2 用Python编写【房价预测】模型----paddle

    课程>我的课程>百度架构师手把手教深度学习>1-2 用Python编写[房价预测]模型> 1-2 用Python编写[房价预测]模型 paddle初级教程第一章 第二节 王然( ...

  8. python爬取百度贴吧中的所有邮箱_使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号...

    原标题:使用 Python 编写多线程爬虫抓取百度贴吧邮箱与手机号 不知道大家过年都是怎么过的,反正栏主是在家睡了一天,醒来的时候登QQ发现有人找我要一份贴吧爬虫的源代码,想起之前练手的时候写过一个抓 ...

  9. python中编写函数素数_如何用Python编写素数程序?

    成为一个认证的专业素数是一个大于1的自然数,它没有除1以外的任何除数.你可以用Python编写一个代码来帮助你找到所有的素数.在本文中,我们将按照以下顺序在Python中编写一个素数程序:什么是素数? ...

最新文章

  1. 一维码Codabar简介及其解码实现(zxing-cpp)
  2. 鼠标终将消失,未来我们有哪些人机交互方式?
  3. 第二章 使用unittest模块扩展功能测试
  4. python十个运维实战项目_干货 | 这4个Python实战项目,让你瞬间读懂Python!
  5. 程序员,35岁是职业发展的转折点 (1)
  6. vs2008编写第一个Windows程序
  7. 55)函数指针和其意义
  8. 没有人更比他懂基金业务:博格和他的先锋集团创业史(4):
  9. 世界地图可以无限放大_做外贸有哪些软件可以推荐?
  10. 计算机机械和设计专业介绍,机械类包括哪些专业
  11. Qt实现的局域网通信软件(仿QQ版本)
  12. python日历模块_日历模块---calendar
  13. Ubuntu挂载ISO文件
  14. 光伏电站运维常见故障及处理汇总
  15. php api开发书籍,概述 · ThinkPHP API开发入门 · 看云
  16. 《以太坊攻略》,小白如何逆袭成为技术大咖?要学的全在这里了
  17. 数据结构算法 - ConcurrentHashMap 源码解析
  18. dvt高危患者的护理措施_DVT的预防措施
  19. 美标 三段式、四段式 耳机头 以旧换新
  20. matlab, 生成一个数值一样的n维列向量

热门文章

  1. 01.【入门必备】认识python-->Linux中python环境搭建-->Linux交互模式ipython
  2. 第一章 Java简介
  3. 关于指令test ecx,ecx
  4. 使用HttpURLConnection 越过ssl证书访问htts协议接口
  5. C++STL算法 search你是我的半截的诗
  6. 03、江苏专转本(专业课笔记)第三章、计算机软件
  7. 新手小白开始学习verilog(学习方法有点歪门邪道的,大佬勿喷( ̄▽ ̄)“)
  8. 微信网页程序开发,如何解决后退时重复登录的问题
  9. highCharts第一天学习笔记(面积图)
  10. 怎么查自己电脑服务器信息吗,如何查看自己电脑的服务器