Logistic Regression
逻辑回归通常用来做一种二分类问题,构造一个线性模型,将相应的数据分成两类,线性模型一侧的属于一类,另一侧归为另一类。按照机器学习的套路步骤:
1. 模型
逻辑回归模型形式如下:
当我们将相应数据代入到,会得到一个实数值,若大于0.5,则将归类为正类1;否则归类为负类0。被称为sigmoid函数,其意义是表示属于正类1的概率()。
2. 损失函数
在逻辑回归中,常用的损失函数是cross-entropy loss(交叉熵),形式如下:
3. 迭代更新
利用梯度下降法法来迭代求解模型系数 和线性回归一样,利用迭代法最小化损失函数,降低真值与预测值之间的差距。
具体实现如下:
def sigmoid(X, theta):
"""
compute 1 / ( 1 + exp(-theta * x) )
Inputs:
- X: numpy array contains datas, of shape(m, n)
- theta: numpy array about weight, of shape(n, 1)
Return:
- hx: sigmoid value about X, of shape(m, 1)
"""
hx = 1 / ( 1.0 + np.exp( -1.0 * np.dot(X, theta) ) )
return hx
def SGD(X, y, alpha=0.01, maxIter=40):
"""
stochastic gradient descent for logitstic regression
Inputs:
- X: numpy array contains datas, of shape(m, n)
- y: numpy array about datas' labels, of shape(n, 1)
- alpha: a float, learning rate
- maxIter: a int, the maximum of iterations
Return:
- theta: param of logistic model, of shape(n, 1)
"""
m, n = X.shape
theta = np.zeros((n, 1))
for i in range(maxIter):
hx = sigmoid(X, theta)
theta = theta - alpha * np.dot(-X.T, (y - hx))
return theta
def classify(X, theta):
"""
classify X based on theta
Inputs:
- X: numpy array about datas, of shape(m, n)
- theta: numpy array about model param, of shape(n, 1)
Returns:
"""
hx = sigmoid(X, theta)
hx[ np.where(hx > 0)[0] ] = 1
hx[ np.where(hx <= 0)[0] ] = 0
return hx
概率角度
和线性回归模型一样,可以通过参数估计这一角度,对逻辑回归进行解释。如上述所说,模型其实可以理解为,可以归类为1的概率,即:,那么归类为0的概率:
那么可以合在一起写成:
现在拥有训练数据集,那就可以利用极大似然估计来估计参数的值。
极大似然方程就为:取对数后就可得到: 可以看到cross-entropy loss(交叉熵)就是上述取对数后的极大似然方程的负数。这就是为什么可以通过梯度下降法,对交叉熵进行最小化,得到逻辑回归的参数。
总结
逻辑回归的模型是sigmoid函数形式,但其决策边界是直线,因此它属于一种线性模型;其中的sigmoid函数值代表的是样本属于正类的概率()。在逻辑回归模型中,常用的损失函数是cross-entropy loss(交叉熵),该损失函数有多分类的形式,对应的是多分类的模型。这里简单说明一下,softmax回归是多分类常用的一种模型,其大概流程就是,通过得到激活值后,再利用softmax函数将激活值转为概率分布,再由交叉熵来衡量计算后的分布与目标分布的差距;通过最小化上述差距来得到模型参数。
逻辑回归的正则化与线性回归一样,只需在损失函数中加入相应正则项即可;加入正则项后的推导,与线性回归的没有差别。
网友评论