逻辑回归、激活函数sigmoid、损失及优化、案例代码实现

news2024/11/17 13:51:45

一、逻辑回归

逻辑回归(Logistic Regression):是机器学习中的一种分类模型,是一种分类算法,与回归之间有一定的联系,由于算法的简单和高效,在实际中应用非常广泛

应用场景:广告点击率、是否为垃圾邮件、是否患病、金融诈骗、虚假账号等,特点是都属于两个类别之间的判断,逻辑回归是解决二分类问题的利器

原理:掌握逻辑回归,需知道输入值是什么以及如何判断其输出

输入是一个线性回归的结果

h(w)=w_{1} x_{1}+w_{2} x_{2}+w_{3} x_{3} \ldots+\mathrm{b}

二、激活函数

sigmoid函数,如图

g\left(\theta^{T} x\right)=\frac{1}{1+e^{-\theta^{T} x}}

逻辑回归最终的分类是通过属于某个类别的概率值来判断是否属于某个类别,且这个类别默认标记为1(正例),另外的一个类别会标记为0(反例),方便损失计算

 判断标准

  • 回归的结果输入到sigmoid函数当中
  • 输出结果:[0, 1]区间中的一个概率值,默认为0.5为阈值

输出结果解释:假设有两个类别A,B,并且假设我们的概率值为属于A(1)这个类别的概率值,现在有一个样本的输入到逻辑回归输出结果0.6,那么这个概率值超过0.5,意味着我们训练或者预测的结果就是A(1)类别,反之,若得出结果为0.3,则训练或者预测结果就为B(0)类别

三、损失以及优化

3.1 损失

逻辑回归的损失,称之为对数似然损失,公式如下:

  • 分开类别:

 \operatorname{cost}\left(h_{\theta}(x), y\right)=\left\{\begin{array}{ll} -\log \left(h_{\theta}(x)\right) & \text { if } \mathrm{y}=1 \\ -\log \left(1-h_{\theta}(x)\right) & \text { if } \mathrm{y}=0 \end{array}\right.

  • 综合完整损失函数

\operatorname{cost}\left(h_{\theta}(x), y\right)=\sum_{i=1}^{m}-y_{i} \log \left(h_{\theta}(x)\right)-\left(1-y_{i}\right) \log \left(1-h_{\theta}(x)\right)

代入计算如下

 3.2 优化

使用梯度下降优化算法,去减少损失函数的值。这样去更新逻辑回归前面对应算法的权重参数,提升原本属于1类别的概率,降低原本是0类别的概率

四、逻辑回归API

  • sklearn.linear_model.LogisticRegression(solver='liblinear', penalty=‘l2’, C = 1.0):solver为可选参数{'liblinear', 'sag', 'saga','newton-cg', 'lbfgs'},默认: 'liblinear';用于优化问题的算法
    • 对于小数据集来说,“liblinear”是个不错的选择,而“sag”和'saga'对于大型数据集会更快
    • 对于多类问题,只有'newton-cg', 'sag', 'saga'和'lbfgs'可以处理多项损失,“liblinear”仅限于“one-versus-rest”分类
    • penalty:正则化的种类
    • C:正则化力度

默认将类别数量少的当做正例,LogisticRegression方法相当于 SGDClassifier(loss="log", penalty=" "),SGDClassifier实现了一个普通的随机梯度下降学习,而使用LogisticRegression(实现了SAG)

五、案例:良/恶性乳腺癌肿瘤分类预测

原始数据的下载地址:https://archive.ics.uci.edu/ml/machine-learning-databases/

  • 数据描述
    • 699条样本,共11列数据,第一列用语检索的id,后9列分别是与肿瘤相关的医学特征,最后一列表示肿瘤类型的数值
    • 包含16个缺失值,用”?”标出

操作使用如下

 完整代码如下

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression

# import ssl # 证书问题
# ssl._create_default_https_context = ssl._create_unverified_context
# 1.获取数据
names = ['Sample code number', 'Clump Thickness', 'Uniformity of Cell Size', 'Uniformity of Cell Shape',
                   'Marginal Adhesion', 'Single Epithelial Cell Size', 'Bare Nuclei', 'Bland Chromatin',
                   'Normal Nucleoli', 'Mitoses', 'Class']

data = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data",
                  names=names)
data.head()
--------------------------------------------
data.describe()

# 2.基本数据处理
# 2.1 缺失值处理
data = data.replace(to_replace="?", value=np.NaN)
data = data.dropna()  # 删除NAN值
data.describe()
--------------------------------------------
# 2.2 确定特征值,目标值
x = data.iloc[:, 1:10]
x.head()
y = data["Class"]
y.head()
--------------------------------------------
# 2.3 分割数据
x_train, x_test, y_train, y_test = train_test_split(x, y, random_state=22, test_size=0.2)
x_train.head()
--------------------------------------------
# 3.特征工程(标准化)
transfer = StandardScaler()
x_train = transfer.fit_transform(x_train)
x_test = transfer.transform(x_test)
x_train
--------------------------------------------
# 4.机器学习(逻辑回归)
estimator = LogisticRegression()
estimator.fit(x_train, y_train)
--------------------------------------------
# 5.模型评估
y_predict = estimator.predict(x_test)
score = estimator.score(x_test, y_test)
print('预测值为:', y_predict, '\n准确率为:', score)

 输出

预测值为: [2 4 4 2 2 2 2 2 2 2 2 2 2 4 2 2 4 4 4 2 4 2 4 4 4 2 4 2 2 2 2 2 4 2 2 2 4
 2 2 2 2 4 2 4 4 4 4 2 4 4 2 2 2 2 2 4 2 2 2 2 4 4 4 4 2 4 2 2 4 2 2 2 2 4
 2 2 2 2 2 2 4 4 4 2 4 4 4 4 2 2 2 4 2 4 2 2 2 2 2 2 4 2 2 4 2 2 4 2 4 4 2
 2 2 2 4 2 2 2 2 2 2 4 2 4 2 2 2 4 2 4 2 2 2 4 2 2 2] 
准确率为: 0.9854014598540146

学习导航:http://xqnav.top/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/111573.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Web入门开发【八】- 学习探索

Web案例详解 简单的个人静态网站,这是一个单页的简单静态web网站,前面已经详细讲过。 这个案例是动态的企业官网,增加了多菜单,动态登录等功能,是入门学习者进阶的实践必做项目。 我们再来看企业后台管理系统&#xff…

Python Yolov5火焰烟雾识别源码分享

程序示例精选 Python Yolov5火焰烟雾识别 如需安装运行环境或远程调试,见文章底部微信名片,由专业技术人员远程协助! 前言 Yolov5比较Yolov4,Yolov3等其他识别框架,速度快,代码结构简单,识别效率高&#x…

操作系统开启分段并进入保护模式

段基地址 32位的地址,如果没开启分页,指的是当前段所在的物理地址,否则是分页前的虚拟地址 G(Granurality) 值为1表示段界限以4K为单位,否则以字节为单位 段界限 描述段的大小size-1,单位由G决定。 D/B 对于代码段&#xf…

【Linux】缓冲区/磁盘inode/动静态库

目录 一、缓冲区 1、缓冲区的概念 2、缓冲区的意义 3、缓冲区刷新策略 4、同一份代码,打印结果不同 5、仿写FILE 5.1myFILE.h 5.2myFILE.c 5.3main.c 6、内核缓冲区 二、了解磁盘 1、磁盘的物理结构 2、磁盘的存储结构 2.1磁盘的定位 3、磁盘的抽象…

【openGauss】浅试openGauss3.1.0中有关mysql兼容的部分特性

前言 在9月30号,openGauss推出了3.1.0这一预览版(注意,openGauss的“x.y.z”版本号,“y”的位置如果不是0,就不是长期支持版,不建议生产使用)。 这个版本增加了不少新内容, https:/…

【KGAT】Knowledge Graph Attention Network for Recommendation

note 其实不结合KG,何向南团队之前也直接使用GCN做了NGCF和LightGCN。KGAT结合KG和GAT,首先是CKG嵌入表示层使用TransR模型获得实体和关系的embedding;然后在attention表示传播层,使用attention求出每个邻居节点的贡献权重&#…

35岁有儿有女,为什么我开始自学编程?

零基础编程入门越来越容易 这么讲并不夸张:无论你初学哪门编程语言,第一行代码几乎都是打印出 Hello world ! print(Hello world!) print(Hello python!) 遥想当年,花上一两天折腾完各种安装配置调试环境,写下第一句“面世代码…

该怎么选择副业,三条建议形成自己的副业思维

受经济环境的影响,许多年轻人觉得原来稳定的工作不那么稳定,看着周围的朋友因为企业破产和失业,生活变得没有信心,也想找到自己的副业,在紧急情况下赚更多的钱。所以,年轻人在选择副业时也面临着很多困惑&a…

Java --- JUC的CompletableFuture的使用

目录 一、Future接口 二、Future接口的功能 三、FutureTask 四、CompletableFuture背景及使用 4.1、CompletionStage 4.2、CompletableFuture 4.3、四个静态方法 4.4、减少阻塞和轮询 4.5、使用CompletableFuture完成电商大比价 五、CompletableFuture常用API 5.1、获…

【华为OD机试真题 C++】TLV解析 【2022 Q4 | 100分】

■ 题目描述 TLV编码是按[Tag Length Value]格式进行编码的,一段码流中的信元用Tag标识,Tag在码流中唯一不重复,Length表示信元Value的长度,Value表示信元的值。 码流以某信元的Tag开头,Tag固定占一个字节&#xff0…

机器学习 | 逻辑回归

一.基本原理 面对一个分类问题,建立代价函数,通过优化方法迭代求解出最优的模型参数,然后测试验证我们这个求解的模型的好坏。逻辑回归是一种分类方法,主要用于二分类问题,应用于研究某些事件发生的概率 二.优缺点 …

day28【代码随想录】回溯之组合、组合总和|||、电话号码的字母组合

文章目录前言一、组合(力扣77)剪枝优化二、组合总和 III(力扣216)剪枝优化三、电话号码的字母组合(力扣17)总结前言 1、组合 2、组合总和||| 3、电话号码的字母组合 一、组合(力扣77&#xff0…

第1章 计算机组成原理概述

文章目录前言1.0 课程简介1.0.1 课程的地位1.0.2 课程学习思路1.0.3 课程组成1.1 计算机系统简介1.1.1 计算机组成1.计算机的类型2.计算机的组成3.软件组成1.1.2 计算机系统的层次结构1.物理层方面2.程序员角度1.1.3 计算机体系结构与计算机组成1.2 计算机的基本组成1.2.1 冯诺…

esp8266测试1.44英寸TFT屏(驱动7735)的demo

参考这教程: 使用esp8266点亮福利屏型号st7735的1.44的TFT屏 管脚连接: 我的用的TFT1.44寸ST7735,与NodeMCU针脚接线成功连接 VCC——3V GND——G LED——3V CLK——D5 SDI——D7 RS——D6 RST——D4 CS——D8 这里给出常用的屏幕管脚定义 以及esp8266…

女生也能学编程:行政女生转行学编程获13000元薪资

“女生不能学编程” “女生学编程找不到工作” “企业根本不会招女生” …… 这样类似的说法,让非常多的女生放弃了学编程,但达妹今天要明确的说,这种说法是 错误的! 只要你愿意改变,有梦想,想追求更好的…

想要快速准备好性能数据?方法这不就来了!

[内部资源] 想拿年薪30W的软件测试人员,这份资料必须领取~ Python自动化测试全栈性能测试全栈,挑战年薪40W 性能测试的一般流程 收集性能需求——>编写性能脚本——>执行性能测试——>分析测试报告——>系统性能调优。 在收集性能需求后…

Spring IOC\AOP\事务\注解

DAY1 一、引言 1.1 原生web开发中存在哪些问题? 传统Web开发存在硬编码所造成的过度程序耦合(例如:Service中作为属性Dao对象)。 部分Java EE API较为复杂,使用效率低(例如:JDBC开发步骤&…

17. 【gRPC系列学习】http2 各类型帧的含义

本节介绍http2有哪些类型的帧以及各帧的主要作用,是rfc7540规范标准定义,文末有参考链接,为后续介绍gRPC帧处理做技术储备。 1. 帧结构 帧长度3个字节 24 bit帧类型1个字节,含义如下:FrameData FrameType = 0x0FrameHeaders FrameType = 0x1FramePriority …

MySQL#4(JDBC常用API详解)

目录 一.简介 1.概念 2.本质 3.优点 4.步骤 二.API详解 1.DriverManager(驱动管理类) 2.Connection 3.Statement 4.ResultSet 5.PreparedStatement 一.简介 1.概念 JDBC就是使用Java语言操作关系型数据库的一套API(Java DataBase Connectivity)Java 数据库连接 2.本…

年货节微信活动有哪些_分享微信小程序商城开发好处

新年临近,又是百姓们囤年货的日子。各行业的微商商城或者线下实体店的商家们,趁此机会别,做一波优惠促销活动,今年的业绩就靠它来个完美的收尾啦! 1.类型:转盘拆福袋等抽奖活动 点击对应抽奖按钮&#xff0…