逻辑回归 使用Numpy实现逻辑回归

使用Numpy实现逻辑回归

sigmoid 函数

g ( z ) = 1 ( 1 + e − z ) g(z)=\frac{1}{(1+e^{−z} )} g(z)=(1+ez)1

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

线性计算与梯度下降

J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) l o g ⁡ ( h θ ( x ( i ) ) ) + ( 1 − y ( i ) ) l o g ( 1 − h θ ( x ( i ) ) ) ] J(θ)=-\frac{1}{m}[∑_{i=1}^m y^{(i)} log⁡(h_θ(x^{(i)} ))+(1−y^{(i)}) log(1−h_θ (x^{(i)}))] J(θ)=m1[i=1my(i)log(hθ(x(i)))+(1y(i))log(1hθ(x(i)))]

对于代价函数,采用梯度下降算法求θ的最小值:
θ j ≔ θ j − α ∂ J ( θ ) ∂ θ j θ_j≔θ_j−α\frac{∂J(θ)}{∂θ_j} θj:=θjαθjJ(θ)
代入梯度:
θ j ≔ θ j − α ∑ i = 1 m ( h θ ( x ( i ) ) − y ( i ) ) x j i θ_j≔θ_j−α∑_{i=1}^m(h_θ (x^{(i)} )−y^{(i)} ) x_j^i θj:=θjαi=1m(hθ(x(i))y(i))xji

# 进行计算
def compute(X,y,weights,bias):count=len(X)linear=np.dot(X,weights)+biaspredictions = sigmoid(linear)dw=(1/count)*np.dot(X.T,(predictions-y))db=(1/count)*np.sum(predictions-y)return dw,dbdef update(weights,bias,dw,db,rate):weights=weights-rate*dwbias=bias-rate*dbreturn weights,bias

实现逻辑回归

逻辑回归公式
h θ ( x ) = 1 ( 1 + e − θ T X ) h_θ (x)=\frac{1}{(1+e^{−θ^T X} )} hθ(x)=(1+eθTX)1


#逻辑回归
def logistic(X,y,rate,iterations):count,col=X.shapeweights,bias=initialize(col)for _ in range(iterations):dw,db=compute(X,y,weights,bias)weights,bias =update(weights,bias,dw,db,rate)return weights, bias

测试模型

import numpy as np
import matplotlib.pyplot as plt# 生成两个特征的单调数据
np.random.seed(42)
X1 = np.linspace(1, 5, 100) + np.random.randn(100) * 0.2
X2 = np.linspace(1, 5, 100) + np.random.randn(100) * 0.2
X = np.column_stack((X1, X2))# 生成对应的标签,假设以直线 x1 = x2 为界限进行二分类
y = (X[:, 0] > X[:, 1]).astype(int)# 添加偏置项
X_with_bias = np.c_[np.ones((X.shape[0], 1)), X]# 训练逻辑回归模型
weights, bias = logistic(X_with_bias, y, rate=0.1, iterations=1000)# 选择一些数据点进行预测
X_predict = np.array([[2, 2], [3, 4], [4, 3]])
predictions = predict(np.c_[np.ones((X_predict.shape[0], 1)), X_predict], weights, bias)# 输出预测结果
print("Predictions:", predictions)# 画出二分类后的图
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, marker='o')
plt.scatter(X_predict[:, 0], X_predict[:, 1], marker='x', color='red', label='Predictions')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Binary Classification with Logistic Regression')
plt.legend()
plt.show()

在这里插入图片描述

完整代码

import numpy as np# sigmoid 函数
def sigmod(z):return 1/(1+np.exp(-z))# 初始化参数
def initialize(num_col):weights=np.zeros(num_col)bias=0return weights,bias# 进行计算
def compute(X,y,weights,bias):count=len(X)linear=np.dot(X,weights)+biaspredictions = sigmoid(linear)dw=(1/count)*np.dot(X.T,(predictions-y))db=(1/count)*np.sum(predictions-y)return dw,db# 梯度下降
def update(weights,bias,dw,db,rate):weights=weights-rate*dwbias=bias-rate*dbreturn weights,bias#逻辑回归
def logistic(X,y,rate,iterations):count,col=X.shapeweights,bias=initialize(col)for _ in range(iterations):dw,db=compute(X,y,weights,bias)weights,bias =update(weights,bias,dw,db,rate)return weights, bias# 预测结果
def predict(X,weights,bias):linear = np.dot(X,weights)+biaspredictions=sigmoid(linear)return [1 if y_hat>0.5 else 0  for y_hat in predictions]

可视化代码

import numpy as np
import matplotlib.pyplot as plt# 生成两个特征的单调数据
np.random.seed(42)
X1 = np.linspace(1, 5, 100) + np.random.randn(100) * 0.2
X2 = np.linspace(1, 5, 100) + np.random.randn(100) * 0.2
X = np.column_stack((X1, X2))# 生成对应的标签,假设以直线 x1 = x2 为界限进行二分类
y = (X[:, 0] > X[:, 1]).astype(int)# 添加偏置项
X_with_bias = np.c_[np.ones((X.shape[0], 1)), X]# 训练逻辑回归模型
weights, bias = logistic(X_with_bias, y, rate=0.1, iterations=1000)# 选择一些数据点进行预测
X_predict = np.array([[2, 2], [3, 4], [4, 3]])
predictions = predict(np.c_[np.ones((X_predict.shape[0], 1)), X_predict], weights, bias)# 输出预测结果
print("Predictions:", predictions)# 画出二分类后的图
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired, marker='o')
plt.scatter(X_predict[:, 0], X_predict[:, 1], marker='x', color='red', label='Predictions')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Binary Classification with Logistic Regression')
plt.legend()
plt.show()

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

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

相关文章

ROS 元功能包

ROS元功能包(Metapackage)是一种特殊的软件包,它本身并不包含任何可执行代码或数据文件。在ROS 1中,可以通过catkin_create_pkg命令创建元功能包。 相反,它的主要目的是作为一组相关功能包的集合或者依赖关系列表。使…

国标GB28181视频监控EasyCVR内网环境部署无法启动怎么办?

安防视频监控系统EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTMP、RTSP、HTTP-FLV、…

微信聊天窗口测试用例

以前没测过客户端的测试,昨天面试被问到聊天窗口测试场景设计,感觉自己答的不好,结束后上网查了一下客户端/app测试的要点,按照测试策略来分,主要涉及到如下测试类型: 1、功能测试 2、性能测试 3、界面测试…

GS016电动工具调速控制电路芯片,7V ~ 24V 7mA ~ 10mA具 有电源电压范围宽、功耗小、抗干扰能力强等特点

GS016是一款直流有刷电机调速电路,输出端内置14V钳位结构,具 有电源电压范围宽、功耗小、抗干扰能力强等特点。通过桥接内部电阻网 络,可以改变PWM占空比输出,达到控制电机转速作用。采用SOP14的封装形式封装。 主要特点&#xf…

Hadoop学习笔记(HDP)-Part.10 创建集群

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

ipad Google浏览器,使用默认搜索,页面使用pc模式

ipad Google浏览器,使用默认搜索,页面使用pc模式 1. 设置默认搜索引擎 2. 设置页面使用PC模式 参考:https://zhuanlan.zhihu.com/p/556041670

从零开始学习 JS APL(五):完整指南和实例解析

目录 学习目标: 学习内容: 学习时间: 学习内容: Window对象: 定时器-延时函数: JS 执行机制: location对象: 本地存储: 本地存储分类- localStorage&#xff1a…

OTN设备,ZXONE 9700,ZXMP M721

文章目录 ZXONE 9700分组OTN产品产品特点 ZXMP M721城域边缘OTN产品产品特点 ZXONE 9700分组OTN产品 ZXONE 9700系列产品,支持10G/40G/100G/400G传输速率,可实现28.8T/14.4T/9.2T/4.4T ODUk的大容量电层交叉和10G/40G/100G/400G波长的光层交叉及分组交换…

WordPress免费插件大全清单【2023最新】

WordPress已经成为全球范围内最受欢迎的网站建设平台之一。要让您的WordPress网站更具功能性、效率性,并提供卓越的用户体验,插件的选择与使用变得至关重要。 WordPress插件的作用 我们先理解一下插件在WordPress生态系统中的作用。插件是一种能够为Wo…

【云原生-K8s】检查yaml文件安全配置kubesec部署及使用

基础介绍基础描述特点 部署在线下载百度网盘下载安装 使用官网样例yamlHTTP远程调用安全建议 总结 基础介绍 基础描述 Kubesec 是一个开源项目,旨在为 Kubernetes 提供安全特性。它提供了一组工具和插件,用于保护和管理在 Kubernetes 集群中的工作负载和…

前端三段面试经历(字节、滴滴、虎牙),讲真的还挺难的

小编整理最近了小伙伴中具有代表性的面试经历及面试题,他们的情况小编就不多说了,一起看看他们面试中都遇到了什么问题。 字节一面 刚开始就问我的项目,问得很详细。 webpack 提高构建速度的方式loader 输入什么产出什么 ?webpac…

全光谱护眼灯好吗?考公用的台灯推荐

全光谱护眼台灯是近年来新兴的一种照明产品,其使用全光谱LED灯泡,能够模拟自然光的光谱,为人们提供更加舒适、柔和的照明环境。相比传统的白炽灯或荧光灯,全光谱护眼台灯在照明效果、节能环保、眼睛健康等方面都有着明显的优势。 …

mysql:免费的GUI客户端工具推荐并介绍常用的操作

给大家推荐几个常用的 mysql 数据库客户端 sequel-pro sequel-ace 官网下载地址 免费 sequel-ace 可以理解为 Sequel Pro 的升级版,由于Sequel Pro官方不维护了,特别是对 MySQL 8.0 支持不好,所以现在由社区维护了新分支 sequel-ace&#x…

生鲜蔬果展示预约小程序作用是什么

线下生鲜蔬果店非常多,对商家来说主要以同城生意为主,而在互联网电商的发展下,更多的商家会选择搭建私域商城进行多渠道的销售卖货和拓展,当然除了直接卖货外,还有产品纯展示或预约订购等需求。 但无论哪种模式&#…

【云原生 | Docker】Docker核心概念 应用上手最佳流程

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…

面试题:Java Switch 是如何支持 String 的,为什么不支持 long

目录 前言一、结论二、枚举类型是咋变成 int 类型的?三、String 类型是咋变成 int 类型的?四、它们的包装类型支持吗? 前言 我们知道Java Switch 支持byte、short、int类型,在JDK 1.5 时,支持了枚举类型,在…

STC15F100E单片机模拟串口

文章目录 一、芯片简介二、开发环境三、软件模拟串口参考 一、芯片简介 STC15F100系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,新一代8051单片机,指令代码完全兼容传统8051,但是速度快6-12倍。 内部集成R/C时钟,5MHz…

25、pytest的测试报告插件allure

allure简介 在这里,你将找到使用allure创建、定制和理解测试报告所需的一切。开始让你的测试沟通更清晰,更有影响力。 Allure Report是一个实用程序,它处理由兼容的测试框架收集的测试结果并生成HTML报告。 安装allure 1、确保安装了Java…

【SSM源码】基于JAVA的高校竞赛和考级查询系统

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍: 二、文档学习资料: 三、模块截图: 四、开发技术与运行环境: 五、代码展示: 六、数据库表截图&#xff1a…

MISRA C 2012 标准浅析

MISRA(The Motor Industry Software Reliability Association),汽车工业软件可靠性联会; 1994年,英国成立。致力于协助汽车厂商开发安全可靠的软件的跨国协会,其成员包括:AB汽车电子、罗孚汽车、宾利汽车、福特汽车、捷…