Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >机器学习-理解Logistic Regression

机器学习-理解Logistic Regression

作者头像
XXXX-user
发布于 2019-09-19 07:04:25
发布于 2019-09-19 07:04:25
74100
代码可运行
举报
文章被收录于专栏:不仅仅是python不仅仅是python
运行总次数:0
代码可运行

背景介绍

本文讨论了Logistic回归的基础知识及其在Python中的实现。逻辑回归基本上是一种监督分类算法。在分类问题中,目标变量(或输出)y对于给定的一组特征(或输入)X,只能采用离散值。

与普遍看法相反,逻辑回归是一种回归模型。 该模型建立回归模型以预测给定数据条目属于编号为“1”的类别的概率。 就像线性回归假设数据遵循线性函数一样,Logistic回归使用sigmoid函数对数据进行建模。

只有当决策阈值进入图片时,逻辑回归才成为分类技术。 阈值的设置是Logistic回归的一个非常重要的方面,并且取决于分类问题本身。

阈值的决定主要受精度和召回值的影响。 理想情况下,我们希望精度和召回都是1,但很少这种情况。 在Precision-Recall权衡的情况下,我们使用以下参数来决定thresold:

1.低精度/高回调:在我们想要减少假阴性数量而不必减少误报数量的应用中,我们选择具有低精度值或高回调值的决策值。 例如,在癌症诊断应用中,如果患者被错误地诊断为患有癌症,我们不希望任何受影响的患者被归类为不受影响而没有给予足够的注意。 这是因为,可以通过其他医学疾病来检测不存在癌症,但是在已经被拒绝的候选者中不能检测到疾病的存在。

2.高精度/低回调:在我们希望减少误报数量而不必减少假阴性数量的应用中,我们选择具有高精度值或低回调值的决策值。例如,如果我们对客户进行分类,他们是否会对个性化广告做出积极或消极的反应,我们希望绝对确定客户会对广告做出积极反应,否则,负面反应会导致客户的潜在销售损失。

根据类别数量,Logistic回归可分为:

二项式:目标变量只能有两种可能的类型:“0”或“1”代表“赢”与“损失”,“通过”与“失败”,“死”与“活着”等。

多项式:目标变量可以具有3种或更多种未被排序的可能类型(即类型没有定量意义),例如“疾病A”与“疾病B”对比“疾病C”。

顺序:它处理具有有序类别的目标变量。 例如,测试分数可以分类为:“非常差”,“差”,“好”,“非常好”。 在这里,每个类别可以给出分数,如0,1,2,3。

首先,我们探索最简单的Logistic回归形式,即二项Logistic回归。

二项Logistic回归

考虑一个示例数据集,该数据集将学习小时数与考试结果进行映射。结果只能采用两个值,即通过(1)或失败(0):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
HOURS(X)0.500.751.001.251.501.752.002.252.502.753.003.253.503.754.004.254.504.755.005.50PASS(Y)00000010101010111111

所以我们有:

即y是分类目标变量,它只能采用两种可能的类型:“0”或“1”。

为了概括我们的模型,我们假设:

  • 数据集具有'p'特征变量和'n'观察值。
  • 特征矩阵表示为:

被称为学习率,需要明确设置。

让我们在样本数据集上看到上面技术的python实现:

import csvimport numpy as npimport matplotlib.pyplot as plt def loadCSV(filename): ''' function to load dataset ''' with open(filename,"r") as csvfile: lines = csv.reader(csvfile) dataset = list(lines) for i in range(len(dataset)): dataset[i] = [float(x) for x in dataset[i]] return np.array(dataset) def normalize(X): ''' function to normalize feature matrix, X ''' mins = np.min(X, axis = 0) maxs = np.max(X, axis = 0) rng = maxs - mins norm_X = 1 - ((maxs - X)/rng) return norm_X def logistic_func(beta, X): ''' logistic(sigmoid) function ''' return 1.0/(1 + np.exp(-np.dot(X, beta.T))) def log_gradient(beta, X, y): ''' logistic gradient function ''' first_calc = logistic_func(beta, X) - y.reshape(X.shape[0], -1) final_calc = np.dot(first_calc.T, X) return final_calc def cost_func(beta, X, y): ''' cost function, J ''' log_func_v = logistic_func(beta, X) y = np.squeeze(y) step1 = y * np.log(log_func_v) step2 = (1 - y) * np.log(1 - log_func_v) final = -step1 - step2 return np.mean(final) def grad_desc(X, y, beta, lr=.01, converge_change=.001): ''' gradient descent function ''' cost = cost_func(beta, X, y) change_cost = 1 num_iter = 1 while(change_cost > converge_change): old_cost = cost beta = beta - (lr * log_gradient(beta, X, y)) cost = cost_func(beta, X, y) change_cost = old_cost - cost num_iter += 1 return beta, num_iter def pred_values(beta, X): ''' function to predict labels ''' pred_prob = logistic_func(beta, X) pred_value = np.where(pred_prob >= .5, 1, 0) return np.squeeze(pred_value) def plot_reg(X, y, beta): ''' function to plot decision boundary ''' # labelled observations x_0 = X[np.where(y == 0.0)] x_1 = X[np.where(y == 1.0)] # plotting points with diff color for diff label plt.scatter([x_0[:, 1]], [x_0[:, 2]], c='b', label='y = 0') plt.scatter([x_1[:, 1]], [x_1[:, 2]], c='r', label='y = 1') # plotting decision boundary x1 = np.arange(0, 1, 0.1) x2 = -(beta[0,0] + beta[0,1]*x1)/beta[0,2] plt.plot(x1, x2, c='k', label='reg line') plt.xlabel('x1') plt.ylabel('x2') plt.legend() plt.show() if __name__ == "__main__": # load the dataset dataset = loadCSV('dataset1.csv') # normalizing feature matrix X = normalize(dataset[:, :-1]) # stacking columns wth all ones in feature matrix X = np.hstack((np.matrix(np.ones(X.shape[0])).T, X)) # response vector y = dataset[:, -1] # initial beta values beta = np.matrix(np.zeros(X.shape[1])) # beta values after running gradient descent beta, num_iter = grad_desc(X, y, beta) # estimated beta values and number of iterations print("Estimated regression coefficients:", beta) print("No. of iterations:", num_iter) # predicted labels y_pred = pred_values(beta, X) # number of correctly predicted labels print("Correctly predicted labels:", np.sum(y == y_pred)) # plotting regression line plot_reg(X, y, beta)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Estimated regression coefficients: [[  1.70474504  15.04062212 -20.47216021]]
No. of iterations: 2612
Correctly predicted labels: 100

意:梯度下降是估算

的众多方法之一。

基本上,这些是更高级的算法,一旦您定义了成本函数和渐变,就可以在Python中轻松运行。这些算法是:

  • BFGS(Broyden-Fletcher-Goldfarb-Shanno算法)
  • L-BFGS(与BFGS一样,但使用有限的内存)
  • 共轭梯度

使用这些算法中的任何一种优于梯度下降的优点/缺点:

好处

  • 不需要选择学习率
  • 经常跑得更快(并非总是如此)
  • 可以在数值上近似梯度(并不总是很好)

缺点

  • 更复杂
  • 除非你了解具体细节,否则更多的是黑匣子
多项Logistic回归

在Multiomial Logistic回归中,输出变量可以具有两个以上可能的离散输出。考虑一下数字数据集。这里,输出变量是数字值,它可以取出(0,12,3,4,5,6,7,8,9)中的值。

下面给出了使用scikit实现Multinomial Logisitc回归 - 学习对数字数据集进行预测。

from sklearn import datasets, linear_model, metrics # load the digit datasetdigits = datasets.load_digits() # defining feature matrix(X) and response vector(y)X = digits.datay = digits.target # splitting X and y into training and testing setsfrom sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=1) # create logistic regression objectreg = linear_model.LogisticRegression() # train the model using the training setsreg.fit(X_train, y_train) # making predictions on the testing sety_pred = reg.predict(X_test) # comparing actual response values (y_test) with predicted response values (y_pred)print("Logistic Regression model accuracy(in %):", metrics.accuracy_score(y_test, y_pred)*100)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Logistic Regression model accuracy(in %): 95.6884561892

最后,这里有一些关于Logistic回归思考的观点:

  • 不假设因变量和自变量之间存在线性关系,但它假设解释变量的logit与响应之间存在线性关系。
  • 独立变量甚至可以是原始自变量的幂项或一些其他非线性变换。
  • 因变量不需要是正态分布的,但它通常假设来自指数族的分布(例如二项式,泊松,多项式,正态,......); 二元逻辑回归假设响应的二项分布。
  • 方差的同质性不需要满足。
  • 错误需要是独立的,但不是正常分布的。
  • 它使用最大似然估计(MLE)而不是普通最小二乘(OLS)来估计参数,因此依赖于大样本近似。
  • 参考文献:
  • http://cs229.stanford.edu/notes/cs229-notes1.pdf
  • http://machinelearningmastery.com/logistic-regression-for-machine-learning/
  • https://onlinecourses.science.psu.edu/stat504/node/164

本文由Nikhil Kumar撰写。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 yale记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
机器学习第5天:逻辑回归
简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。
K同学啊
2019/01/22
5740
机器学习第5天:逻辑回归
简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。
三猫
2021/10/27
5960
机器学习第5天:逻辑回归
利用Theano理解深度学习——Logistic Regression
一、Logistic Regression 1、LR模型 image.png 2、损失函数 image.png 3、随机梯度下降法 为了求解LR模型中的参数,在上面定义了LR模型的损失函数,即NLL。
felixzhao
2018/03/19
8360
利用Theano理解深度学习——Logistic Regression
100天搞定机器学习|Day4-6 逻辑回归
  在分类问题中,比如判断邮件是否为垃圾邮件,判断肿瘤是否为阳性,目标变量是离散的,只有两种取值,通常会编码为0和1。假设我们有一个特征X,画出散点图,结果如下所示。这时候如果我们用线性回归去拟合一条直线:hθ(X) = θ0+θ1X,若Y≥0.5则判断为1,否则为0。这样我们也可以构建出一个模型去进行分类,但是会存在很多的缺点,比如稳健性差、准确率低。而逻辑回归对于这样的问题会更加合适。
统计学家
2019/04/08
4820
100天搞定机器学习|Day4-6 逻辑回归
从零开始实现Logistic Regression,最简单的单元深度神经网络。
来自吴恩达深度学习视频,第二周编程作业,有详细注释。 如果直接看代码对你来说太难,参考 https://blog.csdn.net/u013733326/article/details/79639509。 # Logistic Regression with a Neural Network mindset # Initializing parameters # Calculating the cost function and its gradient # Using an optimizat
Steve Wang
2019/05/26
6010
自制正方软件系统验证码的识别程序(3/4)
这个文件里主要提供了5个函数,提供给package.py使用,特别是对特征值的计算。
mythsman
2022/11/14
1.3K0
教程丨机器学习算法:从头开始构建逻辑回归模型
原作:Rohith Gandhi 郭一璞 编译自 Hacher Noon 量子位 出品 | 公众号 QbitAI 逻辑回归是继线性回归之后最著名的机器学习算法。 在很多方面,线性回归和逻辑回归是相似的
量子位
2018/07/20
6270
机器学习第7天:深入了解逻辑回归
简单来说, 逻辑回归(Logistic Regression)是一种用于解决二分类(0 or 1)问题的机器学习方法,用于估计某种事物的可能性。比如某用户购买某商品的可能性,某病人患有某种疾病的可能性,以及某广告被用户点击的可能性等。
K同学啊
2019/01/22
6300
逼疯懒癌:“机器学习100天大作战”正式开始!
机器学习已经成为人工智能中发展最快,应用最广、最重要的分支之一。但是这条学习之路似乎并不是那么容易,也不总是一帆风顺的。
AI科技大本营
2018/08/17
9130
逼疯懒癌:“机器学习100天大作战”正式开始!
第二周编程作业 -Logistic Regression with a Neural Network mindsetLogistic Regression with a Neural Network
Logistic Regression with a Neural Network mindset Welcome to your first (required) programming assignment! You will build a logistic regression classifier to recognize cats. This assignment will step you through how to do this with a Neural Network mindse
致Great
2018/04/11
2.7K0
第二周编程作业 -Logistic Regression with a Neural Network mindsetLogistic Regression with a Neural Network
python实现逻辑回归
其中θ表示权重参数,x表示输入。θTx为决策边界,就是该决策边界将不同类数据区分开来。
西西嘛呦
2020/08/26
9430
python实现逻辑回归
机器学习入门——使用python进行监督学习
什么是监督学习? 在监督学习中,我们首先要导入包含训练特征和目标特征的数据集。监督式学习算法会学习训练样本与其相关的目标变量之间的关系,并应用学到的关系对全新输入(无目标特征)进行分类。 为了说明如何
AiTechYun
2018/03/02
1.5K0
机器学习入门——使用python进行监督学习
深入浅出Logistic Regression之二分类
---- 概述 在深度学习笔记-神经网络基础文章里面介绍过Logistic Regression模型进行二分类和推导。比如:我们现在有一张彩色图片让计算机自己识别图片中的动物是否是cat(猫)。下面我
吕海峰
2018/04/03
2K0
深入浅出Logistic Regression之二分类
cs230 深度学习 Lecture 2 编程作业: Logistic Regression with a Neural Network mindset
---- 1. 将 Logistic 表达为 神经网络 的形式 本文的目的是要用神经网络的思想实现 Logistic Regression,输入一张图片就可以判断该图片是不是猫。 那么什么是神经网络呢
杨熹
2018/07/04
8770
【ML】逻辑回归——详细概述
逻辑回归在20世纪早期被用于生物科学。它后来被用于许多社会科学应用。因变量(目标)为分类变量时采用Logistic回归。
陆勤_数据人网
2018/12/26
8050
吴恩达机器学习III
第一题就是求正则化的代价函数,这操作基本上一样的,就提一嘴数据集的格式:X是测试用的数据集,每个行向量都是一组数据,h求出来的就是一组0-1向量
用户7267083
2022/12/08
2520
吴恩达机器学习III
完全汇总,十大机器学习算法!!
接下来我会从每个算法模型的介绍、基本原理、优缺点以及适用场景注意叙述,最后会基于开源数据集给出一个比较入门型的案例供大家学习~
Python编程爱好者
2024/04/12
4610
完全汇总,十大机器学习算法!!
机器学习作业2-逻辑回归
g 代表一个常用的逻辑函数(logistic function)为S形函数(Sigmoid function),公式为:
公号sumsmile
2021/03/04
7000
机器学习作业2-逻辑回归
探索监督式机器学习算法
这周送来一篇python实现的机器学习的相关文章。一起学习吧。能力有限,一切以英文原文为准。里面部分公式改好好久,总是有一些变不过来,这些暂时看英文里面的吧。
WindCoder
2018/09/19
9390
探索监督式机器学习算法
机器学习中的逻辑回归
逻辑回归是机器学习领域中一种用于二分类问题的常用算法。尽管其名字中包含"回归"一词,但实际上,逻辑回归是一种分类算法,用于估计输入特征与某个事件发生的概率之间的关系。本文将深入讲解逻辑回归的原理、实际应用以及使用 Python 进行实现的代码。
GeekLiHua
2025/01/21
1710
相关推荐
机器学习第5天:逻辑回归
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验