分类问题经典算法 | 二分类问题 | Logistic回归:公式推导

news2024/11/13 6:20:52

目录

  • 一. Logistic回归的思想
    • 1. 分类任务思想
    • 2. Logistic回归思想
  • 二. Logistic回归算法:线性可分推导

一. Logistic回归的思想

1. 分类任务思想

分类问题通常可以分为二分类,多分类任务;而对于不同的分类任务,训练的主要目标是不变的,即找到一个分类器,这个分类器可以对新输入的数据进行判断,以确定该数据是属于哪个类别

对于分类任务,我们常设函数为 A x 1 + B x 2 + C = 0 Ax_{1}+Bx_{2}+C = 0 Ax1+Bx2+C=0


下面我们先来讨论二分类任务:
在这里插入图片描述
对于有两个特征的分类任务来说,我们的目的是寻找一条决策边界,使得这两个特征可以被区分开,如上图:

假设我们认为,决策边界为 A x 1 + B x 2 + C = 0 Ax_{1}+Bx_{2}+C = 0 Ax1+Bx2+C=0
当输入一个新数据 ( x 1 0 , x 2 0 ) (x_{1_{0}},x_{2_{0}}) (x10,x20)
对于蓝色特征(右上方)就会得到:

A x 1 0 + B x 2 0 + C > 0 Ax_{1_{0}}+Bx_{2_{0}}+C > 0 Ax10+Bx20+C>0,即正样本

对于红色特征(左下方)就会得到:

A x 1 0 + B x 2 0 + C < 0 Ax_{1_{0}}+Bx_{2_{0}}+C < 0 Ax10+Bx20+C<0,即负样本

这里强调一点,对于分类任务:
     A x 1 + B x 2 + C = 0 Ax_{1}+Bx_{2}+C = 0 Ax1+Bx2+C=0描述的不再是特征与结果之间的关系,而是特征与特征之间的关系
    我们训练的目标,从将一个特征值带入方程来求另一个特征值变成了将两个特征值带入求 A x 1 + B x 2 + C = 0 Ax_{1}+Bx_{2}+C = 0 Ax1+Bx2+C=0的值

2. Logistic回归思想

Logistic回归算法并不满足于上述常规分类思想,而是在其基础上引入了概率的概念,即:

当输入一个新数据 ( x 1 0 , x 2 0 ) (x_{1_{0}},x_{2_{0}}) (x10,x20)

若该数据落在决策边界上:

该样本点是正样本或负样本的概率都是0.5

若该数据落在决策边界左下方,且距离决策边界越远:

该样本点为负样本的概率越大,为正样本的概率越小

若该数据落在决策边界右上方,且距离决策边界越远:

该样本点为正样本的概率越大,为负样本的概率越小


上述描述中,不难看出,Logistic回归是将距离与概率进行关联,那么具体怎样实现呢?

首先我们定义Logistic函数: y = 1 1 + e − x y = \frac{1}{1+e^{-x} } y=1+ex1
其中,x为样本点到决策边界的距离,即 A x 1 + B x 2 + C = 0 的值 Ax_{1}+Bx_{2}+C = 0的值 Ax1+Bx2+C=0的值

对于公式,简单解析下:

  1. 公式为什么会出现e?

求导方便

  1. 为什么公式中样本点到决策边界距离的计算方式与数学中不符?

数学中,点到直线的公式为 A x 0 + B y 0 + C A 2 + B 2 \frac{Ax_{0}+By_{0}+C }{\sqrt{A^{2}+ B^{2}} } A2+B2 Ax0+By0+C,其中 A 2 + B 2 \sqrt{A^{2}+ B^{2}} A2+B2 可以看作一个整数
公式中,我们求得的距离之所以没有除以 A 2 + B 2 \sqrt{A^{2}+ B^{2}} A2+B2 ,是因为每个点的相对距离是一样的

在这里插入图片描述
通过观察函数图像,我们可以看出这个函数非常符合Logistic回归思想:

	自变量x:样本点到决策边界的距离d
	因变量y:样本点属于正负样本的概率P
		
		当自变量为0时,P=0.5
		当自变量趋近-∞时,P趋近于0
		当自变量趋近+∞时,P趋近取1
	
	【注意】这里的距离是有正有负的

由于Logistic函数的形状类似于S,所以该函数又被称为Sigmoid函数

二. Logistic回归算法:线性可分推导

下面我们来具体聊Logistic回归算法,但在开始之前,我们先来明确分类的种类:

	对于二分类任务目标:我们需要寻找一个决策边界,从而达到将两类样本点区分的目的
	
	这里所谓的决策边界,即分类问题中进行分类决策的依据:
		对于二维空间,决策边界是一条直线
		对于三维空间,决策空间是一个平面
		对于多为空间,决策边界是一个超平面
	
	也就是说:
		当上面这些决策边界存在时,我们认为这些样本点是线性可分的
		当上面这些决策边界不存在时,我们认为这些样本点是线性不可分的;比如:找不到一条直线,将样本进行二分类
	
	这里补充一点:
		对于线性不可分的情况,我们的解决方法其实是多项式扩展

那么,接下来我们先来讨论二维空间中的线性可分问题

首先我们先用公式阐述我们的问题:

存在一条决策边界 f ( x ) = θ 0 + θ 1 x 1 + θ 2 x 2 = θ T X , f ( x ) 为距离 f(x)=\theta _{0} +\theta _{1}x_{1}+\theta _{2}x_{2} = \theta ^{T} X,f(x)为距离 f(x)=θ0+θ1x1+θ2x2=θTXf(x)为距离

其中,令 g ( x ) = 1 1 + e − x , g ( x ) 为概率 g(x) = \frac{1}{1+e^{-x} },g(x)为概率 g(x)=1+ex1g(x)为概率
则,会得到 h θ ( x ) = g ( f ( x ) ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 ) h_{\theta } (x) = g(f(x))= g(\theta _{0}+\theta _{1}x_{1}+\theta _{2}x_{2} ) hθ(x)=g(f(x))=g(θ0+θ1x1+θ2x2)
当确定 θ 0 , θ 1 , θ 2 \theta _{0},\theta _{1},\theta _{2} θ0θ1θ2后,就可以用 h θ ( x ) h_{\theta } (x) hθ(x)对新数据进行预测;需要注意的是,此时预测的是样本属于正样本的概率

结合上面对于问题的描述,我们开始对公式进行推导


假设我们采集到数据后,进行标注,得到数据集如下:

x 1 ( i ) , x 2 ( i ) , . . . , x N ( i ) , y ( i ) x_{1}^{(i)}, x_{2}^{(i)}, ... , x_{N}^{(i)}, y^{(i)} x1(i),x2(i),...,xN(i),y(i)
其中,数据集的正样本标注为 y ( i ) = 1 y^{(i)}=1 y(i)=1
其中,数据集的负样本标注为 y ( i ) = 0 y^{(i)}=0 y(i)=0

对于线性可分问题,存在决策边界为:
θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ N x N = 0 \theta _{0}+ \theta _{1}x_{1}+\theta _{2}x_{2}+ ... +\theta _{N}x_{N} = 0 θ0+θ1x1+θ2x2+...+θNxN=0

则,令
d = θ 0 + θ 1 x 1 + θ 2 x 2 + . . . + θ N x N ,这里的距离 d 有正负 d=\theta _{0}+ \theta _{1}x_{1}+\theta _{2}x_{2}+ ... +\theta _{N}x_{N},这里的距离d有正负 d=θ0+θ1x1+θ2x2+...+θNxN,这里的距离d有正负

如果带入每个样本的特征值,就会得到每个样本点到直线的距离,即:
d = θ 0 + θ 1 x 1 ( i ) + θ 2 x 2 ( i ) + . . . + θ N x N ( i ) d = \theta _{0}+ \theta _{1}x_{1}^{(i)}+\theta _{2}x_{2}^{(i)}+ ... +\theta _{N}x_{N}^{(i)} d=θ0+θ1x1(i)+θ2x2(i)+...+θNxN(i)
根据Logistic函数
y = 1 1 + e − x y = \frac{1}{1+e^{-x}} y=1+ex1
带入关于 θ \theta θ的函数d,我们可以得到
h θ ( x ) = 1 1 + e − d ( θ ) h_{\theta } (x) = \frac{1}{1+e^{-d(\theta )}} hθ(x)=1+ed(θ)1

注意:
此时计算的 h θ ( x ) h_{\theta } (x) hθ(x)结果是以正样本为依据,即

所计算的样本属于 正样本/正类 的概率

同理,我们就会得到计算样本属于 负样本/负类 的概率


{ P ( y = 1 ∣ x ; θ ) = h θ ( x ) P ( y = 0 ∣ x ; θ ) = 1 − h θ ( x ) \left\{\begin{matrix}P(y=1|x;\theta ) = h_{\theta }(x) \\P(y=0|x;\theta ) = 1-h_{\theta }(x) \end{matrix}\right. {P(y=1∣x;θ)=hθ(x)P(y=0∣x;θ)=1hθ(x)
合并后,我们会得到
P ( y ∣ x ; θ ) = h θ ( x ) y [ 1 − h θ ( x ) ] 1 − y P(y|x;\theta ) = h_{\theta }(x)^{y}\left [ 1-h_{\theta }(x) \right ]^{1-y} P(yx;θ)=hθ(x)y[1hθ(x)]1y
这样,我们就可以得到关于 θ \theta θ的似然函数:
L ( θ ) = ∏ i = 1 M h θ ( x ( i ) ) y ( i ) [ 1 − h θ ( x ( i ) ) ] 1 − y ( i ) L(\theta)=\prod_{i=1}^{M} h_{\theta }(x^{(i)} )^{y^{(i)} }\left [ 1-h_{\theta }(x^{(i)}) \right ]^{1-y^{(i)}} L(θ)=i=1Mhθ(x(i))y(i)[1hθ(x(i))]1y(i)

为了方便计算,我们对似然求对数,得到
l ( θ ) = l n [ L ( θ ) ] = ∑ i = 1 M { y ( i ) l n [ h θ ( x ( i ) ) ] + ( 1 − y ( i ) ) l n [ 1 − h θ ( x ( i ) ) ] } l(\theta )=ln\left [ L(\theta)\right ]=\sum_{i=1}^{M}\left \{y^{(i)}ln[h_{\theta}(x^{(i)} )]+(1-y^{(i)})ln[1-h_{\theta}(x^{(i)} )] \right \} l(θ)=ln[L(θ)]=i=1M{y(i)ln[hθ(x(i))]+(1y(i))ln[1hθ(x(i))]}
下面,就到了我们熟悉的环节,求 θ \theta θ偏导

∂ l ( θ ) ∂ ( θ j ) = ∑ i = 1 M ∂ { y ( i ) l n [ h θ ( x ( i ) ) ] + ( 1 − y ( i ) ) l n [ 1 − h θ ( x ( i ) ) ] } ∂ ( θ j ) \frac{\partial l(\theta )}{\partial (\theta _{j} )} =\sum_{i=1}^{M}\frac{\partial\left \{ y^{(i)}ln[h_{\theta}(x^{(i)} )]+(1-y^{(i)})ln[1-h_{\theta}(x^{(i)} )] \right \} }{\partial(\theta _{j})} (θj)l(θ)=i=1M(θj){y(i)ln[hθ(x(i))]+(1y(i))ln[1hθ(x(i))]}

      = ∑ i = 1 M ( y ( i ) h θ ( x ( i ) ) − 1 − y ( i ) 1 − h θ ( x ( i ) ) ) ∂ ( h θ ( x ( i ) ) ) ∂ ( θ j ) =\sum_{i=1}^{M}( \frac{y^{(i)}}{h_{\theta}(x^{(i)})} -\frac{1-y^{(i)}}{1-h_{\theta}(x^{(i)})})\frac{\partial(h_{\theta}(x^{(i)})) }{\partial (\theta _{j} )} =i=1M(hθ(x(i))y(i)1hθ(x(i))1y(i))(θj)(hθ(x(i)))

这里我们来推导 ∂ ( h θ ( x ( i ) ) ) ∂ ( θ j ) \frac{\partial(h_{\theta}(x^{(i)})) }{\partial (\theta _{j} )} (θj)(hθ(x(i)))

其中, h θ ( x ) = 1 1 + e − d ( θ ) h_{\theta } (x) = \frac{1}{1+e^{-d(\theta )}} hθ(x)=1+ed(θ)1,又 y = 1 1 + e − x y = \frac{1}{1+e^{-x}} y=1+ex1

所以我们先对y进行求导

d y d x = [ − 1 ( 1 + e − x ) 2 ∗ e − x ∗ ( − 1 ) ] \frac{\mathrm{d} y}{\mathrm{d} x} =\left [ -\frac{1}{(1+e^{-x} )^{2}}\ast e^{-x}\ast (-1)\right ] dxdy=[(1+ex)21ex(1)]

     = 1 1 + e − x ∗ e − x 1 + e − x = \frac{1}{1+e^{-x}} \ast \frac{e^{-x}}{1+e^{-x}} =1+ex11+exex

     = 1 1 + e − x ∗ ( 1 − 1 1 + e − x ) =\frac{1}{1+e^{-x}} \ast (1-\frac{1}{1+e^{-x}}) =1+ex1(11+ex1)

     = y ∗ ( 1 − y ) =y \ast (1-y) =y(1y)

对于 ∂ ( h θ ( x ( i ) ) ) ∂ ( θ j ) \frac{\partial(h_{\theta}(x^{(i)})) }{\partial (\theta _{j} )} (θj)(hθ(x(i)))我们就会得到

∂ ( h θ ( x ( i ) ) ) ∂ ( θ j ) = h θ ( x ( i ) ) ∗ [ 1 − h θ ( x ( i ) ) ] ∗ ∂ d ( θ ) ∂ θ j \frac{\partial(h_{\theta}(x^{(i)})) }{\partial (\theta _{j} )}=h_{\theta}(x^{(i)})\ast \left [ 1-h_{\theta}(x^{(i)}) \right ] \ast \frac{\partial d(\theta )}{\partial \theta _{j} } (θj)(hθ(x(i)))=hθ(x(i))[1hθ(x(i))]θjd(θ)

∂ l ( θ ) ∂ θ j = ∑ i = 1 M ( y ( i ) h θ ( x ( i ) ) − 1 − y ( i ) 1 − h θ ( x ( i ) ) ) ∂ ( h θ ( x ( i ) ) ) ∂ θ j \frac{\partial l(\theta )}{\partial \theta _{j} }=\sum_{i=1}^{M}( \frac{y^{(i)}}{h_{\theta}(x^{(i)})} -\frac{1-y^{(i)}}{1-h_{\theta}(x^{(i)})})\frac{\partial(h_{\theta}(x^{(i)})) }{\partial \theta _{j} } θjl(θ)=i=1M(hθ(x(i))y(i)1hθ(x(i))1y(i))θj(hθ(x(i)))

      = ∑ i = 1 M ( y ( i ) h θ ( x ( i ) ) − 1 − y ( i ) 1 − h θ ( x ( i ) ) ) ∗ h θ ( x ( i ) ) ∗ [ 1 − h θ ( x ( i ) ) ] ∗ ∂ d ( θ ) ( i ) ∂ θ j =\sum_{i=1}^{M}( \frac{y^{(i)}}{h_{\theta}(x^{(i)})} -\frac{1-y^{(i)}}{1-h_{\theta}(x^{(i)})})\ast h_{\theta}(x^{(i)})\ast \left [ 1-h_{\theta}(x^{(i)}) \right ] \ast \frac{\partial d(\theta )^{(i)} }{\partial \theta _{j} } =i=1M(hθ(x(i))y(i)1hθ(x(i))1y(i))hθ(x(i))[1hθ(x(i))]θjd(θ)(i)
      = ∑ i = 1 M [ y ( i ) − h θ ( x ( i ) ) ] ∗ ∂ d ( θ ) ( i ) ∂ θ j =\sum_{i=1}^{M}[y^{(i)}-h_{\theta}(x^{(i)} ) ] \ast \frac{\partial d(\theta )^{(i)} }{\partial \theta _{j} } =i=1M[y(i)hθ(x(i))]θjd(θ)(i)

根据 d ( θ ) ( i ) = θ 0 x 0 ( i ) + θ 1 x 1 ( i ) + θ 2 x 2 ( i ) + . . . + θ N x N ( i ) d(\theta )^{(i)} = \theta _{0}x_{0}^{(i)}+ \theta _{1}x_{1}^{(i)}+\theta _{2}x_{2}^{(i)}+ ... +\theta _{N}x_{N}^{(i)} d(θ)(i)=θ0x0(i)+θ1x1(i)+θ2x2(i)+...+θNxN(i)
我们可以得到
∂ d ( θ ) ( i ) ∂ θ j = x j ( i ) \frac{\partial d(\theta )^{(i)} }{\partial \theta _{j} }=x_{j}^{(i)} θjd(θ)(i)=xj(i)

∂ l ( θ ) ∂ θ j = ∑ i = 1 M [ y ( i ) − h θ ( x ( i ) ) ] ∗ x j ( i ) \frac{\partial l(\theta )}{\partial \theta _{j} }=\sum_{i=1}^{M}[y^{(i)}-h_{\theta}(x^{(i)} ) ] \ast x_{j}^{(i)} θjl(θ)=i=1M[y(i)hθ(x(i))]xj(i)

为了求解似然函数的最大值,我们需要令导数等于0,即
∂ l ( θ ) ∂ θ j = 0 \frac{\partial l(\theta )}{\partial \theta _{j} }=0 θjl(θ)=0

这里继续向下推会发现,求解偏导为0的计算十分困难

由此,我们会想到用梯度下降优化模型参数,那么,具体怎么优化,我们下一篇再见啦!


感谢阅读🌼
如果喜欢这篇文章,记得点赞👍和转发🔄哦!
有任何想法或问题,欢迎留言交流💬,我们下次见!

祝愉快🌟!


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

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

相关文章

小乌龟操作Git

1、选择小乌龟作为git客户端 最近使用idea来操作git的时候频频出现问题&#xff0c;要么是提交代码的时候少了某些文件&#xff0c;导致克隆下来无法运行&#xff0c;要么是提交速度太慢。 反正是在idea中操作git体验非常不好&#xff0c;所以决定来换一种方式来操作git。从网…

Java类加载器 和 双亲委派【详解】

一.类加载器&#xff1a; 由JDK提供的&#xff0c;用于加载一些资源文件到JVM内存里的一项技术。主要是加载class文件到内存&#xff0c;也可以加载一些资源文件。 2.JDK提供了三个类加载器&#xff1a; BootstrapClassLoader&#xff1a;引导类加载器&#xff0c; 是c语言编写…

[SUCTF 2019]EasyWeb --不会编程的崽

个人认为&#xff0c;这题还算有些东西。先来看源码 <?php function get_the_flag(){// webadmin will remove your upload file every 20 min!!!! $userdir "upload/tmp_".md5($_SERVER[REMOTE_ADDR]);if(!file_exists($userdir)){mkdir($userdir);}if(!empty…

Node服务器性能分析调优debug

node其实自带提供了性能分析工具&#xff1a;node --profile 但是它分析起来并不是很好用&#xff0c;于是chrome提供了另一种分析和debug工具&#xff1a;Chrome devtool 使用这个工具我们可以分析自己的Node项目调用堆栈里耗时较长的任务&#xff0c;对应去做缓存或者异步调用…

Day10:基础入门-HTTP数据包Postman构造请求方法请求头修改状态码判断

目录 数据-方法&头部&状态码 案例-文件探针 案例-登录爆破 工具-Postman自构造使用 思维导图 章节知识点&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件…

Facebook广告账户被封的可能原因及应如何避免?

Facebook作为全球最大的社交平台&#xff0c;是众多出海企业和广告主的推广渠道。但不少广告主在使用Facebook广告账户推广时&#xff0c;因各种原因导致账户被封&#xff0c;不仅影响了业务进程&#xff0c;更是给广告主带来了经济损失。 账户被封邮件如下&#xff1a; 以下是…

Dell R730 2U服务器实践2:VMWare ESXi安装

缘起 刚到手边的一台Dell R730是三块硬盘raid0 &#xff0c;把我惊出一身冷汗&#xff0c;准备把它们改组成raid1 或者raid5 。 但是舍不得里面的ESXi 8 &#xff0c;寻找能否把raid0改成raid1 还不掉WSXi的方法&#xff0c;很遗憾没有找到。那样只能重装ESXi了。 ESXi软件下…

Python 画 箱线图

Python 画 箱线图 flyfish 箱线图 其他名字 盒须图 / 箱形图 横向用正态分布看 垂直看 pandas画 import pandas as pdimport seaborn as sns import matplotlib.pyplot as plt import pandas as pddf pd.read_csv(sh300.csv) print("原始数据") print(df.he…

【JVM】聊聊常见的JVM排查工具

JDK工具包 jps 虚拟机进程状况工具 jps是虚拟机进程状况工具&#xff0c;列出正在运行的虚拟机进程&#xff0c;使用 Windows 的任务管理器或 UNIX 的 ps 命令也可以查询&#xff0c;但如果同时启动多个进程&#xff0c;必须依赖 jps。jps -l 显示类名 jps :列出Java程序进程…

循环简介和基本运算符

根据C Primer Plus第五章进行学习 文章目录 循环简介基本运算符 1.赋值运算符&#xff1a;2.加法运算符&#xff1a;3.减法运算符&#xff1a;-2.乘法运算符&#xff1a;*总结 1.循环简介 如下代码可以体现不使用循环的局限性&#xff1a; #include<stdio.h> #define AD…

云天励飞战略投资神州云海,布局机器人市场

日前,AI上市企业云天励飞(688343.SH)完成了对深圳市神州云海智能科技有限公司(以下简称“神州云海”)的B轮战略投资。 公开资料显示,自2015年于深圳创立以来,神州云海始终聚焦人工智能与服务机器人广阔的应用市场,依托自主的核心算法能力,深耕机器人硬件本体研发,整合上下游产…

【机器学习300问】25、常见的模型评估指标有哪些?

模型除了从数据划分的角度来评估&#xff0c;我上一篇文章介绍了数据集划分的角度&#xff1a; 【机器学习300问】24、模型评估的常见方法有哪些&#xff1f;http://t.csdnimg.cn/LRyEt 还可以从一些指标的角度来评估&#xff0c;这篇文章就带大家从两个最经典的任务场景介绍…

微信云开发-- Mac安装 wx-server-sdk依赖

第一次上传部署云函数时&#xff0c;会提示安装依赖wx-server-sdk 一. 判断是否安装wx-server-sdk依赖 先创建一个云函数&#xff0c;然后检查云函数目录。 如果云函数目录下只显示如下图所示三个文件&#xff0c;说明未安装依赖。 如果云函数目录下显示如下图所示四个文件&a…

数电实验之流水灯、序列发生器

最近又用到了数电实验设计的一些操作和设计思想&#xff0c;遂整理之。 广告流水灯 实验内容 用触发器、组合函数器件和门电路设计一个广告流水灯&#xff0c;该流水灯由 8 个 LED 组成&#xff0c;工作时始终为 1 暗 7 亮&#xff0c;且这一个暗灯循环右移。 1) 写出设计过…

吴恩达机器学习笔记:第5周-9 神经网络的学习(Neural Networks: Learning)

目录 9.1 代价函数 9.1 代价函数 首先引入一些便于稍后讨论的新标记方法&#xff1a; 假设神经网络的训练样本有&#x1d45a;个&#xff0c;每个包含一组输入&#x1d465;和一组输出信号&#x1d466;&#xff0c;&#x1d43f;表示神经网络层数&#xff0c;&#x1d446;&…

babylonjs入门-半球光

基于babylonjs封装的一些功能和插件 &#xff0c;希望有更多的小伙伴一起玩babylonjs&#xff1b; 欢迎加群&#xff08;点击群号传送&#xff09;&#xff1a;464146715 官方文档 中文文档 案例传送门 懒得打字 粘贴复制 一气呵成

kubectl 陈述式资源管理方法

目录 陈述式资源管理方法 项目的生命周期 1.创建kubectl create命令 2.发布kubectl expose命令 service的4的基本类型 查看pod网络状态详细信息和 Service暴露的端口 查看关联后端的节点 ​编辑 查看 service 的描述信息 ​编辑在 node01 节点上操作&#xff0c;查看…

3.1 IO进程线程

使用fwrite、fread将一张随意的bmp图片&#xff0c;修改成德国的国旗 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> int main(int argc, const char *argv[]) {FILE* fp fopen("./2.bmp","r&quo…

用 deforum 来演绎 2024 年的 AI PC:《赛博朋克狂想曲》

想象一下&#xff0c;你不只是坐在屏幕前&#xff0c;还能 “跳” 进去&#xff01;&#xff01;这是只有身处 AI 流行文化时代之下的我们&#xff0c;才能感受到的独特风格。 作者 947&#xff1a; “ 我想通过这个视频&#xff0c;不只是让大家看到一个充满科技的世界&#x…

Java求职技能清单(2024版)

一、Java基础扎实&#xff08;反射、集合、IO、NIO、多线程、设计模式、通信协议等基础技术&#xff09; &#xff08;一&#xff09;Java &#xff08;二&#xff09;网络IO &#xff08;三&#xff09;NIO模型 &#xff08;…