前面我们讲了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回归算法。