机器学习二——逻辑回归(自己学习与理解知识点梳理)

逻辑回归似然函数

在这里插入图片描述
在这里插入图片描述
在这里可以看作是线性回归+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方法求解
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值