有一篇博文提到logistic regression的简单理解(Logistic Regression逻辑回归的简单解释)。逻辑回归实际上是odds取对数后的反函数,其函数形式也称为sigmoid function,sigmoid的原义为『像S的形状』。文中最后给出了逻辑回归的表达式:

h(α)=11+e−αh(\alpha) = \frac{1}{1+e^{-\alpha}} h(α)=1+e−α1​

因为h(α)h(\alpha)h(α)的定义域是全体实数R\boldsymbol{R}R,α\alphaα可以用任意函数来代替,一般使用线性函数:α(θ,x)=θ0x0+θ1x1+...+θnxn\alpha(\boldsymbol{\theta}, \boldsymbol{x}) = \theta_0 x_0 + \theta_1 x_1 + ... + \theta_n x_nα(θ,x)=θ0​x0​+θ1​x1​+...+θn​xn​。

为了方便叙述,改写一下符号:

(1)hθ(x)=g(θTx)=11+e−θTxh_{\boldsymbol{\theta}}(\boldsymbol{x}) = g(\boldsymbol{\theta}^T \boldsymbol{x}) = \frac{1}{1+e^{-\boldsymbol{\theta}^T \boldsymbol{x}}} \tag{1} hθ​(x)=g(θTx)=1+e−θTx1​(1)

其中粗体x\boldsymbol{x}x是已知的数据(样本,输入),粗体θT\boldsymbol{\theta}^TθT是参数。机器学习即通过已知样本x\boldsymbol{x}x和对应的label y\boldsymbol{y}y来求解(估计)参数θT\boldsymbol{\theta}^TθT。

损失函数

逻辑回归使用对数损失函数:

L(Y,P(Y∣X))=−log⁡(P(Y∣X))L(Y, P(Y|X)) = -\log(P(Y|X)) L(Y,P(Y∣X))=−log(P(Y∣X))

对数损失函数直接看函数形式不是很直观,毕竟其它损失函数都可以直接从形式上看出『预测时与真实值之间的差异』这样的含义(绝对值损失,平方差损失等),对数损失函数第一眼难以看到这样的含义。

实际上对数损失函数来源于极大似然估计。P(Y∣X)P(Y|X)P(Y∣X)的意思是在样本已知(即XXX)的情况下,分类正确(类别为YYY)的概率。P(Y∣X)P(Y|X)P(Y∣X)越大表示被正确分类的概率越大,取对数再取反那就是最小,符合损失函数的定义。通俗来讲,一堆参数在一堆数据下的似然值,就是每一条数据(每一条样本)在这一组参数下的条件概率之积,取个对数变成条件概率之和,再取个负号求反就得到了对数损失函数。

逻辑回归的损失函数形式也完全可以从极大似然估计的过程中得到,二者是等价的。

逻辑回归本身用于处理二分类问题。对数损失函数中的h(Y∣X)h(Y|X)h(Y∣X)就是sigmoid函数hθ(x)h_\theta(x)hθ​(x)。为了综合Y=1Y=1Y=1和Y=0Y=0Y=0两个类别的损失,基于对数损失函数,逻辑回归的损失函数可以写成如下形式:

L(hθ(x),y)={−log⁡(hθ(x))y=1−log⁡(1−hθ(x))y=0L(h_{\theta}(x), y)= \left\{ \begin{aligned} & -\log(h_\theta(x)) & {y = 1}\\ & -\log(1-h_\theta(x)) & {y = 0}\\ \end{aligned} \right. L(hθ​(x),y)={​−log(hθ​(x))−log(1−hθ​(x))​y=1y=0​

为了方便,上式可以改写成一个式子:

(2)L(hθ(x),y)=−ylog⁡(hθ(x))−(1−y)log⁡(1−hθ(x))L(h_{\theta}(x), y) = -y \log(h_\theta (x)) - (1-y)\log(1-h_\theta (x)) \tag{2} L(hθ​(x),y)=−ylog(hθ​(x))−(1−y)log(1−hθ​(x))(2)

(2)式就是逻辑回归的损失函数的形式。如果y=1y=1y=1,loss会计算上式中的前半部分,如果y=0y = 0y=0,loss计算上式的后半部分。无论0或1,只要分类错误,loss都会变得很大。

下面推导逻辑回归的极大似然估计,最终可以看到,极大似然估计与(2)式是等价的。

前面提到,P(Y∣X)=hθ(x)P(Y|X) = h_\theta (x)P(Y∣X)=hθ​(x)。逻辑回归的假设是伯努利分布,label有y=0y=0y=0和y=1y=1y=1两种情况。伯努利分布的概率密度函数f(x)=px(1−p)(1−x)f(x) = p^x(1-p)^{(1-x)}f(x)=px(1−p)(1−x),套用至逻辑回归,就得到逻辑回归的概率密度函数:

f(x)=P(y=1∣x)y(1−P(y=1∣x))(1−y)f(x) = P(y=1|x)^y \left(1-P(y=1|x)\right)^{(1-y)} f(x)=P(y=1∣x)y(1−P(y=1∣x))(1−y)

其中P(y=1∣x)=hθ(x)P(y=1|x) = h_\theta (x)P(y=1∣x)=hθ​(x)

那么似然函数可以写成连乘的形式:

L(θ)=∏i=1mP(y=1∣xi)yi(1−P(y=1∣xi))(1−yi)L(\boldsymbol\theta) = \prod_{i=1}^m P(y=1|x_i)^{y_i} \left(1-P(y=1|x_i)\right)^{(1-y_i)} L(θ)=i=1∏m​P(y=1∣xi​)yi​(1−P(y=1∣xi​))(1−yi​)

两边取以e为底的对数,得到对数似然函数:

(3)ln⁡L(θ)=∑i=1myiln⁡P(y=1∣xi)+(1−yi)ln⁡(1−P(y=1∣xi))=∑i=1myiln⁡hθ(xi)+(1−yi)ln⁡(1−hθ(xi))\begin{aligned} \ln L(\boldsymbol{\theta}) &= \sum_{i=1}^m y_i \ln P(y=1|x_i) + (1-y_i) \ln \left(1-P(y=1|x_i)\right) \\ &= \sum_{i=1}^m y_i \ln h_{\boldsymbol{\theta}}(x_i) + (1-y_i) \ln \left(1-h_{\boldsymbol{\theta}}(x_i)\right) \end{aligned} \tag{3} lnL(θ)​=i=1∑m​yi​lnP(y=1∣xi​)+(1−yi​)ln(1−P(y=1∣xi​))=i=1∑m​yi​lnhθ​(xi​)+(1−yi​)ln(1−hθ​(xi​))​(3)

(3)式的形式和(2)式是等价的,只不过对数上一个取log一个取ln。因此才会有逻辑回归的损失函数是从极大似然估计推导而来的说法。

梯度下降法训练

梯度下降法训练需要先将损失函数对参数求导,得到参数的迭代公式。

损失函数求导

逻辑回归的sigmoid函数有很多特点,这些特点在数学上给我们处理数据带来许多方便。下面给出sigmoid函数的求导过程,在对损失函数求导时会用到以下结论。

令g(z)=11+e−zg(z) = \frac{1}{1+e^{-z}}g(z)=1+e−z1​,

(4)g′(z)=∂∂z11+e−z=−1(1+e−z)2∂∂ze−z=e−z(1+e−z)2=(1−11+e−z)11+e−z=g(z)(1−g(z))\begin{aligned} g'(z) &= \frac{\partial}{\partial z} \frac{1}{1+e^{-z}} \\ &= -\frac{1}{(1+e^{-z})^2} \frac{\partial} {\partial z} e^{-z} \\ &= \frac{e^{-z}}{(1+e^{-z})^2} \\ &= \left(1-\frac{1}{1+e^{-z}}\right) \frac{1}{1+e^{-z}} \\ & = g(z)(1-g(z)) \end{aligned} \tag{4} g′(z)​=∂z∂​1+e−z1​=−(1+e−z)21​∂z∂​e−z=(1+e−z)2e−z​=(1−1+e−z1​)1+e−z1​=g(z)(1−g(z))​(4)

(2)式的逻辑回归损失函数对参数θ\thetaθ求导。求导时,我们先对单个样本的第jjj个参数θj\theta_jθj​求导(即第j维特征),并且将(2)式中的对数取以e为底的对数。

(5)∂∂θjL(θ)=−y1g(θTx)∂∂θjg(θTx)+(1−y)11−g(θTx)∂∂θjg(θTx)=[(1−y)11−g(θTx)−y1g(θTx)]∂∂θjg(θTx)=[(1−y)11−g(θTx)−y1g(θTx)]g(θTx)(1−g(θTx))∂∂θjθTx=[(1−y)11−g(θTx)−y1g(θTx)]g(θTx)(1−g(θTx))xj=(g(θTx)−y)xj\begin{aligned} \frac{\partial}{\partial \theta_j} L(\boldsymbol{\theta}) &= -y \frac{1}{g(\boldsymbol{\theta^T x})} \frac{\partial}{\partial \theta_j} g(\boldsymbol{\theta^T x}) + (1-y) \frac{1}{1-g(\boldsymbol{\theta^T x})} \frac{\partial} {\partial \theta_j} g(\boldsymbol{\theta^T x}) \\ &= \left[(1-y) \frac{1}{1-g(\boldsymbol{\theta^T x})} - y \frac{1}{g(\boldsymbol{\theta^T x})} \right] \frac{\partial} {\partial \theta_j} g(\boldsymbol{\theta^T x}) \\ &= \left[(1-y) \frac{1}{1-g(\boldsymbol{\theta^T x})} - y \frac{1}{g(\boldsymbol{\theta^T x})} \right] g(\boldsymbol{\theta^T x}) (1-g(\boldsymbol{\theta^T x})) \frac{\partial}{ \partial \theta_j} \boldsymbol{\theta^T x} \\ &= \left[(1-y) \frac{1}{1-g(\boldsymbol{\theta^T x})} - y \frac{1}{g(\boldsymbol{\theta^T x})} \right] g(\boldsymbol{\theta^T x}) (1-g(\boldsymbol{\theta^T x})) x_j \\ &= (g(\boldsymbol{\theta^T x}) - y) x_j \end{aligned} \tag{5} ∂θj​∂​L(θ)​=−yg(θTx)1​∂θj​∂​g(θTx)+(1−y)1−g(θTx)1​∂θj​∂​g(θTx)=[(1−y)1−g(θTx)1​−yg(θTx)1​]∂θj​∂​g(θTx)=[(1−y)1−g(θTx)1​−yg(θTx)1​]g(θTx)(1−g(θTx))∂θj​∂​θTx=[(1−y)1−g(θTx)1​−yg(θTx)1​]g(θTx)(1−g(θTx))xj​=(g(θTx)−y)xj​​(5)

上式即为第j个参数的偏导数。求出所有n个参数的偏导写成向量形式便得到了梯度的表达式。

在更新第j个参数时,我们是沿梯度下降最快的方向,所以(5)式会添加负号,同时为了控制更新的幅度(步长),会在前面乘以一个系数α\alphaα,即学习率,此时得到单个样本的参数θj\theta_jθj​的更新迭代表达式:

(6)θj:=θj−α(g(θTx)−y)xj\theta_j := \theta_j - \alpha (g(\boldsymbol{\theta^T x}) - y) x_j \tag{6} θj​:=θj​−α(g(θTx)−y)xj​(6)

当使用所有样本时,如果样本数量为m,就将所有样本的更新求和,更新迭代表达式如下:

(7)θj:=θj−α∑i=1m(g(θTx(i))−y(i))xj(i)\theta_j := \theta_j - \alpha \sum_{i=1}^m (g(\boldsymbol{\theta^T x}^{(i)}) - y^{(i)}) x_j^{(i)}\tag{7} θj​:=θj​−αi=1∑m​(g(θTx(i))−y(i))xj(i)​(7)

参数迭代表达式的向量化表示

(7)式就是某个参数的迭代表达式,如果完全按照(7)式的形式写程序,更新一个参数需要循环m次,但是如果写成矩阵的形式,写程序时用矩阵的数据结构,计算就会方便很多。

先对样本空间矩阵化,假设有mmm个样本,n+1n+1n+1维特征,用大写的粗体X\boldsymbol{X}X来表示样本。上标表示第几个样本,下标表示第几维特征。

(8)X=[x(1)x(2)⋮x(m)]=[x0(1)x1(1)⋯xn(1)x0(2)x1(2)⋯xn(2)⋮x0(m)x1(m)⋯xn(m)]\boldsymbol{X} = \left[ \begin{matrix} \boldsymbol{x}^{(1)} \\ \boldsymbol{x}^{(2)} \\ \vdots \\ \boldsymbol{x}^{(m)} \end{matrix} \right] = \left[ \begin{matrix} x_0^{(1)} & x_1^{(1)} & \cdots & x_n^{(1)} \\ x_0^{(2)} & x_1^{(2)} & \cdots & x_n^{(2)} \\ \vdots \\ x_0^{(m)} & x_1^{(m)} & \cdots & x_n^{(m)} \end{matrix} \right] \tag{8} X=⎣⎢⎢⎢⎡​x(1)x(2)⋮x(m)​⎦⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​x0(1)​x0(2)​⋮x0(m)​​x1(1)​x1(2)​x1(m)​​⋯⋯⋯​xn(1)​xn(2)​xn(m)​​⎦⎥⎥⎥⎥⎤​(8)

(9)y=[y(1)⋮y(m)]\boldsymbol{y} = \left[ \begin{matrix} y^{(1)} \\ \vdots \\ y^{(m)} \end{matrix} \right] \tag{9} y=⎣⎢⎡​y(1)⋮y(m)​⎦⎥⎤​(9)

参数θ\boldsymbol{\theta}θ的矩阵化表示如下:

(10)θT=[θ0⋮θn]\boldsymbol{\theta}^T = \left[ \begin{matrix} \theta_0 \\ \vdots \\ \theta_n \end{matrix} \right] \tag{10} θT=⎣⎢⎡​θ0​⋮θn​​⎦⎥⎤​(10)

令A=θTX\boldsymbol{A} = \boldsymbol{\theta}^T \boldsymbol{X}A=θTX:

(11)A=θTX=[θ0⋮θn]⋅[x0(1)x1(1)⋯xn(1)x0(2)x1(2)⋯xn(2)⋮x0(m)x1(m)⋯xn(m)]=[θ0x0(1)θ1x1(1)⋯θnxn(1)θ0x0(2)θ1x1(2)⋯θnxn(2)⋮θ0x0(m)θ1x1(m)⋯θnxn(m)]\begin{aligned} \boldsymbol{A} &= \boldsymbol{\theta}^T \boldsymbol{X} \\ &= \left[ \begin{matrix} \theta_0 \\ \vdots \\ \theta_n \end{matrix} \right] \cdot \left[ \begin{matrix} x_0^{(1)} & x_1^{(1)} & \cdots & x_n^{(1)} \\ x_0^{(2)} & x_1^{(2)} & \cdots & x_n^{(2)} \\ \vdots \\ x_0^{(m)} & x_1^{(m)} & \cdots & x_n^{(m)} \end{matrix} \right] \\ &= \left[ \begin{matrix} \theta_0 x_0^{(1)} & \theta_1 x_1^{(1)} & \cdots & \theta_n x_n^{(1)} \\ \theta_0 x_0^{(2)} & \theta_1 x_1^{(2)} & \cdots & \theta_n x_n^{(2)} \\ \vdots \\ \theta_0 x_0^{(m)} & \theta_1 x_1^{(m)} & \cdots & \theta_n x_n^{(m)} \end{matrix} \right] \end{aligned} \tag{11} A​=θTX=⎣⎢⎡​θ0​⋮θn​​⎦⎥⎤​⋅⎣⎢⎢⎢⎢⎡​x0(1)​x0(2)​⋮x0(m)​​x1(1)​x1(2)​x1(m)​​⋯⋯⋯​xn(1)​xn(2)​xn(m)​​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎢⎡​θ0​x0(1)​θ0​x0(2)​⋮θ0​x0(m)​​θ1​x1(1)​θ1​x1(2)​θ1​x1(m)​​⋯⋯⋯​θn​xn(1)​θn​xn(2)​θn​xn(m)​​⎦⎥⎥⎥⎥⎤​​(11)

令E=g(θTX)−y\boldsymbol{E} = g(\boldsymbol{\theta^T \boldsymbol{X}}) - \boldsymbol{y}E=g(θTX)−y:

(12)E=g(θTX)−y=[g(A(1))−y(1)g(A(2))−y(2)⋮g(A(m))−y(m)]=[e(1)e(2)⋮e(m)]\boldsymbol{E} = g(\boldsymbol{\theta^T \boldsymbol{X}}) - \boldsymbol{y} =\left[ \begin{matrix} g(\boldsymbol{A}^{(1)})-y^{(1)} \\ g(\boldsymbol{A}^{(2)})-y^{(2)} \\ \vdots \\ g(\boldsymbol{A}^{(m)})-y^{(m)} \end{matrix} \right] =\left[ \begin{matrix} e^{(1)} \\ e^{(2)} \\ \vdots \\ e^{(m)} \end{matrix} \right] \tag{12} E=g(θTX)−y=⎣⎢⎢⎢⎡​g(A(1))−y(1)g(A(2))−y(2)⋮g(A(m))−y(m)​⎦⎥⎥⎥⎤​=⎣⎢⎢⎢⎡​e(1)e(2)⋮e(m)​⎦⎥⎥⎥⎤​(12)

将(11)~(12)式带入(7)式:

θj:=θj−α∑i=1m(g(θTx(i))−y(i))xj(i):=θj−α∑i=1me(i)xj(i):=θj−α(xj(0),xj(1),⋯ ,xj(m))⋅(e(0),e(1),⋯ ,e(m))T:=θj−α(xj(0),xj(1),⋯ ,xj(m))E\begin{aligned} \theta_j &:= \theta_j - \alpha \sum_{i=1}^m (g(\boldsymbol{\theta^T x}^{(i)}) - y^{(i)}) x_j^{(i)} \\ &:= \theta_j - \alpha \sum_{i=1}^m e^{(i)} x_j^{(i)} \\ &:= \theta_j - \alpha \left(x_j^{(0)}, x_j^{(1)}, \cdots, x_j^{(m)}\right) \cdot \left(e^{(0)}, e^{(1)}, \cdots, e^{(m)}\right)^T \\ &:= \theta_j - \alpha \left(x_j^{(0)}, x_j^{(1)}, \cdots, x_j^{(m)}\right) \boldsymbol{E} \end{aligned} θj​​:=θj​−αi=1∑m​(g(θTx(i))−y(i))xj(i)​:=θj​−αi=1∑m​e(i)xj(i)​:=θj​−α(xj(0)​,xj(1)​,⋯,xj(m)​)⋅(e(0),e(1),⋯,e(m))T:=θj​−α(xj(0)​,xj(1)​,⋯,xj(m)​)E​

对所有参数θ\boldsymbol{\theta}θ,按照上式的形式,结合(8)~(12)式,可以写成矩阵的形式:

(13)θ:=θ−αXTE\boldsymbol{\theta} := \boldsymbol{\theta} - \alpha \boldsymbol{X}^T \boldsymbol{E} \tag{13} θ:=θ−αXTE(13)

(13)式中,XT\boldsymbol{X}^TXT是n+1n+1n+1行mmm列,E\boldsymbol{E}E是mmm行1列,相乘得到的结果是n+1n+1n+1行1列,与θ\boldsymbol{\theta}θ的维度相同,perfect!

批量梯度下降(BGD,Batch Gradient Descent)

批量梯度下降指的是更新参数时,计算所有样本,步骤如下:

  1. 求出当前迭代位置参数的梯度
    (5)式求的是第j个参数的偏导,参数的梯度就是:
    (∂∂θ0J(θ),∂∂θ1J(θ),⋯ ,∂∂θnJ(θ))\left(\frac{\partial}{\partial \theta_0} J(\boldsymbol{\theta}), \frac{\partial}{\partial \theta_1} J(\boldsymbol{\theta}), \cdots, \frac{\partial}{\partial \theta_n} J(\boldsymbol{\theta})\right) (∂θ0​∂​J(θ),∂θ1​∂​J(θ),⋯,∂θn​∂​J(θ))

  2. 确定对所有的θj\theta_jθj​,沿梯度下降的距离是否都小于预先确定的阈值ϵ\epsilonϵ,如果小于ϵ\epsilonϵ,算法停止,否则,进入第3步

  3. 根据(7)式,使用所有样本(mmm个样本),更新所有参数,需循环m次。如果使用(13)式,就不需要循环,效率会高一点。所有参数更新完成后,返回第1步,开始下一轮迭代

伪代码如下:

epsilon = 0.001 // 新旧梯度的距离,迭代停止条件之一
max_iter = 1000 // 最大迭代次数,迭代停止条件之一
distance = 100
iter_idx = 0
alpha = 0.001 // 学习率
theta = zeros() // 初始化参数
theta_old = theta
m, n = init(X_train, y_train, theta_old) // 初始化各参数,并返回样本个数m和参数个数n
while distance > epsilon or iter_idx < max_iter:'''根据(7)式循环所有样本更新参数'''for i in range(m):theta += update(theta_old)distance = g_distance(theta, theta_old)iter_idx += 1theta_old = theta

随机梯度下降(SGD,Stochastic Gradient Descent)

上述BGD中,使用了所有样本计算更新参数。实际应用中,样本数量往往非常大,如点击率预测,样本可以达到千万数量级。这种情况下BGD有个明显问题就是计算速度比较慢。相对于BGD使用所有样本参与计算,SGD每次只用一个样本来计算。每次迭代使用一个样本,可能会出现样本还没有使用完就已经收敛的情况,因此速度会比较快。但因为并没有用到整个样本空间,这时候收敛是不是达到全局最优解了呢?不一定……

小批量梯度下降(MBGD,Mini-Batch Gradient Descent)

BGD存在效率问题,SGD存在全局最优解问题,因此有一个结合两种方法的训练方法MBGD。MBGD的训练步骤如下:

  1. 选择kkk个训练样本(一共有mmm个训练样本)
  2. 在这kkk个样本中进行kkk次迭代,每次迭代只使用一个样本(即SGD)
  3. kkk次迭代得到kkk个梯度,对这kkk个梯度加权求和(比如取平均)的结果来更新参数
  4. 重复以上步骤,直到收敛

通常第1步是随机选取kkk个样本,一般程序中会按顺序从训练数据中取batch,此时随机的过程需要在制作训练数据时保证,只要打乱训练数据的顺序就可以。

Reference

  1. 梯度下降小结
  2. logistic回归详解(三)
  3. Logistic Regression逻辑回归的简单解释
  4. 逻辑回归

Logistic Regression逻辑回归的损失函数与梯度下降训练相关推荐

  1. 逻辑回归:损失函数与梯度下降

    1 sigmoid函数 2 极大似然估计MLE与损失函数 3 梯度下降 4 另一种形式的损失函数及其梯度 1.1 sigmoid函数 由于二分类结果是1或者0,这与数学的阶跃函数很类似,但是阶跃函数在 ...

  2. 【机器学习】Logistic Regression逻辑回归原理与java实现

    [机器学习]Logistic Regression逻辑回归原理与java实现 1.基于概率的机器学习算法 2.逻辑回归算法原理 2.1.分离超平面 2.2.阈值函数 2.3.样本概率 2.4.损失函数 ...

  3. 【李宏毅机器学习】Logistic Regression 逻辑回归(p11) 学习笔记

    李宏毅机器学习学习笔记汇总 课程链接 文章目录 Logistic Regression Step 1: Function Set Step 2: Goodness of a Function Step ...

  4. Tensorflow【实战Google深度学习框架】—Logistic regression逻辑回归模型实例讲解

    文章目录 1.前言 2.程序详细讲解 环境设定 数据读取 准备好placeholder,开好容器来装数据 准备好参数/权重 拿到每个类别的score 计算多分类softmax的loss functio ...

  5. Logistic Regression 逻辑回归数学原理、python代码实现、实际应用

    说在前面 第一次写博客,主要目的是再梳理一下学到东西的逻辑,如果可以帮助到其他在学习的人就更好啦.本篇主要参考的:<机器学习>西瓜书.博主文章:文章链接.以及知乎.百度等大神们的解惑文章 ...

  6. Logistic Regression逻辑回归

    参考自: http://blog.sina.com.cn/s/blog_74cf26810100ypzf.html http://blog.sina.com.cn/s/blog_64ecfc2f010 ...

  7. Logistic Regression逻辑回归的简单解释

    Logistic Regression也叫Logit Regression,在机器学习中属于参数估计的模型.逻辑回归与普通线性回归(Linear Regression)有很大的关系.在应用上,它们有所 ...

  8. 【西瓜书笔记】补充1:logistic回归及其损失函数,梯度下降推导

    Logistic回归理论知识补充 建模流程 假设我们建立一个二分类模型.假设有两个人A.B在争论如何对一个新样本 x x x进行0-1二分类,他们两个分别对新样本进行打分,如果A的分数大于B的分数,则 ...

  9. Logistic Regression(逻辑回归) +python3.6(pycharm)实现

    数学基础知识略过,可自行查询探究. 遇到的bugs: 1.AttributeError: module 'scipy' has no attribute '__version__' 解决办法:inst ...

最新文章

  1. leetcode算法第9题
  2. HALCON查找圆心
  3. Logstash7.6.0同步MySQL到Elasticsearch
  4. 参数化测试 junit_参数化的JUnit测试
  5. sql 链接到oracle数据库,通过MSSQL连接服务器连接至Oracle数据库
  6. 描写火车站场景_关于描写火车站的句子
  7. Kubernetes滚动更新速率控制解读
  8. linux 声音控制 命令,linux 声音大小调整的命令
  9. HDU5695 Gym Class【拓扑排序】
  10. WPS怎么统计相同名称的数据_群发邮件平台的数据统计怎么用
  11. 「备战春招/秋招」美团Java面经总结终结篇(附详解答)
  12. 麟龙指标通达信指标公式源码_【通达信】麟龙量能饱合度指标公式源码
  13. 毕设项目 - 基于SSM的房屋租赁系统(含源码+论文)
  14. 单片机 防破解 技术论述
  15. 李永乐复习全书线性代数 第三章 向量
  16. 计算机硬盘坏道有什么特点,硬盘坏道对电脑会造成什么影响
  17. 【LeetCode】求众数(四种方法)
  18. 【家庭网络】申请安装移动宽带过程及简单建议
  19. 什么人不在生死簿_15.生死簿如何决定人的生死?
  20. cosx等价无穷小_等价无穷小替换注意事项

热门文章

  1. 安装PostgreSQL单机版
  2. RPC的负载均衡策略
  3. ASP.NET Web API 接口执行时间监控
  4. 解决Atom插件安装下载问题
  5. 半夜闲的真是蛋疼。。。决定写个小博文
  6. 基于vue2+nuxt构建的高仿饿了么(2018版)
  7. Docker上部署MySQLCluster(基于mysql/mysql-cluster镜像)
  8. modbustcp封装使用获取设备数据示例
  9. 使用FastReport报表工具生成图片格式文档
  10. 基于随机游走的图嵌入之快速指南