图解机器学习算法(4) | 逻辑回归算法详解(机器学习通关指南·完结)_机器学习逻辑回归算法-程序员宅基地

技术标签: 算法  机器学习  人工智能  逻辑回归  # 图解机器学习算法 ◉ 从入门到精通  回归  

ShowMeAI研究中心


引言

本篇内容我们给大家介绍机器学习领域最常见的模型之一:逻辑回归。它也是目前工业界解决问题最广泛作为baseline的解决方案。逻辑回归之所以被广泛应用,因为其简单有效且可解释性强。

本文的结构如下:

  • 第1部分:回顾机器学习与分类问题。回顾机器学习中最重要的问题之一分类问题,不同的分类问题及数学抽象。

  • 第2部分:逻辑回归核心思想。介绍线性回归问题及逻辑回归解决方式,讲解逻辑回归核心思想。

  • 第3部分:Sigmoid函数与分类器决策边界。介绍逻辑回归模型中最重要的Sigmoid变换函数,以及不同分类器得到的决策边界。

  • 第4部分:模型优化使用的梯度下降算法。介绍模型参数学习过程中最常使用到的优化算法:梯度下降。

  • 第5部分:模型过拟合问题与正则化。介绍模型状态分析及过拟合问题,以及缓解过拟合问题可以使用的正则化手段。

  • 第6部分:特征变换与非线性切分。介绍由线性分类器到非线性分类场景,对特征可以进行的变换如构建多项式特征,使得分类器得到分线性切分能力。

(本篇逻辑回归算法的部分内容涉及到机器学习基础知识,没有先序知识储备的宝宝可以查看ShowMeAI的文章 图解机器学习 | 机器学习基础知识)。

1.机器学习与分类问题

1)分类问题

分类问题是机器学习非常重要的一个组成部分,它的目标是根据已知样本的某些特征,判断一个样本属于哪个类别。分类问题可以细分如下:

  • 二分类问题:表示分类任务中有两个类别新的样本属于哪种已知的样本类。

  • 多类分类(Multiclass Classification)问题:表示分类任务中有多类别。

  • 多标签分类(Multilabel Classification)问题:给每个样本一系列的目标标签。

2)分类问题的数学抽象

从算法的角度解决一个分类问题,我们的训练数据会被映射成n维空间的样本点(这里的n就是特征维度),我们需要做的事情是对n维样本空间的点进行类别区分,某些点会归属到某个类别。

下图所示的是二维平面中的两类样本点,我们的模型(分类器)在学习一种区分不同类别的方法,比如这里是使用一条直线去对2类不同的样本点进行切分。

常见的分类问题应用场景很多,我们选择几个进行举例说明:

  • 垃圾邮件识别:可以作为二分类问题,将邮件分为你「垃圾邮件」或者「正常邮件」。

  • 图像内容识别:因为图像的内容种类不止一个,图像内容可能是猫、狗、人等等,因此是多类分类问题。

  • 文本情感分析:既可以作为二分类问题,将情感分为褒贬两种,还可以作为多类分类问题,将情感种类扩展,比如分为:十分消极、消极、积极、十分积极等。

2.逻辑回归算法核心思想

下面介绍本次要讲解的算法——逻辑回归(Logistic Regression)。逻辑回归是线性回归的一种扩展,用来处理分类问题。

1)线性回归与分类

分类问题和回归问题有一定的相似性,都是通过对数据集的学习来对未知结果进行预测,区别在于输出值不同

  • 分类问题的输出值是离散值(如垃圾邮件和正常邮件)。

  • 回归问题的输出值是连续值(例如房子的价格)。

既然分类问题和回归问题有一定的相似性,那么我们能不能在回归的基础上进行分类呢

可以想到的一种尝试思路是,先用线性拟合,然后对线性拟合的预测结果值进行量化,即将连续值量化为离散值——即使用『线性回归+阈值』解决分类问题

我们来看一个例子。假如现在有一个关于肿瘤大小的数据集,需要根据肿瘤的大小来判定是良性(用数字0表示)还是恶性(用数字1表示),这是一个很典型的二分类问题。

如上图,目前这个简单的场景我们得到1个直观的判定:肿瘤的大小大于5,即为恶性肿瘤(输出为1);肿瘤的大小等于5,即为良性肿瘤(输出为0)。
下面我们尝试之前提到的思路,使用一元线性函数 h ( x ) = θ 0 + θ 1 x h(x) = \theta_0+\theta_1x h(x)=θ0+θ1x去进行拟合数据,函数体现在图片中就是这条黑色直线。

这样分类问题就可以转化为:对于这个线性拟合的假设函数,给定一个肿瘤的大小,只要将其带入假设函数,并将其输出值和0.5进行比较:

  • 如果线性回归值大于0.5,就输出1(恶性肿瘤)。

  • 如果线性回归值小于0.5,就输出0(良性肿瘤)。

上图的数据集中的分类问题被完美解决。但如果将数据集更改一下,如图所示,如果我们还是以0.5为判定阈值,那么就会把肿瘤大小为6的情况进行误判为良好。

所以,单纯地通过将线性拟合的输出值与某一个阈值进行比较,这种方法用于分类非常不稳定。

2)逻辑回归核心思想

因为「线性回归+阈值」的方式很难得到鲁棒性好的分类器,我们对其进行拓展得到鲁棒性更好的逻辑回归(Logistic Regression,有些地方也叫做「对数几率回归」)。逻辑回归将数据拟合到一个logit函数中,从而完成对事件发生概率的预测。

如果线性回归的结果输出是一个连续值,而值的范围是无法限定的,这种情况下我们无法得到稳定的判定阈值。那是否可以把这个结果映射到一个固定大小的区间内(比如0到1),进而判断呢。

当然可以,这就是逻辑回归做的事情,而其中用于对连续值压缩变换的函数叫做Sigmoid函数(也称Logistic函数,S函数)。

Sigmoid数学表达式为

S ( x ) = 1 1 + e − x S(x) = \dfrac{1}{1+e^{-x}} S(x)=1+ex1

可以看到S函数的输出值在0到1之间。

3.Sigmoid函数与决策边界

刚才大家见到了Sigmoid函数,下面我们来讲讲它和线性拟合的结合,如何能够完成分类问题,并且得到清晰可解释的分类器判定「决策边界」。

1)分类与决策边界

决策边界就是分类器对于样本进行区分的边界,主要有线性决策边界(linear decision boundaries)和非线性决策边界(non-linear decision boundaries),如下图所示。

2)线性决策边界生成

那么,逻辑回归是怎么得到决策边界的呢,它与Sigmoid函数又有什么关系呢?

如下图中的例子:

如果我们用函数g表示Sigmoid函数,逻辑回归的输出结果由假设函数 h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 ) h_{\theta}(x)=g\left(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}\right) hθ(x)=g(θ0+θ1x1+θ2x2)得到。

对于图中的例子,我们暂时取参数 θ 0 、 θ 1 、 θ 2 \theta_{0}、\theta_{1} 、\theta_{2} θ0θ1θ2分别为-3、1和1,那么对于图上的两类样本点,我们代入一些坐标到 h θ ( x ) h_{\theta}(x) hθ(x),会得到什么结果值呢。

  • 对于直线上方的点 ( x 1 , x 2 ) \left ( x_{1}, x_{2} \right ) (x1,x2)(例如 ( 100 , 100 ) \left ( 100, 100 \right ) (100,100)),代入 − 3 + x 1 + x 2 -3+ x_{1}+ x_{2} 3+x1+x2,得到大于0的取值,经过Sigmoid映射后得到的是大于0.5的取值。

  • 对于直线下方的点 ( x 1 , x 2 ) \left ( x_{1}, x_{2} \right ) (x1,x2)(例如 ( 0 , 0 ) \left ( 0, 0 \right ) (0,0)),代入 − 3 + x 1 + x 2 -3+ x_{1}+ x_{2} 3+x1+x2,得到小于0的取值,经过Sigmoid映射后得到的是小于0.5的取值。

如果我们以0.5为判定边界,则线性拟合的直线 − 3 + x 1 + x 2 = 0 -3+ x_{1}+ x_{2} = 0 3+x1+x2=0变换成了一条决策边界(这里是线性决策边界)。

3)非线性决策边界生成

其实,我们不仅仅可以得到线性决策边界,当 h θ ( x ) h_{\theta}(x) hθ(x)更复杂的时候,我们甚至可以得到对样本非线性切分的非线性决策边界(这里的非线性指的是无法通过直线或者超平面把不同类别的样本很好地切分开)。

如下图中另外一个例子:如果我们用函数g表示Sigmoid函数,逻辑回归的输出结果由假设函数 h θ ( x ) = g ( θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 ) h_{\theta}(x)=g\left(\theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2}\right) hθ(x)=g(θ0+θ1x1+θ2x2+θ3x12+θ4x22)得到。

对于图中的例子,我们暂时取参数 θ 0 、 θ 1 、 θ 2 、 θ 3 、 θ 4 \theta_{0} 、\theta_{1} 、\theta_{2} 、\theta_{3} 、\theta_{4} θ0θ1θ2θ3θ4分别为-1、0、0、1和1,那么对于图上的两类样本点,我们代入一些坐标到
h θ ( x ) h_{\theta}(x) hθ(x),会得到什么结果值呢。

  • 对于圆外部的点 ( x 1 , x 2 ) \left ( x_{1}, x_{2} \right ) (x1,x2)(例如 ( 100 , 100 ) \left ( 100, 100 \right ) (100,100)),代入 θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 \theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2} θ0+θ1x1+θ2x2+θ3x12+θ4x22,得到大于0的取值,经过Sigmoid映射后得到的是大于0.5的取值。

  • 对于圆内部的点 ( x 1 , x 2 ) \left ( x_{1}, x_{2} \right ) (x1,x2)(例如 ( 0 , 0 ) \left ( 0, 0 \right ) (0,0)),代入 θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 2 + θ 4 x 2 2 \theta_{0}+\theta_{1} x_{1}+\theta_{2} x_{2}+\theta_{3} x_{1}^{2}+\theta_{4} x_{2}^{2} θ0+θ1x1+θ2x2+θ3x12+θ4x22,得到小于0的取值,经过Sigmoid映射后得到的是小于0.5的取值。

如果我们以0.5为判定边界,则线性拟合的圆曲线 − 1 + x 1 2 + x 2 2 = 0 -1+x_{1}^2+x_{2}^2=0 1+x12+x22=0变换成了一条决策边界(这里是非线性决策边界)。

4.梯度下降与优化

1)损失函数

前一部分的例子中,我们手动取了一些参数θ的取值,最后得到了决策边界。但大家显然可以看到,取不同的参数时,可以得到不同的决策边界。

哪一条决策边界是最好的呢?我们需要定义一个能量化衡量模型好坏的函数——损失函数(有时候也叫做「目标函数」或者「代价函数」)。我们的目标是使得损失函数最小化。

我们如何衡量预测值和标准答案之间的差异呢,最简单直接的方式是数学中的均方误差。它的计算方式很简单,对于所有的样本点 x i x_{i} xi,预测值 h θ ( x i ) h_{\theta}(x_{i}) hθ(xi)与标准答案 y i y_{i} yi作差后平方,求均值即可,这个取值越小代表差异度越小。

M S E = 1 m ∑ i = 1 m ( f ( x i ) − y i ) 2 MSE=\frac{1}{m} \sum_{i=1}^{m}\left(f\left(x_{i}\right)-y_{i}\right)^{2} MSE=m1i=1m(f(xi)yi)2

均方误差对应的损失函数:均方误差损失(MSE)在回归问题损失定义与优化中广泛应用,但是在逻辑回归问题中不太适用。sigmoid函数的变换使得我们最终得到损失函数曲线如下图所示,是非常不光滑凹凸不平的,这种数学上叫做非凸的损失函数(关于损失函数与凸优化更多知识可以参考ShowMeAI的文章 图解AI数学基础 | 微积分与最优化),我们要找到最优参数(使得函数取值最小的参数)是很困难的。

解释:在逻辑回归模型场景下,使用MSE得到的损失函数是非凸的,数学特性不太好,我们希望损失函数如下的凸函数。凸优化问题中,局部最优解同时也是全局最优解,这一特性使得凸优化问题在一定意义上更易于解决,而一般的非凸最优化问题相比之下更难解决。

我们更希望我们的损失函数如下图所示,是凸函数,我们在数学上有很好优化方法可以对其进行优化。

在逻辑回归模型场景下,我们会改用对数损失函数(二元交叉熵损失),这个损失函数同样能很好地衡量参数好坏,又能保证凸函数的特性。对数损失函数的公式如下:

J ( θ ) = − 1 m [ ∑ i = 1 m y ( i ) log ⁡ h θ ( x ( i ) ) + ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] J(\theta)=-\frac{1}{m}\left[\sum_{i=1}^{m} y^{(i)} \log h_{\theta}\left(x^{(i)}\right)+\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right] J(θ)=m1[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

其中 y ( i ) y^{(i)} y(i)表示样本取值,在其为正样本时取值为1,负样本时取值为0,我们分这两种情况来看看:

Cost ⁡ ( h θ ( x ) , y ) = { − log ⁡ ( 1 − h θ ( x ) )  if  y = 0 − log ⁡ ( h θ ( x ) )  if  y = 1 \operatorname{Cost}\left(h_{\theta}(x), y\right)=\left\{\begin{array}{ll} -\log \left(1-h_{\theta}(x)\right) & \text { if } y=0\\ -\log \left(h_{\theta}(x)\right) & \text { if } y=1 \end{array}\right. Cost(hθ(x),y)={ log(1hθ(x))log(hθ(x)) if y=0 if y=1

  • y ( i ) = 0 y^{(i)}=0 y(i)=0:当一个样本为负样本时,若 h θ ( x ) h_{\theta}(x) hθ(x)的结果接近1(即预测为正样本),那么 − log ⁡ ( 1 − h θ ( x ) ) - \log \left(1-h_{\theta}\left(x\right)\right) log(1hθ(x))的值很大,那么得到的惩罚就大。

  • y ( i ) = 1 y^{(i)}=1 y(i)=1:当一个样本为正样本时,若 h θ ( x ) h_{\theta}(x) hθ(x)的结果接近0(即预测为负样本),那么 − log ⁡ ( h θ ( x ) ) - \log \left(h_{\theta}\left(x\right)\right) log(hθ(x))的值很大,那么得到的惩罚就大。

2)梯度下降

损失函数可以用于衡量模型参数好坏,但我们还需要一些优化方法找到最佳的参数(使得当前的损失函数值最小)。最常见的算法之一是「梯度下降法」,逐步迭代减小损失函数(在凸函数场景下非常容易使用)。如同下山,找准方向(斜率),每次迈进一小步,直至山底。

梯度下降(Gradient Descent)法,是一个一阶最优化算法,通常也称为最速下降法。要使用梯度下降法找到一个函数的局部极小值,必须向函数上当前点对应梯度(或者是近似梯度)的反方向的规定步长距离点进行迭代搜索。

上图中,α称为学习率(learning rate),直观的意义是,在函数向极小值方向前进时每步所走的步长。太大一般会错过极小值,太小会导致迭代次数过多。

(关于损失函数与凸优化更多知识可以参考ShowMeAI的文章 图解AI数学基础 | 微积分与最优化https://www.showmeai.tech/article-detail/165,关于监督学习的更多总结可以查看ShowMeAI总结的速查表手册 AI知识技能速查 | 机器学习-监督学习

5.正则化与缓解过拟合

1)过拟合现象

在训练数据不够多,或者模型复杂又过度训练时,模型会陷入过拟合(Overfitting)状态。如下图所示,得到的不同拟合曲线(决策边界)代表不同的模型状态:

  • 拟合曲线1能够将部分样本正确分类,但是仍有较大量的样本未能正确分类,分类精度低,是「欠拟合」状态。

  • 拟合曲线2能够将大部分样本正确分类,并且有足够的泛化能力,是较优的拟合曲线。

  • 拟合曲线3能够很好的将当前样本区分开来,但是当新来一个样本时,有很大的可能不能将其正确区分,原因是该决策边界太努力地学习当前的样本点,甚至把它们直接「记」下来了。

拟合曲线中的「抖动」,表示拟合曲线不规则、不光滑(上图中的拟合曲线3),对数据的学习程度深,过拟合了。

2)正则化处理

过拟合的一种处理方式是正则化,我们通过对损失函数添加正则化项,可以约束参数的搜索空间,从而保证拟合的决策边界并不会抖动非常厉害。如下图为对数损失函数中加入正则化项(这里是一个L2正则化项)

J ( θ ) = 1 m ∑ i = 1 m [ − y ( i ) log ⁡ ( h θ ( x ( i ) ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\left[-y^{(i)} \log \left(h_{\theta}\left(x^{(i)}\right)\right)-\left(1-y^{(i)}\right) \log \left(1-h_{\theta}\left(x^{(i)}\right)\right)\right]+\frac{\lambda}{2 m} \sum_{j=1}^{n} \theta_{j}^{2} J(θ)=m1i=1m[y(i)log(hθ(x(i)))(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2

其中 λ \lambda λ表示正则化系数,表示惩罚程度, λ \lambda λ的值越大,为使 J ( θ ) J(\theta) J(θ)的值小,则参数 θ \theta θ的绝对值就得越小,通常对应于越光滑的函数,也就是更加简单的函数,因此不易发生过拟合的问题。我们依然可以采用梯度下降对加正则化项的损失函数进行优化。

6.特征变换与非线性表达

1)多项式特征

对于输入的特征,如果我们直接进行线性拟合再给到Sigmoid函数,得到的是线性决策边界。但添加多项式特征,可以对样本点进行多项式回归拟合,也能在后续得到更好的非线性决策边界。

多项式回归,回归函数是回归变量多项式。多项式回归模型是线性回归模型的一种,此时回归函数关于回归系数是线性的。

在实际应用中,通过增加一些输入数据的非线性特征来增加模型的复杂度通常是有效的。一个简单通用的办法是使用多项式特征,这可以获得特征的更高维度和互相间关系的项,进而获得更好的实验结果。

2)非线性切分

如下图所示,在逻辑回归中,拟合得到的决策边界,可以通过添加多项式特征,调整为非线性决策边界,具备非线性切分能力。

  • Z θ ( x ) Z_{\theta}(x) Zθ(x) θ \theta θ是参数,当 Z θ ( x ) = θ 0 + θ 1 x Z_{\theta}(x) = \theta_{0} + \theta_{1}x Zθ(x)=θ0+θ1x时,此时得到的是线性决策边界;

  • Z θ ( x ) = θ 0 + θ 1 x + θ 2 x 2 Z_{\theta}(x) = \theta_{0} + \theta_{1}x + \theta_{2}x^2 Zθ(x)=θ0+θ1x+θ2x2时,使用了多项式特征,得到的是非线性决策边界。

目的是低维线性不可分的数据转化到高维时,会变成线性可分。得到在高维空间下的线性分割参数映射回低维空间,形式上表现为低维的非线性切分。

更多监督学习的算法模型总结可以查看ShowMeAI的文章 AI知识技能速查 | 机器学习-监督学习

视频教程

可以点击 B站 查看视频的【双语字幕】版本

【双语字幕+资料下载】MIT 6.036 | 机器学习导论(2020·完整版)

【双语字幕+资料下载】MIT 6.036 | 机器学习导论(2020·完整版)

https://www.bilibili.com/video/BV1y44y187wN?p=4

ShowMeAI图解机器学习算法系列(完整版)

ShowMeAI系列教程精选推荐

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ShowMeAI/article/details/123398306

智能推荐

攻防世界_难度8_happy_puzzle_攻防世界困难模式攻略图文-程序员宅基地

文章浏览阅读645次。这个肯定是末尾的IDAT了,因为IDAT必须要满了才会开始一下个IDAT,这个明显就是末尾的IDAT了。,对应下面的create_head()代码。,对应下面的create_tail()代码。不要考虑爆破,我已经试了一下,太多情况了。题目来源:UNCTF。_攻防世界困难模式攻略图文

达梦数据库的导出(备份)、导入_达梦数据库导入导出-程序员宅基地

文章浏览阅读2.9k次,点赞3次,收藏10次。偶尔会用到,记录、分享。1. 数据库导出1.1 切换到dmdba用户su - dmdba1.2 进入达梦数据库安装路径的bin目录,执行导库操作  导出语句:./dexp cwy_init/[email protected]:5236 file=cwy_init.dmp log=cwy_init_exp.log 注释:   cwy_init/init_123..._达梦数据库导入导出

js引入kindeditor富文本编辑器的使用_kindeditor.js-程序员宅基地

文章浏览阅读1.9k次。1. 在官网上下载KindEditor文件,可以删掉不需要要到的jsp,asp,asp.net和php文件夹。接着把文件夹放到项目文件目录下。2. 修改html文件,在页面引入js文件:<script type="text/javascript" src="./kindeditor/kindeditor-all.js"></script><script type="text/javascript" src="./kindeditor/lang/zh-CN.js"_kindeditor.js

STM32学习过程记录11——基于STM32G431CBU6硬件SPI+DMA的高效WS2812B控制方法-程序员宅基地

文章浏览阅读2.3k次,点赞6次,收藏14次。SPI的详情简介不必赘述。假设我们通过SPI发送0xAA,我们的数据线就会变为10101010,通过修改不同的内容,即可修改SPI中0和1的持续时间。比如0xF0即为前半周期为高电平,后半周期为低电平的状态。在SPI的通信模式中,CPHA配置会影响该实验,下图展示了不同采样位置的SPI时序图[1]。CPOL = 0,CPHA = 1:CLK空闲状态 = 低电平,数据在下降沿采样,并在上升沿移出CPOL = 0,CPHA = 0:CLK空闲状态 = 低电平,数据在上升沿采样,并在下降沿移出。_stm32g431cbu6

计算机网络-数据链路层_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输-程序员宅基地

文章浏览阅读1.2k次,点赞2次,收藏8次。数据链路层习题自测问题1.数据链路(即逻辑链路)与链路(即物理链路)有何区别?“电路接通了”与”数据链路接通了”的区别何在?2.数据链路层中的链路控制包括哪些功能?试讨论数据链路层做成可靠的链路层有哪些优点和缺点。3.网络适配器的作用是什么?网络适配器工作在哪一层?4.数据链路层的三个基本问题(帧定界、透明传输和差错检测)为什么都必须加以解决?5.如果在数据链路层不进行帧定界,会发生什么问题?6.PPP协议的主要特点是什么?为什么PPP不使用帧的编号?PPP适用于什么情况?为什么PPP协议不_接收方收到链路层数据后,使用crc检验后,余数为0,说明链路层的传输时可靠传输

软件测试工程师移民加拿大_无证移民,未受过软件工程师的教育(第1部分)-程序员宅基地

文章浏览阅读587次。软件测试工程师移民加拿大 无证移民,未受过软件工程师的教育(第1部分) (Undocumented Immigrant With No Education to Software Engineer(Part 1))Before I start, I want you to please bear with me on the way I write, I have very little gen...

随便推点

Thinkpad X250 secure boot failed 启动失败问题解决_安装完系统提示secureboot failure-程序员宅基地

文章浏览阅读304次。Thinkpad X250笔记本电脑,装的是FreeBSD,进入BIOS修改虚拟化配置(其后可能是误设置了安全开机),保存退出后系统无法启动,显示:secure boot failed ,把自己惊出一身冷汗,因为这台笔记本刚好还没开始做备份.....根据错误提示,到bios里面去找相关配置,在Security里面找到了Secure Boot选项,发现果然被设置为Enabled,将其修改为Disabled ,再开机,终于正常启动了。_安装完系统提示secureboot failure

C++如何做字符串分割(5种方法)_c++ 字符串分割-程序员宅基地

文章浏览阅读10w+次,点赞93次,收藏352次。1、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。其它:strtok函数线程不安全,可以使用strtok_r替代。示例://借助strtok实现split#include <string.h>#include <stdio.h&_c++ 字符串分割

2013第四届蓝桥杯 C/C++本科A组 真题答案解析_2013年第四届c a组蓝桥杯省赛真题解答-程序员宅基地

文章浏览阅读2.3k次。1 .高斯日记 大数学家高斯有个好习惯:无论如何都要记日记。他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210后来人们知道,那个整数就是日期,它表示那一天是高斯出生后的第几天。这或许也是个好习惯,它时时刻刻提醒着主人:日子又过去一天,还有多少时光可以用于浪费呢?高斯出生于:1777年4月30日。在高斯发现的一个重要定理的日记_2013年第四届c a组蓝桥杯省赛真题解答

基于供需算法优化的核极限学习机(KELM)分类算法-程序员宅基地

文章浏览阅读851次,点赞17次,收藏22次。摘要:本文利用供需算法对核极限学习机(KELM)进行优化,并用于分类。

metasploitable2渗透测试_metasploitable2怎么进入-程序员宅基地

文章浏览阅读1.1k次。一、系统弱密码登录1、在kali上执行命令行telnet 192.168.26.1292、Login和password都输入msfadmin3、登录成功,进入系统4、测试如下:二、MySQL弱密码登录:1、在kali上执行mysql –h 192.168.26.129 –u root2、登录成功,进入MySQL系统3、测试效果:三、PostgreSQL弱密码登录1、在Kali上执行psql -h 192.168.26.129 –U post..._metasploitable2怎么进入

Python学习之路:从入门到精通的指南_python人工智能开发从入门到精通pdf-程序员宅基地

文章浏览阅读257次。本文将为初学者提供Python学习的详细指南,从Python的历史、基础语法和数据类型到面向对象编程、模块和库的使用。通过本文,您将能够掌握Python编程的核心概念,为今后的编程学习和实践打下坚实基础。_python人工智能开发从入门到精通pdf

推荐文章

热门文章

相关标签