当前位置: 首页 > news >正文

最优化方法Python计算:无约束优化应用——逻辑分类模型

逻辑回归模型更多地用于如下例所示判断或分类场景。
例1 某银行的贷款用户数据如下表:

欠款(元)收入(元)是否逾期
17000800Yes
220002500No
350003000Yes
440004000No
520003800No

显然,客户是否逾期(记为 y y y)与其欠款额(记为 x 1 x_1 x1)和收入(记为 x 2 x_2 x2)相关。如果将客户逾期还款记为1,未逾期记为0,我们希望根据表中数据建立 R 2 → { 0 , 1 } \text{R}^2\rightarrow\{0,1\} R2{0,1}的拟合函数
y = F ( x ) y=F(\boldsymbol{x}) y=F(x)
使得 F ( x i ) ≈ y i , i = 1 , 2 , ⋯ , 5 F(\boldsymbol{x}_i)\approx y_i,i=1,2,\cdots,5 F(xi)yi,i=1,2,,5,并用 F ( x ) F(\boldsymbol{x}) F(x)根据新客户的欠款额与收入数据

欠款(元)收入(元)是否逾期
35003500?
30002100?

进行预测分类。
要用回归模型分类,关键在于如何将预测值 y y y离散化为0,1,或一般地离散化为连续的 n n n个整数 N 1 , N 1 + 1 , ⋯ , N 1 + n − 1 , N 2 N_1, N_1+1,\cdots,N_1+n-1,N_2 N1,N1+1,,N1+n1,N2。解决之道是设置阈值,譬如,设 μ 1 = N 1 + 0.5 , μ 2 = N 1 + 1.5 , ⋯ , μ n − 1 = N 1 + n − 0.5 \mu_1=N_1+0.5,\mu_2=N_1+1.5,\cdots,\mu_{n-1}=N_1+n-0.5 μ1=N1+0.5,μ2=N1+1.5,,μn1=N1+n0.5,对 y < μ 1 y<\mu_1 y<μ1 y y y转换为 N 1 N_1 N1 μ i ≤ y < μ i + 1 \mu_i\leq y<\mu_{i+1} μiy<μi+1,将其转化为 N 1 + i N_1+i N1+i y ≥ μ n − 1 y\geq\mu_{n-1} yμn1,转换为 N 2 N_2 N2
其次,对分类模型的评价指标应该是分类正确率:设 ( x i , y i ) (\boldsymbol{x}_i,y_i) (xi,yi) i = 1 , 2 , ⋯ , m i=1,2,\cdots,m i=1,2,,m为测试数据。用训练所得的最优模式 w 0 \boldsymbol{w}_0 w0,得预测值 y i ′ y'_i yi i = 1 , 2 , ⋯ , m i=1,2,\cdots,m i=1,2,,m。记 y = ( y 1 y 2 ⋮ y m ) \boldsymbol{y}=\begin{pmatrix}y_1\\y_2\\\vdots\\y_m\end{pmatrix} y= y1y2ym y t = ( y 1 ′ y 2 ′ ⋮ y m ′ ) \boldsymbol{y}_t=\begin{pmatrix}y'_1\\y'_2\\\vdots\\y'_m\end{pmatrix} yt= y1y2ym ,计算 y i = y i ′ y_i=y'_i yi=yi成立的个数 m 1 m_1 m1,则正确率为 m 1 m × 100 \frac{m_1}{m}\times100 mm1×100
下列代码实现用于分类的Classification类。

import numpy as np										#导入numpy
class Classification():									#分类模型def threshold(self, x):								#阈值函数N1 = x.min().astype(int) - 1					#最小阈值整数部分N2 = np.round(x.max()).astype(int) + 1			#最大阈值整数部分y = np.array([N1] * x.size)						#因变量数组for n in range(N1, N2):							#对每个可能的函数值d = np.where((x >= n - 0.5)&(x < n + 0.5))	#取值区间y[d] = n									#函数值if(y.size == 1):								#单值情形y = y[0]return ydef predict(self, X):								#重载预测函数yp = RegressModel.predict(self, X)				#计算预测值return self.threshold(yp)						#转换为离散值def accuracy(self, y1, y2):							#正确率m = y1.sizeacc=np.where(y1 == y2)[0].size					#计算两者相等的元素个数return acc / m * 100def test(self, x, y):								#测试函数yp = self.predict(x)return yp, self.accuracy(y, yp)
class LogicClassifier(Classification, LogicModel):'''逻辑分类模型'''

程序中第2~22行定义了用于分类的Classification辅助类。其中第3~12行定义阈值函数threshold。第13~15行在预测函数predict外“套上”阈值函数threshold,筛选出分类值返回。第16~19行定义计算两个等长整数数组y1,y2中对应元素相等的比率函数accuracy。第20~22行定义测试函数test,对测试数据x和y,计算x的预测值yp,然后调用accuracy计算y和yt的相等比率返回。第23~24行联合Classification类和LogicModel类(详见博文《最优化方法Python计算:无约束优化应用——逻辑回归模型》)实现逻辑分类模型类LogicClassifier。下面我们来小试牛刀:用逻辑分类模型LogicClassifier计算例1中的问题。

import numpy as np								#导入numpy
x = np.array([[7000, 800],						#设置训练、测试数据[2000, 2500],[5000, 3000],[4000, 4000],[2000, 3800]])
y = np.array([1, 0, 1, 0, 0])
title = np.array(['No', 'Yes'])					#预测值标签
np.random.seed(2024)							#随机种子
credit = LogicClassifier()						#创建逻辑分类模型
credit.fit(x,y)									#训练
_, acc=credit.test(x,y)							#测试
print('准确率:%.1f'%acc + '%')
x1 = np.array([[3500, 3500],					#设置预测数据[3000, 2100]])
print('对测试数据:')
print(x1)
Y = credit.predict(x1)							#计算预测值
print('归类为:')
print([title[y] for y in Y])

看官可借助代码内注释信息理解程序,需要提请注意的是第9行设置随机种子是为了使看官的运行结果与下列的输出一致。运行程序,输出

训练中...,稍候
3次迭代后完成训练。
准确率:100.0%
对测试数据:
[[3500 3500][3000 2100]]
归类为:
['No', 'Yes']

开胃菜后,上正餐。
综合案例
文件iris.csv(来自UC Irvine Machine Learning Repository)是统计学家R. A. Fisher在1936年采集的一个小型经典数据集,这是用于评估分类方法的最早的已知数据集之一。该数据集含有150例3种鸢尾花:setosa、versicolour和virginica的数据

Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies
15.13.51.40.2setosa
24.931.40.2setosa
34.73.21.30.2setosa
⋯ \cdots ⋯ \cdots ⋯ \cdots ⋯ \cdots ⋯ \cdots ⋯ \cdots
5173.24.71.4versicolor
526.43.24.51.5versicolor
536.93.14.91.5versicolor
⋯ \cdots ⋯ \cdots ⋯ \cdots ⋯ \cdots ⋯ \cdots ⋯ \cdots
1486.535.22virginica
1496.23.45.42.3virginica
1505.935.11.8virginica

五个数据属性的意义分别为

  • Sepal.Length:花萼长度;
  • Sepal.Width:花萼宽度;
  • Petal.Length:花瓣长度;
  • Petal.Width:花瓣宽度;
  • Species:种类。

下列代码从文件中读取数据,将花的种类数字化。

import numpy as np										#导入numpy
data = np.loadtxt('iris.csv', delimiter=',', dtype=str)	#读取数据文件
X = np.array(data)										#转换为数组
X = X[:, 1:]											#去掉编号
title = X[0, :4]										#读取特征名称
X = X[1:, :]											#去掉表头
Y = X[:, 4]												#读取标签数据
X = X[:, :4].astype(float)
m = X.shape[0]											#读取样本个数
print('共有%d个数据样本'%m)
print('鸢尾花特征数据:')
print(X)
Y = np.array([0 if y == 'setosa' else					#类别数值化1 if y == 'versicolor' else2 for y in Y])
print('鸢尾花种类数据:')
print(Y)

运行程序,输出

共有150个数据样本
鸢尾花特征数据:
[[5.1 3.5 1.4 0.2][4.9 3.  1.4 0.2][4.7 3.2 1.3 0.2]
...[6.5 3.  5.2 2. ][6.2 3.4 5.4 2.3][5.9 3.  5.1 1.8]]
鸢尾花种类数据:
[0 0 0 ... 2 2 2]

花萼的长度、宽度,花瓣的长度、宽度对鸢尾花的种类有明显的相关性。接下来我们要从数据集中随机选取一部分作为训练数据,训练LogicClassifier分类模型,然后用剩下的数据进行测试,评价训练效果。在前面的程序后添加以下代码

……
a = np.arange(m)									#数据项下标
np.random.seed(2024)
index = np.random.choice(a,m//3,replace=False)		#50个随机下标
Xtrain = X[index]									#训练数据
Ytrain = Y[index]
index1 = np.setdiff1d(a,index)						#测试数据下标
Xtest = X[index1]									#测试数据
Ytest = Y[index1]
iris = LogicClassifier()							#创建模型
print('随机抽取%d个样本作为训练数据。'%(m//3))
iris.fit(Xtrain,Ytrain)								#训练模型
_, accuracy = iris.test(Xtest,Ytest)				#测试
print('对其余%d个数据测试,分类正确率为%.2f'%(m-m//3,accuracy)+'%')

运行程序输出

……
随机抽取50个样本作为训练数据。
训练中...,稍候
23次迭代后完成训练。
对其余100个数据测试,分类正确率为99.00%

第1行的省略号表示前一程序的输出。从测试结果可见训练效果效果不错!

相关文章:

最优化方法Python计算:无约束优化应用——逻辑分类模型

逻辑回归模型更多地用于如下例所示判断或分类场景。 例1 某银行的贷款用户数据如下表&#xff1a; 欠款&#xff08;元&#xff09;收入&#xff08;元&#xff09;是否逾期17000800Yes220002500No350003000Yes440004000No520003800No 显然&#xff0c;客户是否逾期&#xff…...

springboot定时执行某个任务

springboot定时执行某个任务 要定时执行的方法加上Schedule注解 括号内跟 cron表达式 “ 30 15 10 * * &#xff1f;” 代表秒 分 时 日 月 周几 启动类上加上EnableScheduling 注释...

Java EE Servlet之Servlet API详解

文章目录 1. HttpServlet1.1 核心方法 2. HttpServletRequest3. HttpServletResponse 接下来我们来学习 Servlet API 里面的详细情况 1. HttpServlet 写一个 Servlet 代码&#xff0c;都是要继承这个类&#xff0c;重写里面的方法 Servlet 这里的代码&#xff0c;只需要继承…...

neo4j运维管理

管理数据库 概念 Neo4j 5(从v4.0)&#xff0c;可以同时创建和使用多个活动数据库。 DBMS Neo4j是一个数据库管理系统(DBMS)&#xff0c;能够管理多个数据库。DBMS可以管理一个独立的服务器&#xff0c;也可以管理集群中的一组服务器。 实例 Neo4j实例是运行Neo4j服务器代…...

【MYSQL】-函数

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树&#x1f388; &#x1f389;作者宣言&#xff1a;认真写好每一篇博客&#x1f4a4; &#x1f38a;作者gitee:gitee✨ &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 动态规划算法&#x1f384; 如 果 你 …...

传统船检已经过时?AR智慧船检来助力!!

想象一下&#xff0c;在茫茫大海中&#xff0c;一艘巨型货轮正缓缓驶过。船上的工程师戴着一副先进的AR眼镜&#xff0c;他们不再需要反复翻阅厚重的手册&#xff0c;一切所需信息都实时显示在眼前。这不是科幻电影的场景&#xff0c;而是智慧船检技术带来的现实变革。那么问题…...

JAVA进化史: JDK11特性及说明

JDK 11&#xff08;Java Development Kit 11&#xff09;是Java平台的一个版本&#xff0c;于2018年9月发布。这个版本引入了一些新特性和改进&#xff0c;以下是其中一些主要特性。 HTTP Client&#xff08;标准化&#xff09; JDK 11引入了一个新的HTTP客户端&#xff0c;用…...

模型 安索夫矩阵

本系列文章 主要是 分享模型&#xff0c;涉及各个领域&#xff0c;重在提升认知。产品市场战略。 1 安索夫矩阵的应用 1.1 江小白的多样化经营策略 使用安索夫矩阵来分析江小白市场战略。具体如下&#xff1a; 根据安索夫矩阵&#xff0c;江小白的现有产品是其白酒产品&…...

性能手机新标杆,一加 Ace 3 发布会定档 1 月 4 日

12 月 27 日&#xff0c;一加宣布将于 1 月 4 日发布新品一加 Ace 3。一加 Ace 系列秉持「产品力优先」理念&#xff0c;从一加 Ace 2、一加 Ace 2V 到一加 Ace 2 Pro&#xff0c;款款都是现象级爆品&#xff0c;得到了广大用户的认可与支持。作为一加 2024 开年之作&#xff0…...

Vue 框架前导:详解 Ajax

Ajax Ajax 是异步的 JavaScript 和 XML。简单来说就是使用 XMLHttpRequest 对象和服务器通信。可以使用 JSON、XML、HTML 和 text 文本格式来发送和接收数据。具有异步的特性&#xff0c;可在不刷新页面的情况下实现和服务器的通信&#xff0c;交换数据或者更新页面 01. 体验 A…...

3分钟快速安装 ClickHouse、配置服务、设置密码和远程登录以及修改数据目录

下面是一个完整的 ClickHouse 安装和配置流程&#xff0c;包括安装 ClickHouse、配置服务、设置密码和远程登录以及修改数据目录。 安装 ClickHouse 安装 YUM 工具包&#xff1a; sudo yum install -y yum-utils添加 ClickHouse YUM 仓库&#xff1a; sudo yum-config-manager…...

PHP8使用PDO对象增删改查MySql数据库

PDO简介 PDO&#xff08;PHP Data Objects&#xff09;是一个PHP扩展&#xff0c;它提供了一个数据库访问层&#xff0c;允许开发人员使用统一的接口访问各种数据库。PDO 提供了一种用于执行查询和获取结果的简单而一致的API。 以下是PDO的一些主要特点&#xff1a; 统一接口…...

证明:切线垂直于半径

证明&#xff1a; 切线垂直于过切点的半径。 下面是网上最简单的证明方法。 证明&#xff1a; 利用反证法。 如下图所示&#xff0c;直线AB和圆O切于点A&#xff0c;假设OA 不垂直于 AB&#xff0c;而 O B ⊥ A B OB \perp AB OB⊥AB&#xff0c;则 ∠ O B A 90 \angle OB…...

普中STM32-PZ6806L开发板(STM32CubeMX创建项目并点亮LED灯)

简介 搭建一个用于驱动 STM32F103ZET6 GPIO点亮LED灯的任务;电路原理图 LED电路原理图 芯片引脚连接LED驱动引脚原理图 创建一个点亮LED灯的Keil 5项目 创建STM32CubeMX项目 New Project -> 单击 -> 芯片搜索STM32F103ZET6->双击创建 初始化时钟 调试设置 一…...

【Windows】共享文件夹拍照还原防火墙设置(入站,出站设置)---图文并茂详细讲解

目录 一 共享文件夹(两种形式) 1.1 普通共享与高级共享区别 1.2 使用 二 拍照还原 2.1 是什么 2.2 使用 三 防火墙设置&#xff08;入栈&#xff0c;出站设置&#xff09; 3.1 引入 3.2 入站出站设置 3.2.1入站出站含义 3.3入站设置 3.4安装jdk 3.5使用tomcat进行访…...

1.决策树

目录 1. 什么是决策树? 2. 决策树的原理 2.1 如何构建决策树&#xff1f; 2.2 构建决策树的数据算法 2.2.1 信息熵 2.2.2 ID3算法 2.2.2.1 信息的定义 2.2.2.2 信息增益 2.2.2.3 ID3算法举例 2.2.2.4 ID3算法优缺点 2.2.3 C4.5算法 2.2.3.1 C4.5算法举例 2.2.4 CART算法 2.2.4…...

基于微信小程序的停车预约系统设计与实现

基于微信小程序的停车预约系统设计与实现 项目概述 本项目旨在结合微信小程序、后台Spring Boot和MySQL数据库&#xff0c;打造一套高效便捷的停车预约系统。用户通过微信小程序进行注册、登录、预约停车位等操作&#xff0c;而管理员和超级管理员则可通过后台管理系统对停车…...

再见2023,你好2024

再见2023&#xff0c;你好2024 生活1月 悲伤与治愈2~4月 运动与偏爱5月 体验与美食6月 婚礼与热爱7~8月 就医与别离9~11月 陪伴与暖房12月 体验&新生 运动追剧读书总结 生活 生活是一个修罗场&#xff0c;来世间一场&#xff0c;要经历丰腴有趣的人生。去体验各种滋味&…...

年度总结|存储随笔2023年度最受欢迎文章榜单TOP15-part1

原创 古猫先生 存储随笔 2023-12-31 08:31 发表于上海 回首2023 2-8月份有近半年时间基本处于断更状态 好在8月份后小编没有松懈 &#xff08;虽然2023年度总结&#xff0c;更像是近4个月总结&#xff09; 本年度顺利加V啦&#xff01; 感谢各位粉丝朋友的一路支持与陪伴 …...

微信小程序 手机号授权登录 偶尔后端解密失败

微信小程序wx.login获取code要在手机号授权前触发 <button:id"code":open-type"hasGetPrivacySetting ? getPhoneNumber|agreePrivacyAuthorization : getPhoneNumber"getphonenumber"onGetPhoneNumber"class"btn"click"cli…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一&#xff09; 1. CSI-2层定义&#xff08;CSI-2 Layer Definitions&#xff09; 分层结构 &#xff1a;CSI-2协议分为6层&#xff1a; 物理层&#xff08;PHY Layer&#xff09; &#xff1a; 定义电气特性、时钟机制和传输介质&#xff08;导线&#…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

Golang——7、包与接口详解

包与接口详解 1、Golang包详解1.1、Golang中包的定义和介绍1.2、Golang包管理工具go mod1.3、Golang中自定义包1.4、Golang中使用第三包1.5、init函数 2、接口详解2.1、接口的定义2.2、空接口2.3、类型断言2.4、结构体值接收者和指针接收者实现接口的区别2.5、一个结构体实现多…...

通过 Ansible 在 Windows 2022 上安装 IIS Web 服务器

拓扑结构 这是一个用于通过 Ansible 部署 IIS Web 服务器的实验室拓扑。 前提条件&#xff1a; 在被管理的节点上安装WinRm 准备一张自签名的证书 开放防火墙入站tcp 5985 5986端口 准备自签名证书 PS C:\Users\azureuser> $cert New-SelfSignedCertificate -DnsName &…...