机器学习实战︱基于逻辑回归算法进行乳腺癌的识别( 二 )


#样本个数
m=X.shape[1]
#初始化预测输出
Y_prediction=np.zeros((1,m))
#转置参数向量w
w=w.reshape(X.shape[0],1)
#预测结果
Y_hat=sigmoid(np.dot(w.T,X)+b)
#将结果按照0.5的阈值转化为0/1
foriinrange(Y_hat.shape[1]):
ifY_hat[:,i]>0.5:
Y_prediction[:,i]=1
else:
Y_prediction[:,i]=0
returnY_prediction
03
模型评价
最后是实现在训练集上训练、并在测试集上评价模型的函数Logisticmodel , 代码如代码清单14-8所示 。 本文设置了迭代次数为1000次 , 学习率设置为0.2 。 并编写如代码清单14-7所示的main函数作为整个脚本的入口 。
代码清单14-7主函数
if__name__=='__main__':
X_train,X_test,y_train,y_test=loadTrainData
Logisticmodel(X_train,y_train,X_test,y_test)
代码清单14-8训练集预测函数
#训练以及预测
defLogisticmodel(X_train,Y_train,X_test,Y_test,num_iterations=1000,learning_rate=0.1):
#初始化参数w , b
w,b=initialize_para(X_train.shape[0])
#梯度下降找到最优参数
parameters,costs=optimize(w,b,X_train,Y_train,num_iterations,learning_rate)
w=parameters["w"]
b=parameters["b"]
#训练集测试集的预测结果
Y_prediction_train=predict(w,b,X_train)
Y_prediction_test=predict(w,b,X_test)
Y_prediction_test=Y_prediction_test.T
#模型评价
accuracy_score_value=https://pcff.toutiao.jxnews.com.cn/p/20210719/accuracy_score(Y_test,Y_prediction_test)
recall_score_value=https://pcff.toutiao.jxnews.com.cn/p/20210719/recall_score(Y_test,Y_prediction_test)
precision_score_value=https://pcff.toutiao.jxnews.com.cn/p/20210719/precision_score(Y_test,Y_prediction_test)
classification_report_value=https://pcff.toutiao.jxnews.com.cn/p/20210719/classification_report(Y_test,Y_prediction_test)
print("准确率:",accuracy_score_value)
print("召回率:",recall_score_value)
print("精确率:",precision_score_value)
print(classification_report_value)
d={"costs":costs,
"Y_prediction_test":Y_prediction_test,
"Y_prediction_train":Y_prediction_train,
"w":w,
"b":b,
"learning_rate":learning_rate,
"num_iterations":num_iterations}
returnd
运行整个代码 , 可以得到如图14-1的输出 。
机器学习实战︱基于逻辑回归算法进行乳腺癌的识别

图14-1执行代码命令行输出
从输出中可以观察到 , 随着迭代次数的增加到400次左右时 , 损失函数Loss从最开始的2.85逐渐下降到1.03左右 , 预测的正确率也有0.75逐渐上升到0.91 。 接下来两项数据均开始小范围的上下抖动 , 模型收敛 。
最后在测试上验证准确率大致为0.92左右 , 与训练集的准确率基本一致 , 没有发生过拟合问题 , 模型训练完毕 。
如果将学习率进一步下调到0.1 , 会产生什么样的结果?
【小技巧】在最开始训练模型时 , 可以设置一个较高的学习率 , 等到其余超参数(例如损失函数 , 激活函数等)调整好后 , 再逐渐降低学习率 , 直到正确率等指标达到最优 。
机器学习实战︱基于逻辑回归算法进行乳腺癌的识别

图14-2学习率下降后执行代码命令行输出
如图14-2所示 , 可以发现 , 当学习率下降时 , 最直观的猜测便是整个模型学习的速度会变慢 , 事实上也是如此 , 相比学习率为0.2时第400次迭代会收敛 , 0.1的学习率使得第600次迭代 , 损失函数才逐渐趋于稳定 。 学习率越低收敛速度变慢 , 最终却能获得低的损失函数值和更高的正确率 。 因此在调整模型参数时 , 学习率是一个非常重要的超参数 , 开始调整模型时可以选择一个较大的学习率 , 并逐渐降低学习率最后达到最优的收敛结果 。
04
参考教材
《Python机器学习实战-微课视频版》