逻辑回归学习笔记

一、概念理解

逻辑回归其实是一种分类算法,我们把它称作回归是因为我们要找到一个将数据分隔开的边界线,而我们通过根据现有数据进行学习来对这个边界做回归来获得这个分类的边界,即获得一组最佳拟合系数。我们用z=w^{T}x+b 来表示这条边界线,w为系数。

我们需要将这条边界线与数据的标记 y 联系起来,从而进行分类,若是二分类任务,那么标记 y\epsilon \left \{ 0,1 \right \},我们可以用一个函数来将实数值 z 转为 0/1 值。考虑连续性,我们用一种Sigmoid函数 y=\frac{1}{1+e^{-z}}来对 z 值进行转化,该函数图像为:

我们可以根据 y=\left\{\begin{matrix} 0, z<0;\\ 0.5,z=0;\\ 1,z>0; \end{matrix}\right. 来对预测值进行判别分类。

接下来我们要怎样在每一轮学习中对系数进行优化,朝着那个方向对参数进行变化呢?

z 代入 y 可得  y=\frac{1}{1+e^{-(w^{T}x+b)}}变化后得 ln\frac{y}{1-y} = w^{T}x+b,我们把 y 看作样本为正例的可能性,那么1-y 看作样本为反例的可能性。我们将 y1-y  用后验概率进行替换,然后通过极大似然估计,通过样本结果反推最有可能导致这种结果的参数,最大化f(w)来估计参数 wb 。最后可得: \frac{\partial f(w)}{w}=\sum_{i=1}^{m}x_i(y_i-z(x_i))

以梯度上升法为例,每一次用 w=w-\alpha \bigtriangledown _wf(w) 来更新参数。

以《机器学习实战》中的例子:

def sigmoid(inX):
    if inX>=0:
        return 1.0/(1+np.exp(-inX))
    else:
        return np.exp(inX)/(1+np.exp(inX))

#Logistic回归梯度上升优化算法,每次用整个数据集进行更新
def gradAdscent(dataSet,labelSet):
	dataMat = np.mat(dataSet)
	labelMat = np.mat(labelSet).transpose()
	m,n = dataMat.shape
	W = np.ones((n,1))
	a = 0.001
	maxCycles = 500
	for i in range(maxCycles):
		p = sigmoid(dataMat*W)
		error = labelMat-p
		W = W + a * dataMat.transpose() *  error
	# print(sigmoid(dataMat[10] *W),labelMat[10])
	return W

#Logistic回归随机梯度上升优化算法,每次用一个样本点对系数更新
def stocGradAscent0(dataMatrix, classLabels):
    m,n = dataMatrix.shape
    alpha = 0.01
    weights = np.ones(n)   #initialize to all ones
    for i in range(m+5800):
    	h = sigmoid(np.sum(dataMatrix[i%m]*weights))
    	error = classLabels[i%m] - h
    	weights = weights + alpha * error * dataMatrix[i%m]
    return weights

 数据集和分类边界线:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值