news 2026/3/27 17:46:03

深度学习理论推导--二分类逻辑回归

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深度学习理论推导--二分类逻辑回归

文章目录

    • 前言
    • 二分类问题
    • 似然函数
    • 极大似然估计
    • 梯度下降法
      • 函数准备
      • 求偏导
      • 损失函数
      • 梯度更新
    • python 实战
      • LogisticRegression
      • 训练及结果
      • 运行结果
    • 总结

当你迷茫的时候,请回头看看 目录大纲,也许有你意想不到的收获

前言

前面讲到几篇都是线性回归问题的求解,求解方式有最小二乘法,正规方程,梯度下降法。

现在讲讲另一种回归问题,就是逻辑回归,也就是分类问题,分类问题也包括二分类多分类问题。

  1. 二分类:输出是(1)否(0),例如逻辑门,与门、或门、非门、异或门等等。

  2. 多分类:输出的是多个值,对应着每个分类的概率,是小于或等于 1 的值。最经典的例子莫过于手写数字的识别,给出一张手写的数字图片,最后输出是各个数字(1~9)的概率,比如我手写了一个 7,像 7 又像 1,那么多分类输出可能为:7 有 0.9 概率,1 有 0.1 的概率,其他数字概率接近于 0。

二分类问题

先简单点,讨论二分类问题

多元线性函数

u = w 1 x 1 + w 2 x 2 + . . . + b u=w_1x_1+w_2x_2+...+bu=w1x1+w2x2+...+b

σ \sigmaσ函数

σ ( x ) = 1 1 + e − x = e x 1 + e x \sigma(x)=\frac{1}{1+e^{-x}}=\frac{e^x}{1+e^x}\\[10pt]σ(x)=1+ex1=1+exex

可以看出:σ ( x ) ∈ ( 0 , 1 ) \sigma(x) \in (0,1)σ(x)(0,1),如果令P = σ ( x ) P=\sigma(x)P=σ(x),那么有x = ln ⁡ P 1 − P x=\ln{\frac{P}{1-P}}x=ln1PP,这个也比较好推导:

∵ σ ( x ) = 1 1 + e − x = P ∴ 1 + e − x = 1 P ∴ e − x = 1 P − 1 = 1 − P P ∴ x = − ln ⁡ 1 − P P = ln ⁡ P 1 − P \because\sigma(x)=\frac{1}{1+e^{-x}}=P\\[10pt] \therefore 1+e^{-x}=\frac{1}{P}\\[10pt] \therefore e^{-x}=\frac{1}{P}-1=\frac{1-P}{P}\\[10pt] \therefore x=-\ln{\frac{1-P}{P}}=\ln{\frac{P}{1-P}}σ(x)=1+ex1=P1+ex=P1ex=P11=P1Px=lnP1P=ln1PP

σ ( x ) \sigma(x)σ(x)导数:

σ ′ ( x ) = − 1 ( 1 + e − x ) 2 ⋅ ( 1 + e − x ) ′ = e − x ( 1 + e − x ) 2 = 1 1 + e − x ⋅ e − x 1 + e − x = 1 1 + e − x ⋅ ( 1 − 1 1 + e − x ) ∴ σ ′ ( x ) = σ ( x ) ⋅ ( 1 − σ ( x ) ) \sigma'(x)=-\frac{1}{(1+e^{-x})^2} \cdot (1+e^{-x})'=\frac{e^{-x}}{(1+e^{-x})^2}\\[10pt] =\frac{1}{1+e^{-x}} \cdot \frac{e^{-x}}{1+e^{-x}} =\frac{1}{1+e^{-x}} \cdot (1- \frac{1}{1+e^{-x}})\\[10pt] \therefore \sigma'(x)= \sigma(x)\cdot (1-\sigma(x))\\[10pt]σ(x)=(1+ex)21(1+ex)=(1+ex)2ex=1+ex11+exex=1+ex1(11+ex1)σ(x)=σ(x)(1σ(x))

输出函数

将线性函数与σ \sigmaσ函数结合在一起,得到一个函数σ ( u ) \sigma(u)σ(u),这里把 b 也看作是w n w_nwn,相应地x n x_nxn也就为 1

σ ( u ) = 1 1 + e − u = 1 1 + e − ( w 1 x 1 + w 2 x 2 + . . . + w n x n ) \sigma(u)=\frac{1}{1+e^{-u}}=\frac{1}{1+e^{-(w_1x_1+w_2x_2+...+w_nx_n)}}σ(u)=1+eu1=1+e(w1x1+w2x2+...+wnxn)1

这里我令输出函数z = σ ( u ) z=\sigma(u)z=σ(u),即

z = σ ( u ) = 1 1 + e − u = 1 1 + e − ( w 1 x 1 + w 2 x 2 + . . . + w n x n ) z=\sigma(u)=\frac{1}{1+e^{-u}}=\frac{1}{1+e^{-(w_1x_1+w_2x_2+...+w_nx_n)}}\\[10pt]z=σ(u)=1+eu1=1+e(w1x1+w2x2+...+wnxn)1

根据σ \sigmaσ函数导数性质有:

z ′ = σ ′ ( u ) = σ ( u ) ⋅ ( 1 − σ ( u ) ) = z ( 1 − z ) z'=\sigma'(u)=\sigma(u)\cdot (1-\sigma(u))=z(1-z)\\[10pt]z=σ(u)=σ(u)(1σ(u))=z(1z)

上面我们提到过σ ( u ) ∈ ( 0 , 1 ) \sigma(u) \in (0,1)σ(u)(0,1),令P = σ ( u ) P=\sigma(u)P=σ(u),那么有u = ln ⁡ P 1 − P u=\ln{\frac{P}{1-P}}u=ln1PP,P 可以看作是某个类别的概率,对于二分类来说,概率要么是 0,要么是 1,那么从概率的角度上看:

∵ P = σ ( u ) ∴ u = ln ⁡ P 1 − P = ln ⁡ P ( y = 1 ∣ x ) P ( y = 0 ∣ x ) \because P=\sigma(u)\\[10pt] \therefore u=\ln{\frac{P}{1-P}}=\ln{\frac{P(y=1|x)}{P(y=0|x)}}P=σ(u)u=ln1PP=lnP(y=0∣x)P(y=1∣x)

y 为真实标签,u 的含义为事件为1的概率P ( y = 1 ∣ x ) P(y=1|x)P(y=1∣x)事件为0的概率P ( y = 0 ∣ x ) P(y=0|x)P(y=0∣x)比值再取对数。

似然函数

似然(likelihood),一听这个名字就知道是以前的老前辈翻译的,带有文言色彩

似然:相似的样子

假设总共有 m 个样本,第 i 个样本,二分类的似然函数如下,其中z i z_izi为预测输出,y i y_iyi为实际输出:

L ( w ) = ∏ i = 1 m z i y i ( 1 − z i ) ( 1 − y i ) % 似然函数 L(w)=\prod\limits_{i=1}^{m} z_i^{y_i}(1-z_i)^{(1-y_i)}\\[10pt]L(w)=i=1mziyi(1zi)(1yi)

要注意的是,这里y i y_iyi1 − y i 1-y_i1yi其中有一个为 0,z i z_izi要么为 0,要么为 1(二分类),令:

w = [ w 1 w 2 … w n ] , x i = [ x i 1 x i 2 … x i n ] z i = σ ( w T x i ) % w 参数 w=\begin{bmatrix} w_1\\w_2\\\dots\\ w_n \end{bmatrix}, % x 输入 x_i=\begin{bmatrix} x_{i1}\\x_{i2}\\\dots\\ x_{in} \end{bmatrix}\\[10pt] z_i=\sigma(w^Tx_i)\\[10pt]w=w1w2wn,xi=xi1xi2xinzi=σ(wTxi)

为了方便,可以对似然函数取对数,就由乘法转为了加法,称之为对数似然函数

ℓ ( w ) = ln ⁡ L ( w ) = ln ⁡ ( ∏ i = 1 m z i y i ( 1 − z i ) ( 1 − y i ) ) = ∑ i = 1 m [ y i ln ⁡ z i + ( 1 − y i ) ln ⁡ ( 1 − z i ) ] \ell(w)=\ln{L(w)}=\ln{(\prod\limits_{i=1}^{m} z_i^{y_i}(1-z_i)^{(1-y_i)})}\\[10pt] =\sum\limits_{i=1}^{m}[{y_i\ln{z_i}}+{(1-y_i)\ln{(1-z_i)}}](w)=lnL(w)=ln(i=1mziyi(1zi)(1yi))=i=1m[yilnzi+(1yi)ln(1zi)]

因为输出z i ∈ ( 0 , 1 ) z_i \in(0,1)zi(0,1),所以ln ⁡ z i \ln{z_i}lnzi或者ln ⁡ ( 1 − z i ) \ln(1-z_i)ln(1zi)都是负数,因此负对数似然为正数:

L N L L ( w ) = − ∑ i = 1 m [ y i ln ⁡ z i + ( 1 − y i ) ln ⁡ ( 1 − z i ) ] \mathcal{L}_{NLL}(w)= - \sum\limits_{i=1}^{m}[{y_i\ln{z_i}}+{(1-y_i)\ln{(1-z_i)}}]LNLL(w)=i=1m[yilnzi+(1yi)ln(1zi)]

极大似然估计

还记得我们前面的最小二乘法吗?目标是最小残差平方和(RSS),通过 RSS 来判断函数拟合的优劣,那么对于回归回题,目标则是求极大似然估计,似然函数或对数似然函数越大,等效于负对数似然越小,函数拟合的就越好。

极大似然估计,等效于要求负对数似然极小。这就和最小化残差平方和有点相似了,都是求最小,就可以采用梯度下降法进行求解。

梯度下降法

函数准备

令 i 为样本号,eg.z i z_{i}zi为第 i 个样本预测概率,y i y_{i}yi为真实概率,有:

u i = w 1 x i 1 + w 2 x i 2 + . . . + b = [ x i 1 x i 2 … 1 ] [ w 1 w 2 … b ] z i = σ ( u i ) = 1 1 + e − u i u_{i}=w_{1}x_{i1}+w_{2}x_{i2}+...+b\\[10pt] =\begin{bmatrix} x_{i1}& x_{i2}&\dots& 1 \end{bmatrix} \begin{bmatrix} w_{1}\\ w_{2}\\\dots\\ b \end{bmatrix} \\[10pt] z_{i}=\sigma(u_{i})=\frac{1}{1+e^{-u_{i}}}\\[10pt]ui=w1xi1+w2xi2+...+b=[xi1xi21]w1w2bzi=σ(ui)=1+eui1

可以把 b 作为w n w_{n}wn,那么x n = 1 x_{n}=1xn=1它们的偏导为:

∂ u i ∂ w k = x i k ∂ z i ∂ u i = z i ( 1 − z i ) \frac{\partial u_{i}}{\partial w_{k}} =x_{ik}\\[10pt] \frac{\partial z_{i}}{\partial u_{i}} =z_{i}(1-z_{i})\\[10pt]wkui=xikuizi=zi(1zi)

负对数似然函数为

L N L L ( w ) = − ∑ i = 1 m [ y i ln ⁡ z i + ( 1 − y i ) ln ⁡ ( 1 − z i ) ] \mathcal{L}_{NLL}(w)= - \sum\limits_{i=1}^{m}[{y_i\ln{z_i}}+{(1-y_i)\ln{(1-z_i)}}]LNLL(w)=i=1m[yilnzi+(1yi)ln(1zi)]

令:

E i = − [ y i ln ⁡ z i + ( 1 − y i ) ln ⁡ ( 1 − z i ) ] ∴ L N L L ( w ) = ∑ i = 1 m E i E_{i}=-[{y_i\ln{z_i}}+{(1-y_i)\ln{(1-z_i)}}]\\[10pt] %% \therefore \mathcal{L}_{NLL}(w)= \sum\limits_{i=1}^{m}E_{i}\\[10pt]Ei=[yilnzi+(1yi)ln(1zi)]LNLL(w)=i=1mEi

求偏导

∂ E i ∂ z i = − ( y i z i − 1 − y i 1 − z i ) = z i − y i z i ( 1 − z i ) %% \frac{\partial E_{i}}{\partial z_{i}} =-(\frac{y_{i}}{z_{i}}-\frac{1-y_{i}}{1-z_{i}})\\[10pt] =\frac{z_{i}-y_{i}}{z_{i}(1-z_{i})} \\[10pt]ziEi=(ziyi1zi1yi)=zi(1zi)ziyi

所以有:

∂ E i ∂ w k = ∂ E i ∂ z i ⋅ ∂ z i ∂ u i ⋅ ∂ u i ∂ w k = z i − y i z i ( 1 − z i ) ⋅ z i ( 1 − z i ) ⋅ x i k = ( z i − y i ) ⋅ x i k ∴ ∂ L N L L ∂ w k = ∑ i = 1 m ∂ E i ∂ w k = ∑ i = 1 m ( z i − y i ) ⋅ x i k \frac{\partial E_{i}}{\partial w_{k}} =\frac{\partial E_{i}}{\partial z_{i}} \cdot \frac{\partial z_{i}}{\partial u_{i}}\cdot \frac{\partial u_{i}}{\partial w_{k}}\\[10pt] =\frac{z_{i}-y_{i}}{z_{i}(1-z_{i})} \cdot z_{i}(1-z_{i}) \cdot x_{ik}\\[10pt] =(z_{i}-y_{i}) \cdot x_{ik}\\[10pt] %% \therefore\frac{\partial \mathcal{L}_{NLL}}{\partial w_{k}} =\sum\limits_{i=1}^{m}\frac{\partial E_{i}}{\partial w_{k}} =\sum\limits_{i=1}^{m}(z_{i}-y_{i}) \cdot x_{ik}\\[10pt]wkEi=ziEiuiziwkui=zi(1zi)ziyizi(1zi)xik=(ziyi)xikwkLNLL=i=1mwkEi=i=1m(ziyi)xik

损失函数

项目上多用均值作为损失函数,即:

E = 1 m L N L L ( w ) = 1 m ∑ i = 1 m E i = − 1 m ∑ i = 1 m [ y i ln ⁡ z i + ( 1 − y i ) ln ⁡ ( 1 − z i ) ] E=\frac{1}{m}\mathcal{L}_{NLL}(w)=\frac{1}{m}\sum\limits_{i=1}^{m}E_{i}\\[10pt] =-\frac{1}{m}\sum\limits_{i=1}^{m}[{y_i\ln{z_i}}+{(1-y_i)\ln{(1-z_i)}}]\\[10pt]E=m1LNLL(w)=m1i=1mEi=m1i=1m[yilnzi+(1yi)ln(1zi)]

所以有:

∂ E ∂ w k = 1 m ∂ L N L L ∂ w k = 1 m ∑ i = 1 m ( z i − y i ) ⋅ x i k \frac{\partial E}{\partial w_{k}} =\frac{1}{m}\frac{\partial \mathcal{L}_{NLL}}{\partial w_{k}} =\frac{1}{m}\sum\limits_{i=1}^{m}(z_{i}-y_{i}) \cdot x_{ik}\\[10pt]wkE=m1wkLNLL=m1i=1m(ziyi)xik

梯度更新

上面我们求出了偏导,是为了求梯度准备的。

再来翻译一下,梯度:梯子的斜度,也就是斜率,对于多维度的梯度,就是每个维度方向上的斜率。

那么 E 的梯度为:

∂ E ∂ w ⃗ = [ ∂ E ∂ w 1 ∂ E ∂ w 2 … ∂ E ∂ w n ] = [ 1 m ∑ i = 1 m ( z i − y i ) ⋅ x i 1 1 m ∑ i = 1 m ( z i − y i ) ⋅ x i 2 … 1 m ∑ i = 1 m ( z i − y i ) ⋅ x i n ] \frac{\partial E}{\partial \vec{w}}=\begin{bmatrix} \frac{\partial E}{\partial w_{1}}\\[10pt] \frac{\partial E}{\partial w_{2}}\\[10pt] \dots\\[10pt] \frac{\partial E}{\partial w_{n}}\\[10pt] \end{bmatrix} =\begin{bmatrix} \frac{1}{m}\sum\limits_{i=1}^{m}(z_{i}-y_{i}) \cdot x_{i1}\\[10pt] \frac{1}{m}\sum\limits_{i=1}^{m}(z_{i}-y_{i}) \cdot x_{i2}\\[10pt] \dots\\[10pt] \frac{1}{m}\sum\limits_{i=1}^{m}(z_{i}-y_{i}) \cdot x_{in}\\[10pt] \end{bmatrix}wE=w1Ew2EwnE=m1i=1m(ziyi)xi1m1i=1m(ziyi)xi2m1i=1m(ziyi)xin

前面我们推导出沿着梯度方向下降最快:

Δ w k = η Δ r ∂ E ∂ w k w k ( t + 1 ) = w k ( t ) − η Δ r ∂ E ∂ w k \Delta{w_k}= \eta\Delta{r}\frac{\partial E}{\partial w_{k}} \\[10pt] w_{k}^{(t+1)}=w_{k}^{(t)} - \eta\Delta{r}\frac{\partial E}{\partial w_{k}} \\[10pt]Δwk=ηΔrwkEwk(t+1)=wk(t)ηΔrwkE

这里Δ r \Delta{r}Δr为 w 在梯度l ⃗ \vec{l}l方向增长一个微小单位,分解到各维度方向增长就是Δ r cos ⁡ θ k \Delta{r}\cos{\theta_k}Δrcosθkθ k \theta_kθk为梯度l ⃗ \vec{l}lw k w_kwk维度方向的夹角。

η = 1 ∑ k = 1 n ( ∂ E ∂ w k ) 2 cos ⁡ θ k = η ∂ E ∂ w k = ∂ E ∂ w k ∑ k = 1 n ( ∂ E ∂ w k ) 2 \eta=\frac{1}{\sqrt{\sum\limits_{k=1}^{n}{(\frac{\partial E}{\partial {w_k}})^2}}}\\[10pt] %% \cos{\theta_k}=\eta\frac{\partial E}{\partial {w_k}}=\frac{\frac{\partial E}{\partial {w_k}}}{\sqrt{\sum\limits_{k=1}^{n}{(\frac{\partial E}{\partial {w_k}})^2}}}\\[10pt]η=k=1n(wkE)21cosθk=ηwkE=k=1n(wkE)2wkE

python 实战

以异或门为例:

真值表为:

i iix i 1 x_{i1}xi1x i 2 x_{i2}xi2y i y_iyi
i=1000
i=2011
i=3101
i=4110

可以把真值表中的每一行都看作是一个样本,x i 1 x_{i1}xi1x i 2 x_{i2}xi2为异或门的 第 i 个样本输入,y i y_iyi为第 i 个样本的输出。

LogisticRegression

定义好逻辑回归训练类 LogisticRegression,包括前向计算,反向传播

importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.colorsimportListedColormapclassLogisticRegression:"""手动实现的逻辑回归"""def__init__(self,learning_rate=0.1,n_iterations=10000):self.lr=learning_rate self.n_iter=n_iterations self.weights=Noneself.bias=Noneself.losses=[]defsigmoid(self,z):"""Sigmoid激活函数"""return1/(1+np.exp(-z))deffit(self,X,y):"""训练逻辑回归模型"""n_samples,n_features=X.shape# 初始化参数self.weights=np.random.randn(n_features)self.bias=0# 梯度下降foriterationinrange(self.n_iter):# 前向传播u=np.dot(X,self.weights)+self.bias z=self.sigmoid(u)# 计算损失,避免log中出现0的情况,加上一个非常小的值loss=-np.mean(y*np.log(z+1e-15)+(1-y)*np.log(1-z+1e-15))self.losses.append(loss)# 计算梯度dw=(1/n_samples)*np.dot(X.T,(z-y))db=(1/n_samples)*np.sum(z-y)# 更新参数self.weights-=self.lr*dw self.bias-=self.lr*db# 打印进度ifiteration%1000==0:accuracy=self.score(X,y)print(f"Iteration{iteration}, Loss:{loss:.4f}, Accuracy:{accuracy:.4f}")defpredict_proba(self,X):"""预测概率"""linear_output=np.dot(X,self.weights)+self.biasreturnself.sigmoid(linear_output)defpredict(self,X,threshold=0.5):"""预测类别"""probabilities=self.predict_proba(X)return(probabilities>=threshold).astype(int)defscore(self,X,y):"""计算准确率"""predictions=self.predict(X)returnnp.mean(predictions==y)

训练及结果

准备样本数据进行训练并绘制损失函数,分别尝试线性特征与使用多项式特征来训练求解

defcreate_xor_data():"""创建异或门数据"""X=np.array([[0,0],[0,1],[1,0],[1,1]])y=np.array([0,1,1,0])returnX,ydefadd_polynomial_features(X):"""添加多项式特征解决线性不可分问题"""# 添加平方项和交叉项X_poly=np.hstack([X,X[:,0:1]**2,# x1²X[:,1:2]**2,# x2²(X[:,0:1]*X[:,1:2]),# x1*x2])returnX_polydefvisualize_results(X,y,model,title,feature_type='linear'):"""可视化决策边界和结果"""fig,axes=plt.subplots(1,2,figsize=(12,5))# 创建网格点x_min,x_max=X[:,0].min()-0.5,X[:,0].max()+0.5y_min,y_max=X[:,1].min()-0.5,X[:,1].max()+0.5xx,yy=np.meshgrid(np.arange(x_min,x_max,0.01),np.arange(y_min,y_max,0.01))iffeature_type=='poly':# 为多项式特征准备网格数据grid=np.c_[xx.ravel(),yy.ravel()]grid_poly=add_polynomial_features(grid)Z=model.predict(grid_poly)else:grid=np.c_[xx.ravel(),yy.ravel()]Z=model.predict(grid)Z=Z.reshape(xx.shape)# 绘制决策边界axes[0].contourf(xx,yy,Z,alpha=0.4,cmap=ListedColormap(['#FFAAAA','#AAAAFF']))axes[0].scatter(X[:,0],X[:,1],c=y,s=100,cmap=ListedColormap(['red','blue']),edgecolors='k')axes[0].set_xlabel('x1')axes[0].set_ylabel('x2')axes[0].set_title(f'Decision Boundary -{title}')axes[0].grid(True,alpha=0.3)# 绘制损失曲线axes[1].plot(model.losses)axes[1].set_xlabel('Iteration')axes[1].set_ylabel('Loss')axes[1].set_title('Loss Curve')axes[1].grid(True,alpha=0.3)plt.tight_layout()plt.show()defmain():# 1. 准备数据X,y=create_xor_data()print("原始数据:")print("X:",X)print("y:",y)print()# 2. 尝试线性特征(无法解决异或问题)print("="*50)print("1. 使用线性特征(应该失败):")print("="*50)model_linear=LogisticRegression(learning_rate=0.1,n_iterations=10000)model_linear.fit(X,y)print(f"线性模型准确率:{model_linear.score(X,y):.4f}")print(f"权重:{model_linear.weights}, 偏置:{model_linear.bias:.4f}")print(f"预测结果:{model_linear.predict(X)}")visualize_results(X,y,model_linear,"Linear Features",'linear')# 3. 使用多项式特征(可以解决异或问题)print("\n"+"="*50)print("2. 使用多项式特征(应该成功):")print("="*50)X_poly=add_polynomial_features(X)print("多项式特征形状:",X_poly.shape)print("特征示例:",X_poly[0])model_poly=LogisticRegression(learning_rate=0.1,n_iterations=20000)model_poly.fit(X_poly,y)print(f"多项式模型准确率:{model_poly.score(X_poly,y):.4f}")print(f"权重:{model_poly.weights}, 偏置:{model_poly.bias:.4f}")print(f"预测结果:{model_poly.predict(X_poly)}")# 显示详细预测print("\n详细预测:")foriinrange(len(X)):prob=model_poly.predict_proba(X_poly[i:i+1])[0]pred=model_poly.predict(X_poly[i:i+1])[0]print(f"X={X[i]}, y={y[i]}, 预测概率={prob:.6f}, 预测类别={pred}")visualize_results(X,y,model_poly,"Polynomial Features",'poly')

运行结果

运行main()得到如下结果:

  1. 使用线性特征

    原始数据: X: [[0 0] [0 1] [1 0] [1 1]] y: [0 1 1 0] ================================================== 1. 使用线性特征(应该失败): ================================================== Iteration 0, Loss: 0.6989, Accuracy: 0.5000 Iteration 1000, Loss: 0.6931, Accuracy: 0.5000 Iteration 2000, Loss: 0.6931, Accuracy: 0.7500 Iteration 3000, Loss: 0.6931, Accuracy: 0.7500 Iteration 4000, Loss: 0.6931, Accuracy: 0.7500 Iteration 5000, Loss: 0.6931, Accuracy: 0.7500 Iteration 6000, Loss: 0.6931, Accuracy: 0.7500 Iteration 7000, Loss: 0.6931, Accuracy: 0.7500 Iteration 8000, Loss: 0.6931, Accuracy: 0.7500 Iteration 9000, Loss: 0.6931, Accuracy: 0.5000 线性模型准确率: 0.5000 权重: [-2.48590055e-16 -2.48352572e-16], 偏置: 0.0000 预测结果: [1 1 1 1]

  2. 多项式特征

    ================================================== 1. 使用多项式特征(应该成功): ================================================== 多项式特征形状: (4, 5) 特征示例: [0 0 0 0 0] Iteration 0, Loss: 0.9076, Accuracy: 0.5000 Iteration 1000, Loss: 0.2192, Accuracy: 1.0000 Iteration 2000, Loss: 0.1162, Accuracy: 1.0000 Iteration 3000, Loss: 0.0774, Accuracy: 1.0000 Iteration 4000, Loss: 0.0576, Accuracy: 1.0000 Iteration 5000, Loss: 0.0457, Accuracy: 1.0000 Iteration 6000, Loss: 0.0378, Accuracy: 1.0000 Iteration 7000, Loss: 0.0322, Accuracy: 1.0000 Iteration 8000, Loss: 0.0280, Accuracy: 1.0000 Iteration 9000, Loss: 0.0248, Accuracy: 1.0000 Iteration 10000, Loss: 0.0223, Accuracy: 1.0000 Iteration 11000, Loss: 0.0202, Accuracy: 1.0000 Iteration 12000, Loss: 0.0184, Accuracy: 1.0000 Iteration 13000, Loss: 0.0170, Accuracy: 1.0000 Iteration 14000, Loss: 0.0157, Accuracy: 1.0000 Iteration 15000, Loss: 0.0146, Accuracy: 1.0000 Iteration 16000, Loss: 0.0137, Accuracy: 1.0000 Iteration 17000, Loss: 0.0129, Accuracy: 1.0000 Iteration 18000, Loss: 0.0121, Accuracy: 1.0000 ... X=[0 0], y=0, 预测概率=0.014450, 预测类别=0 X=[0 1], y=1, 预测概率=0.989687, 预测类别=1 X=[1 0], y=1, 预测概率=0.989687, 预测类别=1 X=[1 1], y=0, 预测概率=0.008247, 预测类别=0

总结

  • 逻辑回归是线性分类器,决策边界是超平面

    w 1 x 1 + w 2 x 2 + . . . + w n x n = 0 w_1x_1+w_2x_2+...+w_nx_n=0w1x1+w2x2+...+wnxn=0

  • 对于原始异或问题

    (0,0)→ 类别0(0,1)→ 类别1(1,0)→ 类别1(1,1)→ 类别0

    在二维空间中,不存在一条直线能完美分离这 4 个点。这是线性不可分问题的经典例子。

  • 解决方案:特征映射

    通过添加多项式特征,将数据映射到高维空间:

    [ x 1 x 2 ] → [ x 1 x 2 x 1 2 x 2 2 x 1 x 2 ] \begin{bmatrix} x_1 & x_2 \end{bmatrix} \rightarrow \begin{bmatrix} x_1 & x_2 & {x_1}^2 & {x_2}^2 & {x_1x_2} \end{bmatrix}[x1x2][x1x2x12x22x1x2]

那么决策边界就变成了多项式

w 1 x 1 + w 2 x 2 + w 3 x 1 2 + w 4 x 2 2 + w 5 x 1 x 2 = 0 w_1x_1+w_2x_2+w_3{x_1}^2+w_4{x_2}^2+w_5{x_1x_2}=0w1x1+w2x2+w3x12+w4x22+w5x1x2=0

在高维空间中,数据变得线性可分,这就是神经网络中隐藏层的思想基础。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/24 8:18:02

微博超话自动签到神器:告别繁琐签到,享受智能追星新体验

微博超话自动签到神器:告别繁琐签到,享受智能追星新体验 【免费下载链接】weibo_supertopic_sign 基于Python/Nodejs的微博超话签到脚本,支持云函数运行或青龙面板运行 项目地址: https://gitcode.com/gh_mirrors/we/weibo_supertopic_sign…

作者头像 李华
网站建设 2026/3/24 9:14:54

25、系统日志管理与大文件处理全攻略

系统日志管理与大文件处理全攻略 1. 系统日志概述 在系统运行过程中,即使是使用频率较低的系统,在启动和关闭期间也会生成数千行日志文件,而繁忙的应用程序每天轻松就能产生数百万行日志。日志文件往往冗长且枯燥,因此我们通常会借助软件智能过滤出紧急条目,如即将发生故…

作者头像 李华
网站建设 2026/3/27 11:15:47

26、系统监控:日志文件处理与入侵检测

系统监控:日志文件处理与入侵检测 1. 日志文件搜索与分析 在系统管理中,日志文件是发现问题和监控系统状态的重要资源。如果你想确保搜索日志时有结果,可以使用 logger 程序手动生成日志条目,例如: logger "Authentication failure"也可以通过登录用户账户…

作者头像 李华
网站建设 2026/3/24 13:35:14

OpenWrt界面美化终极方案:从技术管理到视觉享受的完美升级

OpenWrt界面美化终极方案:从技术管理到视觉享受的完美升级 【免费下载链接】luci-theme-argon Argon is a clean and tidy OpenWrt LuCI theme that allows users to customize their login interface with images or videos. It also supports automatic and manua…

作者头像 李华
网站建设 2026/3/27 1:16:00

5 分钟搞懂 Kafka 核心概念:Topic、Partition、Broker 到底是什么?

提到 Kafka,很多人第一反应是“消息队列”“高吞吐”,但上手时总会被 Topic、Partition、Broker 这三个核心概念绕晕——它们到底是做什么的?相互之间是什么关系?今天咱们用 5 分钟,结合生活场景把这些概念彻底讲透。 …

作者头像 李华
网站建设 2026/3/23 18:06:06

Ultimate Vocal Remover GUI完整部署指南:三分钟快速上手音频分离神器

Ultimate Vocal Remover GUI完整部署指南:三分钟快速上手音频分离神器 【免费下载链接】ultimatevocalremovergui 使用深度神经网络的声音消除器的图形用户界面。 项目地址: https://gitcode.com/GitHub_Trending/ul/ultimatevocalremovergui 还在为无法提取…

作者头像 李华