首页 > 编程语言 >Logistic回归算法原理详解及应用

Logistic回归算法原理详解及应用

时间:2024-07-16 21:55:10浏览次数:16  
标签:plt 函数 回归 算法 详解 Logistic test

目录

引言

基本原理

损失函数

参数估计

优缺点

应用

Logistic回归优化算法

具体案例

引言

逻辑回归(Logistic Regression)是一种广泛用于分类问题的统计方法,尤其是二分类问题。尽管名字中有“回归”二字,但它实际上是一种分类算法,主要用于估计一个样本属于某个类别的概率。逻辑回归通过逻辑函数(sigmoid函数)将线性回归模型的输出(通常是一个实数值)映射到(0,1)区间,从而得到属于某个类别的概率。

取定特征组 X∈ R ,称模型为一个Logistic模型,其中w∈ w\in R^n为模型参数

Logistic回归算法就是以Logistic模型为模型假设,以对数损失为损失函数的经验损失最小化算法。

基本原理

线性回归:首先,逻辑回归通过一组自变量(特征)的线性组合来预测一个因变量(通常是连续值)。但在逻辑回归中,我们不直接使用这个连续值作为预测结果。

Sigmoid函数:线性回归的输出被用作Sigmoid函数的输入。Sigmoid函数是一个S形曲线,它将任意实数值压缩到(0,1)区间内,其公式为:

二分类:在二分类问题中,我们设定一个阈值(通常是0.5),如果Sigmoid函数的输出大于这个阈值,则认为样本属于正类(标签为1的类别),否则属于负类(标签为0的类别)

损失函数

逻辑回归使用对数损失(log loss)或交叉熵损失(cross-entropy loss)作为损失函数。这个损失函数衡量了模型预测的概率分布与真实概率分布之间的差异。损失函数越小,模型的预测越准确。

  Logistic回归问题的目标函数称为交叉熵:

交叉熵统计意义:

在线性回归算法中,假设标签分布是以模型预测值为期望的正态分布

在Logistic回归算法中,假设标签分布是以模型概率预测值h_{w}(x) 为期望的伯努利分布

参数估计

逻辑回归的参数(即线性组合中的系数和截距)通常通过最大似然估计(MLE)或梯度下降等优化算法来求解。最大似然估计的目标是找到一组参数,使得在这组参数下,观测到当前样本集的概率最大。

优缺点

  • 优点
    • 实现简单,易于理解和实现。
    • 计算代价不高,容易扩展到大规模数据集上。
    • 输出结果是一个概率值,可以辅助决策过程。
  • 缺点
    • 对数据和场景的适应能力有局限,例如不适合处理非线性问题。
    • 对多重共线性数据敏感,可能导致过拟合。
    • 分类的类别数不宜过多,主要用于二分类问题。

应用

逻辑回归因其简单、易实现且可解释性强而被广泛应用于各种领域,如:

  • 垃圾邮件检测
  • 预测用户是否会点击广告
  • 医疗诊断(如预测病人是否患有某种疾病)
  • 风险评估(如信用评分)

总之,逻辑回归是一种简单而强大的分类算法,特别适用于处理二分类问题,并且其输出具有概率意义,便于理解和应用。

Logistic回归优化算法

具体案例

数据集是著名的鸢尾花(Iris)数据集,它常被用于分类算法的测试和教学。数据集包含了150个样本,每个样本都有4个特征(花萼长度Sepal.Length、花萼宽度Sepal.Width、花瓣长度Petal.Length、花瓣宽度Petal.Width)和一个目标变量(Species),即鸢尾花的种类。在这个数据集中,鸢尾花被分为三种类型:Setosa、Versicolour和Virginica。

import pandas as pd
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import precision_recall_fscore_support, confusion_matrix, roc_curve, auc
import matplotlib.pyplot as plt
import numpy as np


# 加载数据
data = pd.read_csv('iris.csv')

# 假设最后一列是目标变量
X = data.iloc[:, :4]
y = data.iloc[:, 4]

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 使用逻辑回归模型
model = LogisticRegression(random_state=42, max_iter=200)  # 增加max_iter以避免收敛警告
model.fit(X_train, y_train)

# 预测测试集
y_pred = model.predict(X_test)

# 计算准确率、精确率、召回率
accuracy = model.score(X_test, y_test)
precision, recall, _, _ = precision_recall_fscore_support(y_test, y_pred, average='weighted')
print("Accuracy: {:.2%}".format(accuracy))
print("Precision: {:.2%}".format(precision))
print("Recall: {:.2%}".format(recall))

# 绘制混淆矩阵
unique_labels = y.unique()  # 获取目标列的唯一值
conf_mat = confusion_matrix(y_test, y_pred)
plt.figure(figsize=(10, 7))
plt.imshow(conf_mat, cmap='Blues', interpolation='nearest')
plt.colorbar()
tick_marks = np.arange(len(unique_labels))
plt.xticks(tick_marks, unique_labels, rotation=45)
plt.yticks(tick_marks, unique_labels)
plt.tight_layout()
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.show()


 

标签:plt,函数,回归,算法,详解,Logistic,test
From: https://blog.csdn.net/m0_58683132/article/details/140476452

相关文章

  • KMP算法
    KMP算法KMP算法是一个字符串算法,通常用于匹配字符串。KMP算法的原理如果我们暴力枚举下标\(i,j\),\(i\)是文本串的下标,\(j\)是模式串(你要在文本串中匹配的字符串)的下标,时间复杂度\(O(NM)\),其中\(N,M\)分别为文本串和模式串的长度。我们看一下匹配过程:(gif动图请耐心观看)......
  • 前端面试必修--面试算法题(附带字节跳动真题pdf)
    面试算法题目录简单53.最大子数组和-力扣(LeetCode)415.字符串相加-力扣(LeetCode)206.反转链表-力扣(LeetCode)1.两数之和-力扣(LeetCode)572.另一棵树的子树-力扣(LeetCode)1410.HTML实体解析器-力扣(LeetCode)69.x的平方根-力扣(LeetCode)26.删除有序数组中......
  • 大模型算法面试题(三)
    本系列收纳各种大模型面试题及答案。1、如何评估大模型的效果及安全性一、评估大模型的效果评估大模型的效果主要关注其在特定任务上的表现能力,这通常可以通过以下几个维度来衡量:语言理解能力:语义、语法、语境:评估模型是否能够准确理解输入文本的含义、语法结构以及上......
  • Oracle数据库 ASH视图详解
    OracleASH视图详解ASH视图基础v$active_session_history、dba_hist_active_sess_history数据来源:MMON进程收集数据库实例性能及会话活动的大量统计数据到SGA,并定期存储到SM/AWR组件中的数据字典用途:显示采样的会话活动信息,动态视图中每秒一行记录,历史视图中每10秒一......
  • P27-P47构建神经网络进化智能体-构建用于训练强化学习之鞥提的随机环境-构建基于价值
    文章目录构建神经网络进化智能体前期准备实现步骤工作原理参考资料第二章基于价值、策略和行动者-评论家的深度强化学习算法实现技术要求构建用于训练强化学习智能体的随机环境前期准备实现步骤工作原理构建基于价值的强化学习智能体算法前期准备实现步骤工作原理......
  • 算法入门-数组2
    第一部分:数组26.删除有序数组中的重复项(简单)题目:给你一个非严格递增排列的数组nums,请你 原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。考虑nums的唯一元素的数量为k,你......
  • 代码随想录算法训练营第十四天 | 226.翻转二叉树、101. 对称二叉树、 104.二叉树的最
    226.翻转二叉树题目:.-力扣(LeetCode)思路:前序遍历代码:classSolution{public:TreeNode*invertTree(TreeNode*root){if(root!=NULL){swap(root->left,root->right);invertTree(root->left);invertTree(root->right);}......
  • 代码随想录算法训练营第十一天 | 150. 逆波兰表达式求值、 239. 滑动窗口最大值、347.
    150.逆波兰表达式求值题目:.-力扣(LeetCode)思路:遇到数字进栈,遇到符号出栈运算。代码:classSolution{public:intevalRPN(vector<string>&tokens){stack<longlong>sta;for(strings:tokens){if(s=="+"||s=="-"||s=="*"......
  • 代码随想录算法训练营第九天 | 151.翻转字符串里的单词、卡码网:55.右旋转字符串、28.
    151.翻转字符串里的单词题目:.-力扣(LeetCode)思路:用快慢双指针重置空格,先整体翻转再局部翻转代码:classSolution{public:voidremoveSpace(string&s){intslow=0;for(intfast=0;fast<s.size();fast++){if(slow!=0&&s[fast]!='')......
  • 代码随想录算法训练营第八天 | 344.反转字符串、541. 反转字符串II、卡码网:54.替换数
    344.反转字符串题目:.-力扣(LeetCode)思路:用swap遍历一个循环就行了。代码:classSolution{public:voidreverseString(vector<char>&s){for(inti=0;i<s.size()/2;++i){swap(s[i],s[s.size()-i-1]);}}};541.反转字符串II题目:.-力扣(L......