1、二项逻辑回归模型

二项回归模型是一种二分类模型,由条件概率分布 P(Y|X) 表示,形式为参数化的逻辑分布。这里的随机变量 X 取值为实数,随机变量 Y 取值为 1或0 ,通过监督学习的方法来估计模型参数。

定义1:二项逻辑回归模型是如下的条件概率分布:

这里x为输入,y为{0,1}输出,w为权值参数向量,b为偏置向量,wx为w和x的内积。

2、模型参数的估计

逻辑回归模型学习时,对于给定的数据集 T={(x1,y1),(x2,y2),...,(xn,yn)} 其中x属于R,yi属于{0,1},可以用极大似然估计法估计模型参数,从而得到逻辑回归模型:

设:P(Y=1|x) = h(x),  P(Y=0|x) = 1-h(x),其似然函数为:

对L(w)函数求极大值,就可以得到w的估计值。

这样,问题就变成了以对数似然函数为目标函数的最优化问题。逻辑回归学习中通常采用的方法是梯度下降法以及牛顿法,下文使用梯度下降法。

假设w的极大似然估计值是w^,那么学到的逻辑回归模型为:

3、利用梯度下降法训练获取逻辑回归模型的参数

把上述中的似然函数作为模型参数估计的损失函数,通过梯度下降法对其进行求解,其梯度为:

     
    
    

于是得到更新公式:


模型估计似然函数——损失函数的Python实现:

# 定义损失函数
def error_rate(h, label):'''计算当前的损失函数值input:  h(mat):预测值label(mat):实际值output: err/m(float):错误率'''m = 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

梯度下降法算法的Python实现:

# 定义 BGD 梯度下降法
def lr_train_bgd(feature, label, maxCycle, alpha):n = np.shape(feature)[1]    # 特征的个数w = np.mat(np.ones((n, 1)))   # 初始化权重i = 0while i <= maxCycle:i += 1h = Sigmoid(feature * w)error = label - hif i % 100 == 0:print('\t 迭代次数为=:' + str(i) + ',训练误差率为:' + str(error_rate(h, label)))w = w + alpha * feature.T * errorreturn w

权值保存函数的Python实现:

# 保存最终的模型参数
def save_model(filename, w):m = np.shape(w)[0]f_w = open(filename, 'w')w_array = []for i in range(m):w_array.append(str(w[i, 0]))f_w.write('\t'.join(w_array))f_w.close()

Logistic Regression算法实践完整Python代码:

# -*- coding: utf-8 -*-
# @Time    : 2019-1-8 18:27
# @Author  : Chaucer_Gxm
# @Email   : gxm4167235@163.com
# @File    : Logsitic_Regression.py
# @GitHub  : https://github.com/Chaucergit/Code-and-Algorithm
# @blog    : https://blog.csdn.net/qq_24819773
# @Software: PyCharm
import numpy as np# 定义 Sigmoid 函数
def Sigmoid(x):return 1.0 / (1 + np.exp(-x))# 定义损失函数
def error_rate(h, label):'''计算当前的损失函数值input:  h(mat):预测值label(mat):实际值output: err/m(float):错误率'''m = 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# 定义 BGD 梯度下降法
def lr_train_bgd(feature, label, maxCycle, alpha):n = np.shape(feature)[1]    # 特征的个数w = np.mat(np.ones((n, 1)))   # 初始化权重i = 0while i <= maxCycle:i += 1h = Sigmoid(feature * w)error = label - hif i % 100 == 0:print('\t 迭代次数为=:' + str(i) + ',训练误差率为:' + str(error_rate(h, label)))w = w + alpha * feature.T * errorreturn wdef load_data(file_name):f = open(file_name)  # 打开文件feature_data = []label_data = []for line in f.readlines():feature_tmp = []lable_tmp = []lines = line.strip().split("\t")feature_tmp.append(1)  # 偏置项for i in range(len(lines) - 1):feature_tmp.append(float(lines[i]))lable_tmp.append(float(lines[-1]))feature_data.append(feature_tmp)label_data.append(lable_tmp)f.close()  # 关闭文件return np.mat(feature_data), np.mat(label_data)# 保持最终的模型
def save_model(filename, w):m = np.shape(w)[0]f_w = open(filename, 'w')w_array = []for i in range(m):w_array.append(str(w[i, 0]))f_w.write('\t'.join(w_array))f_w.close()def main():print('***************** 导入模型 *****************')features, labels = load_data('data.txt')print('***************** 训练模型 *****************')w = lr_train_bgd(features, labels, 1000, 0.01)print('***************** 保存模型 *****************')save_model('weights', w)if __name__ == '__main__':main()

训练结果:

>>>权值输出为:1.3941777508748279  4.527177129107412   -4.793981623770905

完整程序(训练程序+测试程序)与数据集地址:

https://github.com/Chaucergit/Code-and-Algorithm/tree/master/ML/1-Logistic%20Regression


参考书目:

[1].统计方法.李航

[2].Python机器学习算法.赵志勇

[3].利用Python进行数据分析.WesKinney著,唐学韬等译

机器学习算法(1)——Logistic Regression相关推荐

  1. 机器学习笔记:logistic regression

    1 逻辑回归介绍 logistic regressioin是一种二分类算法,通过sigmoid激活函数将线性组合压缩到0和1之间,来代表属于某一个分类的属性 虽然其中带有"回归"两 ...

  2. 瞎聊机器学习——LR(Logistic Regression)逻辑斯蒂回归(一)

    逻辑斯蒂回归是我们在学习以及工作中经常用到的一种分类模型,下面通过本文来讲解一下逻辑斯蒂回归(logistic regression,下文简称LR)的概念.数学推导. 一.逻辑斯蒂回归的概念 首先希望 ...

  3. 【算法】Logistic regression (逻辑回归) 概述

    Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性.比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等 ...

  4. 【ML】 李宏毅机器学习二:Logistic Regression

    我们将在分类模型基础上继续,并开始学习一种常用的分类算法--Logistic回归,逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分 ...

  5. FlyAI小课堂:Python机器学习笔记:Logistic Regression

    Logistic回归公式推导和代码实现 1,引言 logistic回归是机器学习中最常用最经典的分类方法之一,有人称之为逻辑回归或者逻辑斯蒂回归.虽然他称为回归模型,但是却处理的是分类问题,这主要是因 ...

  6. 【机器学习算法】Logistic回归分类算法

    文章目录 一.Logistic回归 1. 分类问题 2. Logistic函数 (1) 阶跃函数(不可导) (2)可导的阶跃函数 二.Logistic回归的算法原理 1. 基本思路 2. 数学解析 ( ...

  7. 机器学习实践一 logistic regression regularize

    Logistic regression 数据内容: 两个参数 x1 x2 y值 0 或 1 Potting def read_file(file):data = pd.read_csv(file, n ...

  8. 机器学习算法之 logistic、Softmax 回归

    逻辑回归本质是分类问题,而且是二分类问题,不属于回归,但是为什么又叫回归呢.我们可以这样理解,逻辑回归就是用回归的办法来做分类.它是在线性回归的基础上,通过Sigmoid函数进行了非线性转换,从而具有 ...

  9. 吴恩达机器学习 -- 逻辑回归(Logistic Regression)

    7.1  分类问题 如果要预测的变量 是离散值,此时我们应用 logistics regression. 在分类问题中,我们对某一事物进行分类,有二分类和多分类问题.此节先讨论二分类问题,即只有两个分 ...

  10. 2018-3-20李宏毅机器学习笔记十----------Logistic Regression

    上节讲到:既然是一个直线型,只需要求解w和b.为何还要那么费劲的使用概率??? 视频:李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilib ...

最新文章

  1. ev3pid巡线_PID算法巡线
  2. [2-SAT]【学习笔记】【未完】
  3. 转载ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
  4. php连接oracle
  5. 使用Spring Data的Apache Ignite
  6. 复习Collection_迭代器使用细节_泛型_综合案例
  7. 创建项目提交至GitHub
  8. 库克用iPhone12 Pro Max发中秋祝福 网友调侃:库克也没抢到iPhone13?
  9. CCF CSP201903-2二十四点
  10. 国产杀毒软件连续因“作弊”遭全球权威评测机构指责
  11. linux虚拟机头文件快捷键,linux学习笔记——基础命令、快捷键与认识虚拟机
  12. spark 两个rdd求交集,差集,并集
  13. java 百度地图返回坐标_Java使用百度地图API,根据地址,查询地址坐标。
  14. 路由器(Tenda 811R)变砖——修复
  15. 使用svn merge 实现回退版本
  16. JSP入门:什么是JSP和Servlet?
  17. 点符号垂直居中 html,word垂直居中 word中垂直居中符号在哪里?
  18. Struts1标签库如何升级到Struts2
  19. 华为交换机 查ip冲突_华为交换机发现邻居操作,查看端口和ip
  20. action的编写方式

热门文章

  1. 《运算放大器元器件》的特性分析
  2. CAKEPHP 文件夹结构
  3. 自动控制原理学习笔记(四)
  4. Rosin-Rammler液滴粒径分布
  5. 创建文件夹+移动文件
  6. 利用GAE+WallProxy-plugins搭建个人代理服务器
  7. 局域网下,实现一键共享屏幕到移动设备
  8. gappproxy教育网代理
  9. 学习古月课程遇到的问题以及实践过程
  10. 三西格玛和六西格玛区别是什么?优思学院用一幅图告诉你