目录
- 逻辑回归似然函数
- softmax
- 代码
逻辑回归似然函数
在这里可以看作是线性回归+sigmoid函数。sigmoid函数的作用就是把我们线性回归计算出来的结果映射到0到1之间。
这是逻辑回归的似然函数,因为似然函数时取极大值我们添加符号就可以变为求最小值,方便后面求导取最小值。当y的标签为1时后面部分为1,当y的标签为0时前面部分为1.
取对数变为相加的结构
在求导,取的最小值
softmax
逻辑回归是用于二分类问题,softmax是用于多分类问题。
softmax的函数为
分母上是各个概率加总的和,分子是各个概率,softmax就是对概率做了一个加权平均,保证各个概率的结果相加是1。这里将线性函数做指数转换的原因是线性函数的结果有正有负,加权的时候就会出现问题,做一个指数转换保证结果是正值,而且可以增大各个类别的区别,因为指数函数在正半轴的增加更大。
将softmax函数拆开,可以看出来其参数量为K*N个
I是指示函数,当Y是J类的时候返回1,否则为0.上图为softmax的目标函数。前面加负号可以求导求最小值。
首先将Ln除化成减,然后一直求导提取x。
代码
algo= LogisticRegression()
"""
penalty='l2', 指定惩罚项是l2 还是 l1, 正则化项
tol=1e-4, 损失函数停止迭代的阈值
C=1.0, 惩罚项系数
fit_intercept=True, 模型是否带截距项
class_weight=None, 给定各个类别的样本权重 只有在样本比例极其失衡情况下考虑 一般不用考虑
solver='lbfgs', 模型求解
multi_class='auto', 过后会专门讲解 ovr 或者是 mutinomial ,如果参数选择mutinomial 相当于softmax方法求解
verbose=0, 是否打印中间日志
"""
# 预测模型
pred_train = algo.predict(x_train)
pred_test = algo.predict(x_test)
# 6.模型效果评估 (分类 回归 聚类)
print("训练集上的准确率:{}".format(algo.score(x_train,y_train)))
print("测试集上的准确率:{}".format(algo.score(x_test,y_test)))
print("训练集上的准确率:{}".format(accuracy_score(y_train,pred_train)))
print("测试集上的准确率:{}".format(accuracy_score(y_test,pred_test)))
print("训练集上的混淆矩阵:\n{}".format(confusion_matrix(y_train,pred_train)))
print("测试集上的混淆矩阵:\n{}".format(confusion_matrix(y_test,pred_test)))
print("训练集上的recall:{}".format(recall_score(y_train,pred_train,pos_label=4)))
print("测试集上的recall:{}".format(recall_score(y_test,pred_test,pos_label=4)))
print("训练集上的precision:{}".format(precision_score(y_train,pred_train,pos_label=4)))
print("测试集上的precision:{}".format(precision_score(y_test,pred_test,pos_label=4)))
print("训练集上的分类报告:{}".format(classification_report(y_train,pred_train)))
print("测试集上的分类报告:{}".format(classification_report(y_test,pred_test)))
# 模型参数
print("模型的截距项theta0:{}".format(algo.intercept_))
print("模型的参数theta:{}".format(algo.coef_))
print("模型预测的概率值:\n{}".format(algo.predict_proba(x_test)))
# print("模型预测的经过对数装换后的概率值:{}".format(algo.predict_log_proba(x_test)))
print("决策方程,decision function:{}".format(algo.decision_function(x_test)))
# 更改模型的判断阈值 判断这个人是否是乳腺癌患者
# a = 0.5
#
# y_predict_proba = algo.predict_proba(x_test)[:,1]
#
#
# y_predict_proba[y_predict_proba>a]=4
# y_predict_proba[y_predict_proba<a]=2
# print(y_predict_proba)
softmax代码:
algo= LogisticRegression(multi_class="multinomial",solver="lbfgs")
# class_weight={3:1,8:1,4:20,7:50,5:1000,6:1000}
# 当参数选择为multi_class='auto', 过后会专门讲解 ovr 或者是 mutinomial ,如果参数选择mutinomial 相当于softmax方法求解