上篇内容对逻辑回归的基本理论做了归纳,本篇将使用全量梯度下降法来寻找逻辑回归的参数。全量梯度下降法在每次更新参数时需要遍历整个数据集。全量梯度下降法优点是每次更新会朝着正确的方向进行,缺点是每次学习时间过长。
##### python实现全量梯度下降法 #####
# 定义逻辑回归函数
def sigmoid(z):
return 1.0/(1+np.exp(-z))
# 全量梯度下降法拟合参数
def gradDescent(xData, yLabel):
dataMat = np.mat(xData)
labelMat = np.mat(yLabel).T
m,n = np.shape(dataMat)
gamma = 0.001# 设置步长
iterNum = 1000# 设置迭代次数
theta = np.ones((n,1))# 初始化参数全为1
for k in range(iterNum):
H = sigmoid(dataMat*theta)# 计算预测值
error = (H - labelMat) # 计算误差
D = dataMat.T* error# 计算梯度
theta = theta - gamma * D # 更新参数
yPred = H
return theta, yPred
############## over ##############
以含有两个特征的二维列表xData为例,第1列取值为1,定义为X0,第2列和第3列分别为X1和X2。
标签为一维列表 yLabel,取值为:
带入计算:
theta, yPred = gradDescent(xData, yLabel)
得到theta为:
yPred为:
得到的yPred为预测为类别1的概率,现在设置阈值为0.5,即yPred>=0.5,预测为1,否为为0,下面得到的yPredClass即为预测的类别:
yPredList = yPred.T.tolist()[0]
yPredArr = np.array(yPredList)
yPredClass = np.where(yPredArr>=0.5, 1, 0)
最后看看预测的效果如何:
from sklearn.metrics import classification_report
classification_report(yLabel, yPredClass)
从上图可以看出,预测1的准确率为0.98,召回率为0.96,f1评分为0.97。
领取专属 10元无门槛券
私享最新 技术干货