机器学习算法系列(九)-多分类对数几率回归算法(Multinomial Logistic Regression)

本文主要是介绍机器学习算法系列(九)-多分类对数几率回归算法(Multinomial Logistic Regression),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

阅读本文需要的背景知识点:对数几率回归算法、一丢丢编程知识

一、引言

  前面介绍了对数几率回归算法,该算法叫做回归算法,但其实是用来处理分类问题,将数据集分为了两类,用 0、1 或者是 -1、1 来表示。现实中不仅仅有二分类问题,同时也有很多是例如识别手写数字 0~9 等这种多分类的问题,下面我们就来介绍下多分类的对数几率回归算法1(Multinomial Logistic Regression Algorithm)

二、模型介绍

  多分类可以通过对二分类进行推广来得到,通过一些策略,可以用二分类器来解决多分类的问题。常用的策略有:一对一(One vs. One / OvO)、一对其他(One vs. Rest / OvR)、多对多(Many vs. Many / MvM)
  例如有如下数据集分类:
0.png

一对一(One vs. One/OvO)
  一对一的策略是每次只处理两个类别,将全部 N 个类别两两配对,会产生 N ( N − 1 ) 2 \frac{N(N-1)}{2} 2N(N1) 个二分类的任务。
  如下面的表格所示,一共有苹果、梨子、香蕉、桃子这四种分类,会产生六种不同的结果,所以需要六个不同的分类器。需要预测新的是哪一类时,只需通过这些分类器的结果,其中预测最多的分类就是最终的分类结果。
1.png

一对其他(One vs. Rest/OvR)
  一对其他的策略是将一个类别作为正例,其余所有的类别当成反例,全部 N 个类别会产生 N 个二分类的任务。
  如下面的表格所示,一共有苹果、梨子、香蕉、桃子这四种分类,会产生四种不同的结果,所以需要四个不同的分类器。需要预测新的是哪一类时,只需选择分类器预测结果为正的结果作为最终分类结果,若有多个分类器都预测为正,则选择权重最大的分类器的分类结果。
2.png

多对多(Many vs. Many/MvM)
  多对多的策略是将若干类别作为正例、若干类别作为反例,通过一定的编码,实现多分类的问题。常见的主要有二元码与三元码。二元码将每种类型看成正例或者反例,三元码除了正反例以外有一个停用类,即分类时不使用。
  二元码:如下面的表格所示,一共有苹果、梨子、香蕉、桃子这四种分类,这里用了五个分类器来编码结果,如 h1 将苹果、香蕉、桃子作为反例,将梨子作为正例。需要预测新的是哪一类时,通过五个分类器的结果与原始结果比较,这里使用海明距离,即结果有多少不一致的数量,距离最小的分类就是最终分类结果。
3.png

  三元码:如下面的表格所示,一共有苹果、梨子、香蕉、桃子这四种分类,这里用了七个分类器来编码结果,如 h2 将苹果作为反例,将香蕉、桃子作为正例,不使用梨子的分类。需要预测新的是哪一类时,通过这七个分类器的结果与原始结果比较,一样使用海明距离,距离最小的分类就是最终分类结果。
4.png

  可以看到 OvO、OvR 是 MvM 的特殊情况。OvO 相对 OvR 来说,需要更多的分类器模型,所以其存储与预测阶段的开销会更大,但在训练阶段使用的数据量更小,相对来说这部分开销会小一些。MvM 这种编码的方式具备一定的纠错能力,某个分类器的结果错误,可能对最后的分类结果不会有影响,所以这种方式叫做纠错输出码(Error Correcting Output Codes / ECOC)

多分类对数几率回归
  多分类对数几率回归与二分类的对数几率回归不同的是,不再使用逻辑函数(Logistic Function),而是使用Softmax函数2(Softmax Function),该函数可以看作是对逻辑函数的一种推广。
  Softmax 函数能将一个含任意实数的 K 维向量 z “压缩”到另一个 K 维实向量 σ(z) 中,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。
σ ( z ) j = e z j ∑ i = 1 K e z i ( j = 1 , ⋯ , K ) \sigma(z)_{j}=\frac{e^{z_{j}}}{\sum_{i=1}^{K} e^{z_{i}}} \quad(j=1, \cdots, K) σ(z)j=i=1Keziezj(j=1,,K)

  假设有 K 种分类,可以将每种分类的条件概率写成 Softmax 函数的形式,即将每个分类的线性组合结果带入到 Softmax 函数中:
P ( y = j ∣ x , W ) = e W j T x ∑ i = 1 K e W i T x ( j = 1 , ⋯ , K ) P(y=j \mid x, W)=\frac{e^{W_{j}^{T} x}}{\sum_{i=1}^{K} e^{W_{i}^{T} x}} \quad(j=1, \cdots, K) P(y=jx,W)=i=1KeWiTxeWjTx(j=1,,K)

  其假设函数为:
h ( x ) = [ P ( y = 1 ∣ x , W ) P ( y = 2 ∣ x , W ) ⋯ P ( y = K ∣ x , W ) ] = 1 ∑ i = 1 K e W i T x [ e W 1 T x e W 2 T x ⋯ e W K T x ] h(x)=\left[\begin{array}{c} P(y=1 \mid x, W) \\ P(y=2 \mid x, W) \\ \cdots \\ P(y=K \mid x, W) \end{array}\right]=\frac{1}{\sum_{i=1}^{K} e^{W_{i}^{T} x}}\left[\begin{array}{c} e^{W_{1}^{T} x} \\ e^{W_{2}^{T} x} \\ \cdots \\ e^{W_{K}^{T} x} \end{array}\right] h(x)=P(y=1x,W)P(y=2x,W)P(y=Kx,W)=i=1KeWiTx1eW1TxeW2TxeWKTx

  由于多分类对数几率回归使用了 Softmax 函数,所以该回归算法有时也被称为 Softmax 回归(Softmax Regression)

多分类对数几率回归的代价函数
  与二分类对数几率回归的代价函数一样,也是使用最大似然函数的对数形式,首先写出其似然函数:
L ( W ) = ∏ i = 1 N ∏ j = 1 K ( e W j T X i ∑ k = 1 K e W k T X i ) 1 j ( y i ) L(W)=\prod_{i=1}^{N} \prod_{j=1}^{K}\left(\frac{e^{W j^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right)^{1_{j}\left(y_{i}\right)} L(W)=i=1Nj=1K(k=1KeWkTXieWjTXi)1j(yi)

  其中指数部分为指示函数(indicator function),代表当第 i 个 y 的值等于分类j时函数返回 1,不等于时返回 0,如下所示:
1 A ( x ) = { 1 x ∈ A 0 x ∉ A 1_A(x) = \left\{\begin{matrix} 1 & x \in A\\ 0 & x \notin A \end{matrix}\right. 1A(x)={10xAx/A

  然后对似然函数取对数后加个负号,就是多分类对数几率回归的代价函数了,我们的目标依然是最小化该代价函数:
Cost ⁡ ( W ) = − ∑ i = 1 N ∑ j = 1 K 1 j ( y i ) ln ⁡ ( e W j T X i ∑ k = 1 K e W k T X i ) \operatorname{Cost}(W)=-\sum_{i=1}^{N} \sum_{j=1}^{K} 1_{j}\left(y_{i}\right) \ln \left(\frac{e^{W j^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right) Cost(W)=i=1Nj=1K1j(yi)ln(k=1KeWkTXieWjTXi)

  该代价函数也是凸函数,依然可以使用梯度下降法进行最小化的优化。

三、原理证明

多分类对数几率回归的代价函数为凸函数
  同前面的证明一样,只需证明当函数的黑塞矩阵是半正定的,则该函数就为凸函数。
(1)代价函数对 W 求梯度,推导时需要注意下标
(2)可以将代价函数中的第二个连加操作拆成两个式子,前面一个为连加中的第 j 个式子,后面为连加项但不包括第 j 项,这时的下标用 l 表示
(3)将除法的对数写成对数的减法
(4)第一个连加操作对求梯度不影响,直接写到最外层。指示函数对求梯度也没有影响,利用求导公式分别对后面几项求梯度
(5)整理后可以看到后面两项又可以合成同一个连加
(6)由于 y 的取值必然会在 1 - K 中,指示函数的从 1 - K 连加必然等于 1
∂ Cost ⁡ ( W ) ∂ W j = ∂ ∂ W j ( − ∑ i = 1 N ∑ j = 1 K 1 j ( y i ) ln ⁡ e W j T X i ∑ k = 1 K e W k T X i ) ( 1 ) = ∂ ∂ W j ( − ∑ i = 1 N ( 1 j ( y i ) ln ⁡ e W j T X i ∑ k = 1 K e W k T X i + ∑ l ≠ j K 1 l ( y i ) ln ⁡ e W l T X i ∑ k = 1 K e W k T X i ) ) ( 2 ) = ∂ ∂ W j ( − ∑ i = 1 N ( 1 j ( y i ) ( W j T X i − ln ⁡ ∑ k = 1 K e W k T X i ) + ∑ l ≠ j K 1 l ( y i ) ( W l T X i − ln ⁡ ∑ k = 1 K e W k T X i ) ) ) ( 3 ) = − ∑ i = 1 N ( 1 j ( y j ) ( X i − e W j T X i X i ∑ k = 1 K e W k T X i ) + ∑ l ≠ j K 1 l ( y i ) ( 0 − e W j T X i X i ∑ k = 1 K e W k T X i ) ) ( 4 ) = − ∑ i = 1 N ( X i ( 1 j ( y i ) − ∑ j = 1 K 1 j ( y i ) e W j T X i ∑ k = 1 K e W k T X i ) ) ( 5 ) = − ∑ i = 1 N ( X i ( 1 j ( y i ) − e W j T X i ∑ k = 1 K e W k T X i ) ) ( 6 ) \begin{aligned} \frac{\partial \operatorname{Cost}(W)}{\partial W_{j}} &=\frac{\partial}{\partial W_{j}}\left(-\sum_{i=1}^{N} \sum_{j=1}^{K} 1_{j}\left(y_{i}\right) \ln \frac{e^{W_{j}^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right) & (1) \\ &=\frac{\partial}{\partial W_{j}}\left(-\sum_{i=1}^{N}\left(1_{j}\left(y_{i}\right) \ln \frac{e^{W_{j}^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}+\sum_{l \neq j}^{K} 1_{l}\left(y_{i}\right) \ln \frac{e^{W_{l}^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right)\right) & (2) \\ &=\frac{\partial}{\partial W_{j}}\left(-\sum_{i=1}^{N}\left(1_{j}\left(y_{i}\right)\left(W_{j}^{T} X_{i}-\ln \sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}\right)+\sum_{l \neq j}^{K} 1_{l}\left(y_{i}\right)\left(W_{l}^{T} X_{i}-\ln \sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}\right)\right)\right) & (3) \\ &=-\sum_{i=1}^{N}\left(1_{j}\left(y_{j}\right)\left(X_{i}-\frac{e^{W_{j}^{T} X_{i}} X_{i}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right)+\sum_{l \neq j}^{K} 1_{l}\left(y_{i}\right)\left(0-\frac{e^{W_{j}^{T} X_{i}} X_{i}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right)\right) & (4) \\ &=-\sum_{i=1}^{N}\left(X_{i}\left(1_{j}\left(y_{i}\right)-\sum_{j=1}^{K} 1_{j}\left(y_{i}\right) \frac{e^{W_{j}^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right)\right) & (5) \\ &=-\sum_{i=1}^{N}\left(X_{i}\left(1_{j}\left(y_{i}\right)-\frac{e^{W_{j}^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right)\right) & (6) \end{aligned} WjCost(W)=Wj(i=1Nj=1K1j(yi)lnk=1KeWkTXieWjTXi)=Wji=1N1j(yi)lnk=1KeWkTXieWjTXi+l=jK1l(yi)lnk=1KeWkTXieWlTXi=Wji=1N1j(yi)(WjTXilnk=1KeWkTXi)+l=jK1l(yi)(WlTXilnk=1KeWkTXi)=i=1N1j(yj)(Xik=1KeWkTXieWjTXiXi)+l=jK1l(yi)(0k=1KeWkTXieWjTXiXi)=i=1N(Xi(1j(yi)j=1K1j(yi)k=1KeWkTXieWjTXi))=i=1N(Xi(1j(yi)k=1KeWkTXieWjTXi))(1)(2)(3)(4)(5)(6)

(1)代价函数对 W 求黑塞矩阵
(2)第一项对 W 来说为常数,只需对第二项求导
(3)利用求导公式求出对应的导数
(4)整理结果,分子为连加中去掉第 j 项
∂ 2 Cost ⁡ ( W ) ∂ W j ∂ W j T = ∂ ∂ W j ( − ∑ i = 1 N ( X i ( 1 j ( y i ) − e W j T X i ∑ k = 1 K e W k T X i ) ) ) ( 1 ) = ∑ i = 1 N ∂ ∂ W j ( e W j T X i ∑ k = 1 K e W k T X i X i ) ( 2 ) = ∑ i = 1 N ∑ k = 1 K e W k T X i e W j T X i X i − e W j T X i e W j T X i X i ( ∑ k = 1 K e W k T X i ) 2 X i ( 3 ) = ∑ i = 1 N ∑ k ≠ j K e W k T X i e W j T X i ( ∑ k = 1 K e W k T X i ) 2 X i X i T ( 4 ) \begin{aligned} \frac{\partial^{2} \operatorname{Cost}(W)}{\partial W_{j} \partial W_{j}^{T}} &=\frac{\partial}{\partial W_{j}}\left(-\sum_{i=1}^{N}\left(X_{i}\left(1_{j}\left(y_{i}\right)-\frac{e^{W_{j}^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}}\right)\right)\right) & (1)\\ &=\sum_{i=1}^{N} \frac{\partial}{\partial W_{j}}\left(\frac{e^{W_{j}^{T} X_{i}}}{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}} X_{i}\right) & (2)\\ &=\sum_{i=1}^{N} \frac{\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}} e^{W_{j}^{T} X_{i}} X_{i}-e^{W_{j}^{T} X_{i}} e^{W_{j}^{T} X_{i}} X_{i}}{\left(\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}\right)^{2}} X_{i} & (3)\\ &=\sum_{i=1}^{N} \frac{\sum_{k \neq j}^{K} e^{W_{k}^{T} X_{i}} e^{W_{j}^{T} X_{i}}}{\left(\sum_{k=1}^{K} e^{W_{k}^{T} X_{i}}\right)^{2}} X_{i} X_{i}^{T} & (4) \end{aligned} WjWjT2Cost(W)=Wj(i=1N(Xi(1j(yi)k=1KeWkTXieWjTXi)))=i=1NWj(k=1KeWkTXieWjTXiXi)=i=1N(k=1KeWkTXi)2k=1KeWkTXieWjTXiXieWjTXieWjTXiXiXi=i=1N(k=1KeWkTXi)2k=jKeWkTXieWjTXiXiXiT(1)(2)(3)(4)

  同前面的证明,黑塞矩阵前面的常数必然大于零,则对应的黑塞矩阵矩阵为正定矩阵,说明其代价函数为凸函数,证毕。

对数几率回归是多分类对数几率回归的特例
(1)当 K 的值为 2 时,带入到多分类对数几率回归的假设函数
(2)将分子分母同时乘以 e 的 − W 1 -W_1 W1 次幂
(3)e 的零次幂为 1,化简可得
(4)将 W 2 − W 1 W_2-W_1 W2W1 视为新的 w,这时会发现假设函数就为二分类的对数几率回归的假设函数
h ( x ) = 1 e W 1 T x + e W 2 T x [ e W 1 T x e W 2 T x ] ( 1 ) = 1 e 0 T x + e ( W 2 − W 1 ) T x [ e 0 T x e ( W 2 − W 1 ) T x ] ( 2 ) = 1 1 + e ( W 2 − W 1 ) T x [ 1 e ( W 2 − W 1 ) T x ] ( 3 ) = [ 1 1 + e w ^ T x e w ^ T x 1 + e w ^ T x ] ( 4 ) \begin{aligned} h(x) &=\frac{1}{e^{W_{1}^{T} x}+e^{W_{2}^{T} x}}\left[\begin{array}{c} e^{W_{1}^{T} x} \\ e^{W_{2}^{T} x} \end{array}\right] & (1)\\ &=\frac{1}{e^{0^{T} x}+e^{\left(W_{2}-W_{1}\right)^{T} x}}\left[\begin{array}{c} e^{0^{T} x} \\ e^{\left(W_{2}-W_{1}\right)^{T} x} \end{array}\right] & (2) \\ &=\frac{1}{1+e^{\left(W_{2}-W_{1}\right)^{T} x}}\left[\begin{array}{c} 1 \\ e^{\left(W_{2}-W_{1}\right)^{T} x} \end{array}\right] & (3) \\ &=\left[\begin{array}{c} \frac{1}{1+e^{\hat{w}^{T} x}} \\ \frac{e^{\hat{w}^{T} x}}{1+e^{\hat{w}^{T} x}} \end{array}\right] & (4) \end{aligned} h(x)=eW1Tx+eW2Tx1[eW1TxeW2Tx]=e0Tx+e(W2W1)Tx1[e0Txe(W2W1)Tx]=1+e(W2W1)Tx1[1e(W2W1)Tx]=[1+ew^Tx11+ew^Txew^Tx](1)(2)(3)(4)

  对数几率回归是多分类对数几率回归在 K = 2 时候的特例,也可以看到多分类对数几率回归的权重系数具有冗余的性质,即权重系数同时改变相同的值时,对最后的预测结果不影响。

四、代码实现

使用 Python 实现多分类对数几率回归算法(梯度下降法):

import numpy as npdef dcost(X, y, w):"""多分类对数几率回归的代价函数的梯度args:X - 训练数据集y - 目标标签值w - 权重系数return:代价函数的梯度"""ds = np.zeros(w.shape)for i in range(X.shape[0]):c = np.sum(np.exp(w.dot(X[i])))for j in range(w.shape[1]):a = 0if j == y[i]:a = 1b = np.exp(w[j].dot(X[i]))ds[j] = ds[j] - X[i] * (a - b / c)return dsdef direction(d):"""更新的方向args:d - 梯度return:更新的方向"""return -ddef multinomialLogisticRegressionGd(X, y, max_iter=1000, tol=1e-4, step=1e-3):"""多分类对数几率回归,使用梯度下降法(gradient descent)args:X - 训练数据集y - 目标标签值max_iter - 最大迭代次数tol - 变化量容忍值step - 步长return:W - 权重系数"""y_classes = np.unique(y)# 初始化 W 为零向量W = np.zeros((len(y_classes), X.shape[1]))# 开始迭代for it in range(max_iter):# 计算梯度d = dcost(X, y, W)# 当梯度足够小时,结束迭代if np.linalg.norm(x=d, ord=1) <= tol:breakp = direction(d)# 更新权重系数 WW = W + step * preturn W

五、第三方库实现

scikit-learn3 实现多分类对数几率回归:

from sklearn.linear_model import LogisticRegression# 初始化多分类对数几率回归器,无正则化
reg = LogisticRegression(penalty="none", multi_class="multinomial")
# 拟合线性模型
reg.fit(X, y)
# 权重系数
W = reg.coef_
# 截距
b = reg.intercept_

六、动画演示

  下图展示了存在三种分类时的演示数据,其中红色表示标签值为0的样本、蓝色表示标签值为1的样本、绿色表示标签值为2的样本:

14.png

  下图为使用梯度下降法拟合数据的结果,其中浅红色表示拟合后根据权重系数计算出预测值为0的部分,浅蓝色表示拟合后根据权重系数计算出预测值为1的部分,浅绿色表示拟合后根据权重系数计算出预测值为2的部分:

15.png

七、思维导图

16.png

八、参考文献

  1. https://en.wikipedia.org/wiki/Multinomial_logistic_regression
  2. https://en.wikipedia.org/wiki/Softmax_function
  3. https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html

完整演示请点击这里

注:本文力求准确并通俗易懂,但由于笔者也是初学者,水平有限,如文中存在错误或遗漏之处,恳请读者通过留言的方式批评指正

本文首发于——AI导图,欢迎关注

这篇关于机器学习算法系列(九)-多分类对数几率回归算法(Multinomial Logistic Regression)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/410597

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

代码随想录算法训练营:12/60

非科班学习算法day12 | LeetCode150:逆波兰表达式 ,Leetcode239: 滑动窗口最大值  目录 介绍 一、基础概念补充: 1.c++字符串转为数字 1. std::stoi, std::stol, std::stoll, std::stoul, std::stoull(最常用) 2. std::stringstream 3. std::atoi, std

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在