神经网络和深度学习--Python实现Logistic回归

发布于 / 机器学习 / 0 条评论

前面我们讲了Logistic回归的详细内容,让我们使用Python来完成它吧!

# coding:UTF-8    
import numpy as np

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

def lr_train_bgd(feature, label, maxCycle, alpha):
    '''利用梯度下降法训练Logistic模型'''
    '''feature:特征,label:标签,maxCycle:最大迭代次数,alpha梯度下降中的学习率'''
    n = np.shape(feature)[1] #求特征个数
    w = np.mat(np.ones((n,1))) #初始化权重
    for i in range(maxCycle): #迭代maxCycle次
        h = sigmoid(feature * w)
        err = label - h #相当于dz
        w = w + alpha * feature.T * err #修正权重
    return w

我们来测试一发:我们定义一个训练样本以及样本对应的标签(正确答案):

feature = np.array([[1,1,0,0],[1,0,1,0],[0,1,0,0],[1,0,1,1],[0,0,0,0],[1,1,1,0],[0,1,1,1],[1,1,1,1],[0,0,1,1],[0,0,0,1],[0,1,1,0],[1,0,0,1],[1,1,0,1],[0,1,0,1],[1,1,0,1]])
label = np.array([[1,1,0,1,0,1,1,1,1,0,1,1,1,0,1]]).T

样本集的每个元素由(a,b,c,d)四个特征组成,我们用肉眼可以看出来,只要a或c为1,对应的标签就会是1,而a=c=0的时候,对应的标签就是0。我们看看运行结果是不是也是这样的:

w = lr_train_bgd(feature, label, 100000, 0.01)
print(w)

运行结果:

果然第一个和第三个特征的权重最高。

至此,Logistic回归的全部内容都结束了。Logistic回归算法复杂度低,比较容易实现,在工业界获得了广泛的应用。但是它只能处理二分类问题,即输出只有0和1的问题。但是多分类问题就无法使用logistic了,例如人脸识别,输出标签会有很多种,这就需要Softmax回归算法。

转载原创文章请注明,转载自: 斐斐のBlog » 神经网络和深度学习--Python实现Logistic回归
目前还没有评论,快来抢沙发吧~