机器学习6:逻辑回归

news2024/11/26 8:39:07

 

 

假设我们有一个二元分类问题,有两个特征(x1, x2)和对应的类别标签(y)。给定

以下训练数据集:

我们定义逻辑回归模型的假设函数和损失函数。假设函数使用 sigmoid 函

数来将线性函数的输出转换为概率值,使用对数损失函数(log loss)来衡量模

型的预测结果与实际类别标签之间的差异,请使用逻辑回归模型对新的测试样本

(2.2, 2.3) 进行分类预测。

import numpy as np

# 定义sigmoid函数
def sigmoid(z):
    return 1 / (1 + np.exp(-z))

# 训练数据集
X_train = np.array([[1.0, 2.0],
                    [1.5, 1.8],
                    [2.0, 2.5],
                    [3.0, 3.2]])

y_train = np.array([0, 0, 1, 1])

# 添加偏置项,将特征向量X_train扩展为(X0=1, X1, X2)
X_train = np.column_stack((np.ones(X_train.shape[0]), X_train))
print("添加偏置项后的训练数据集:")
print(X_train)

# 初始化模型参数
w = np.zeros(X_train.shape[1])
print("初始化模型参数 w:")
print(w)

# 定义损失函数(对数损失函数)
def loss_function(X, y, w):
    z = np.dot(X, w)
    h = sigmoid(z)
    loss = -y * np.log(h) - (1 - y) * np.log(1 - h)
    return np.mean(loss)

# 定义梯度下降函数
def gradient_descent(X, y, w, learning_rate, num_iter):
    m = X.shape[0]
    for i in range(num_iter):
        z = np.dot(X, w)
        h = sigmoid(z)
        gradient = np.dot(X.T, (h - y)) / m
        w -= learning_rate * gradient
        loss = loss_function(X, y, w)
        print("迭代次数:{},模型参数 w:{},损失函数值:{}".format(i+1, w, loss))
    return w

# 训练模型
learning_rate = 0.1
num_iter = 1000
w = gradient_descent(X_train, y_train, w, learning_rate, num_iter)
print("经过梯度下降算法训练后的模型参数 w:")
print(w)

# 测试样本
X_test = np.array([[1, 2.2], [2.2, 2.3]])

# 添加偏置项,将测试样本扩展为(X0=1, X1, X2)
X_test = np.column_stack((np.ones(X_test.shape[0]), X_test))
print("添加偏置项后的测试样本:")
print(X_test)

# 使用训练好的模型进行分类预测
z_test = np.dot(X_test, w)
h_test = sigmoid(z_test)

# 判断类别标签
predictions = np.round(h_test).astype(int)

# 打印预测结果
# 打印预测结果和属于正类的概率值
for i in range(X_test.shape[0]):
    print("预测样本{}属于{},属于正类的概率值为{}".format(i+1, "正类" if predictions[i]==1 else "负类", h_test[i]))
    print("预测样本{}的类别标签:{}".format(i + 1, predictions[i]))

# for i in range(X_test.shape[0]):
#     if predictions[i] == 1:
#         print("预测样本{}属于正类".format(i + 1))
#     else:
#         print("预测样本{}属于负类".format(i + 1))


# for i in range(X_test.shape[0]):
#     print("预测样本{}的类别标签:{}".format(i + 1, predictions[i]))

 

对于测试样本 (1,2.2), (2.2, 2.3),我们可以使用经过训练得到的 logistic 回归模型对其进行分类预测,并计算其属于正类的概率值。

具体地,我们可以先将测试样本添加偏置项,然后将该样本的特征向量带入经过训练得到的模型参数 w 中,计算出 sigmoid 函数的输出值(即该样本属于正类的概率值),最后根据概率值来判断该样本属于哪个类别。

 

 sigmoid 函数的计算 1/(1+exp(−z))

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

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

相关文章

计算机毕业设计项目选题推荐(免费领源码)SSM+Mysql电商微信小程序09228

摘 要 随着微信小程序的使用越来越广泛,在传统的商业模式中,对于各类生活日常商品,人们习惯于到各种商家店铺购买。然而在快节奏的新时代中,人们不一定能为购买商品腾出时间,更不会耐心挑选自己想要的商品。所以设计一…

通信原理板块——语音压缩编码

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 1、语音压缩编码 语音压缩编码可以…

第91步 深度学习图像分割:FCN建模

基于WIN10的64位系统演示 一、写在前面 本期,我们继续学习深度学习图像分割系列的另一个模型,FCN (Fully Convolutional Network)。 二、FCN FCN是一种用于图像语义分割的神经网络。与传统的分类网络(如VGG、AlexNet)不同&…

ARPG----C++学习记录04 Section8 角色类,移动

角色类输入 新建一个角色C,继承建立蓝图,和Pawn一样,绑定输入移动和相机. 在构造函数中添加这段代码也能实现。打开UsePawnControlRotation就可以让人物不跟随鼠标旋转 得到旋转后的向前向量 使用旋转矩阵 想要前进方向和旋转的方向对应。获取当前控制…

如何通过把setTimeout异步转为同步

一.封装定时器函数 function delayed(time){return new Promise((resolve,reject)>{setTimeout( () > {resolve(time)}, time);}) }二调用的时候通过async await 修饰 async function demo() {console.log(new Date().getMinutes(): new Date().getSeconds())await del…

你知道王者荣耀是怎么实现技能范围指示器的吗?

引言 一文教会你实现类似王者荣耀的技能范围指示器。 技能范围指示器是许多游戏中常见的一个元素,特别是在MOBA(多人在线战斗竞技场)游戏中,如《王者荣耀》、《英雄联盟》等。 本文将介绍如何在Cocos Creator中实现一个技能范围…

6.jvm中对象创建流程与内存分配

目录 概述对象的创建流程对象的内存分配方式对象怎样才会进入老年代大对象直接进入老年代内存担保 jvc 相关指令查看jdk默认使用的gc查看当前jdk支持的有哪些gc查看指定进程当前正在使用的gc 结束 概述 相关文章在此总结如下: 文章地址jvm基本知识地址jvm类加载系…

Linux常用命令——bzip2命令

在线Linux命令查询工具 bzip2 将文件压缩成bz2格式 补充说明 bzip2命令用于创建和管理(包括解压缩)“.bz2”格式的压缩包。我们遇见Linux压缩打包方法有很多种,以下讲解了Linux压缩打包方法中的Linux bzip2命令的多种范例供大家查看&…

Python | 机器学习之数据清洗

​ 🌈个人主页:Sarapines Programmer🔥 系列专栏:《人工智能奇遇记》🔖少年有梦不应止于心动,更要付诸行动。 目录结构 1. 机器学习之数据清洗概念 1.1 机器学习 1.2 数据清洗 2. 数据清洗 2.1 实验目的…

Changes to Captions: An Attentive Network forRemote Sensing Change Captioning

字幕的变化:一个用于遥感变化字幕的关注网络 IEEE Transactions on Image Processing Shizhen Chang, Pedram Ghamisi 2023 摘要:近年来,高级研究集中在使用自然语言处理(NLP)技术对遥感图像进行直接学习和分析。准…

Origin:科研绘图与学术图表绘制从入门到精通

文章目录 一、引言二、安装和启动Origin三、创建和保存图表四、深入学习Origin绘图功能五、应用Origin进行科研绘图和学术图表绘制六、总结与建议《Origin科研绘图与学术图表绘制从入门到精通》亮点内容简介作者简介目录获取方式 一、引言 Origin是一款功能强大的数据分析和科…

家政服务小程序源码系统+上门预约服务 源码完全开源可二次开发 带完整的搭建教程

在互联网的快速发展下,传统的家政服务行业也在逐步向数字化、智能化方向转型。为了满足消费者对于家政服务的高品质需求,罗峰给大家分享一款基于微信小程序的上门预约家政服务系统。该系统采用完全开源的源码系统,可进行二次开发,…

CAD Exchanger SDK 须知的开发配置--Crack

支持的配置 目录 支持的编程语言 C 支持C# 支持Java支持Python支持JavaScript 支持 CAD Exchanger SDK 是一组跨平台库,目前支持下列配置。随着时间的推移,旧版本的编译器、体系结构或依赖的第三方库从主要支持级别变为次要支持级别,然后被弃…

ubuntu利用crontab反弹shell

事情源于自,我利用redis未授权访问漏洞在向ubuntu的/varspool/cron/crontabs目录下创建的任务计划文件去反弹shell时,发现shell并不能反弹到自己的centos2上 (1)在ubuntu中进入/var/spool/cron/crontabs/目录 cd /var/spool/cro…

不应该被忽视的10个好用的PDF文档修改器

您在寻找最好的免费开源 PDF 编辑器吗?您是否正在寻找免费编辑 PDF 文档的解决方案?如果您正在寻找此类问题的答案。那么,亲爱的朋友,您来对地方了,因为今天,在本文中,我将讨论一些适用于 Windo…

2023-2024 年适用于 Windows 电脑的顶级视频录制软件

想捕捉您正在在线观看的视频吗?使用网络摄像头录制视频会议以供日后参考。正在寻找可以完成这些任务的视频捕捉软件?这篇文章说明了一切。以下是一些适用于 Windows PC 的最佳视频录制工具。 什么是视频录制软件? 顾名思义,视频捕…

基于SSM的“镜头人生”约拍网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:JSP 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目:是 目录…

Python机器学习算法入门教程(第五部分)

接着Python机器学习算法入门教程(第四部分),继续展开描述。 二十五、Python Sklearn库SVM算法应用 SVM 是一种有监督学习分类算法,输入值为样本特征值向量和其对应的类别标签,输出具有预测分类功能的模型&#xff0c…

电脑技巧:推荐基于浏览器的远程桌面访问控制工具

一、软件简介 Getscreen.me是一个基于浏览器的远程桌面访问控制工具,可以轻松地远程访问控制特定设备。并且注册登录账户实现允许设置具有永久访问权限的设备,可以通过一键进行快速连接访问,无需共享 ID、密码或任何内容。 Getscreen.me采用…

C++标准模板(STL)- 类型支持 (受支持操作,检查类型是否拥有未被弃置的析构函数)

类型特性 类型特性定义一个编译时基于模板的结构&#xff0c;以查询或修改类型的属性。 试图特化定义于 <type_traits> 头文件的模板导致未定义行为&#xff0c;除了 std::common_type 可依照其所描述特化。 定义于<type_traits>头文件的模板可以用不完整类型实例…