机器学习算法(1)——Logistic Regression
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相关推荐
- 机器学习笔记:logistic regression
1 逻辑回归介绍 logistic regressioin是一种二分类算法,通过sigmoid激活函数将线性组合压缩到0和1之间,来代表属于某一个分类的属性 虽然其中带有"回归"两 ...
- 瞎聊机器学习——LR(Logistic Regression)逻辑斯蒂回归(一)
逻辑斯蒂回归是我们在学习以及工作中经常用到的一种分类模型,下面通过本文来讲解一下逻辑斯蒂回归(logistic regression,下文简称LR)的概念.数学推导. 一.逻辑斯蒂回归的概念 首先希望 ...
- 【算法】Logistic regression (逻辑回归) 概述
Logistic regression (逻辑回归)是当前业界比较常用的机器学习方法,用于估计某种事物的可能性.比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等 ...
- 【ML】 李宏毅机器学习二:Logistic Regression
我们将在分类模型基础上继续,并开始学习一种常用的分类算法--Logistic回归,逻辑回归logistic regression,虽然名字是回归,但是实际上它是处理分类问题的算法.简单的说回归问题和分 ...
- FlyAI小课堂:Python机器学习笔记:Logistic Regression
Logistic回归公式推导和代码实现 1,引言 logistic回归是机器学习中最常用最经典的分类方法之一,有人称之为逻辑回归或者逻辑斯蒂回归.虽然他称为回归模型,但是却处理的是分类问题,这主要是因 ...
- 【机器学习算法】Logistic回归分类算法
文章目录 一.Logistic回归 1. 分类问题 2. Logistic函数 (1) 阶跃函数(不可导) (2)可导的阶跃函数 二.Logistic回归的算法原理 1. 基本思路 2. 数学解析 ( ...
- 机器学习实践一 logistic regression regularize
Logistic regression 数据内容: 两个参数 x1 x2 y值 0 或 1 Potting def read_file(file):data = pd.read_csv(file, n ...
- 机器学习算法之 logistic、Softmax 回归
逻辑回归本质是分类问题,而且是二分类问题,不属于回归,但是为什么又叫回归呢.我们可以这样理解,逻辑回归就是用回归的办法来做分类.它是在线性回归的基础上,通过Sigmoid函数进行了非线性转换,从而具有 ...
- 吴恩达机器学习 -- 逻辑回归(Logistic Regression)
7.1 分类问题 如果要预测的变量 是离散值,此时我们应用 logistics regression. 在分类问题中,我们对某一事物进行分类,有二分类和多分类问题.此节先讨论二分类问题,即只有两个分 ...
- 2018-3-20李宏毅机器学习笔记十----------Logistic Regression
上节讲到:既然是一个直线型,只需要求解w和b.为何还要那么费劲的使用概率??? 视频:李宏毅机器学习(2017)_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili https://www.bilib ...
最新文章
- ev3pid巡线_PID算法巡线
- [2-SAT]【学习笔记】【未完】
- 转载ASP.NET MVC 中@Html.Partial,@Html.Action,@Html.RenderPartial,@Html.RenderAction区别
- php连接oracle
- 使用Spring Data的Apache Ignite
- 复习Collection_迭代器使用细节_泛型_综合案例
- 创建项目提交至GitHub
- 库克用iPhone12 Pro Max发中秋祝福 网友调侃:库克也没抢到iPhone13?
- CCF CSP201903-2二十四点
- 国产杀毒软件连续因“作弊”遭全球权威评测机构指责
- linux虚拟机头文件快捷键,linux学习笔记——基础命令、快捷键与认识虚拟机
- spark 两个rdd求交集,差集,并集
- java 百度地图返回坐标_Java使用百度地图API,根据地址,查询地址坐标。
- 路由器(Tenda 811R)变砖——修复
- 使用svn merge 实现回退版本
- JSP入门:什么是JSP和Servlet?
- 点符号垂直居中 html,word垂直居中 word中垂直居中符号在哪里?
- Struts1标签库如何升级到Struts2
- 华为交换机 查ip冲突_华为交换机发现邻居操作,查看端口和ip
- action的编写方式