初识机器学习(逻辑回归)
一、十种常用的机器学习算法本篇主要分享逻辑回归算法Logistic Regression。逻辑回归虽然名字里带“回归”二字但它实际上是一种分类算法主要用于解决二分类问题。逻辑回归也是机器学习中最基础且应用最广泛的算法之一。二、逻辑回归2.1 什么是逻辑回归逻辑回归Logistic Regression是一种用于解决分类问题的经典算法。简单来说它是在线性回归的基础上增加了一个Sigmoid函数也叫逻辑函数将线性回归的输出结果压缩到0 到 1 之间从而表示某个事件发生的概率。核心思想逻辑回归通过现有数据找到一条分类边界决策边界然后利用这条边界对新样本进行分类。同时它还能给出样本属于某个类别的概率值而不仅仅是类别标签。2.2 逻辑回归的基本原理2.2.1 sigmoid函数逻辑回归的核心就是Sigmoid函数也称逻辑函数它的公式如下其中也就是线性回归的输出。Sigmoid函数的图像呈S形曲线它将任意实数输入映射到(0, 1)区间内。当 z 趋近于正无穷时g(z) 趋近于1当 z 趋近于负无穷时g(z) 趋近于0当 z0z0 时g(z)0.5g(z)0.5。将线性回归的结果 z 代入Sigmoid函数后得到这里的表示样本属于类别1的概率。如果我们预测样本属于类别1如果则预测属于类别0。2.2.2 决策边界决策边界是逻辑回归用来区分不同类别的分界线。对于二维数据来说决策边界通常是一条直线或曲线对于高维数据则是一个超平面。逻辑回归的决策边界由参数决定公式为。当时预测为正类当时预测为负类。2.3 损失函数与优化方法2.3.1 损失函数代价函数线性回归常用的损失函数是均方误差MSE但逻辑回归如果使用均方误差会导致损失函数非凸容易陷入局部最优解。因此逻辑回归使用的是对数损失函数Log Loss也叫交叉熵损失Cross-Entropy Loss它是一个凸函数存在全局最优解。对于二分类问题损失函数定义如下其中m 是样本数量y(i) 是第 i 个样本的真实标签0或1是第 i 个样本的预测概率。当真实标签 y1 时损失函数为预测概率越接近1损失越小当真实标签 y0 时损失函数为预测概率越接近0损失越小。2.3.2 梯度下降法为了最小化损失函数我们通常使用梯度下降法Gradient Descent来更新模型参数。梯度下降的更新公式为其中是学习率Learning Rate控制每次更新的步长。梯度下降的步骤初始化参数将权重初始化为0或随机值计算预测值计算当前参数下的预测概率计算损失计算当前参数下的损失函数值计算梯度计算损失函数对每个参数的偏导数更新参数根据梯度方向更新参数重复迭代重复步骤2到5直到损失函数收敛或达到最大迭代次数2.4 逻辑回归的优缺点2.4.1 优点实现简单模型结构简单易于理解和实现计算效率高计算代价不高训练速度快存储资源消耗低可解释性强可以从特征的权重直接看出不同特征对结果的影响程度输出概率不仅能给出分类结果还能给出属于某个类别的概率2.4.2 缺点容易欠拟合模型形式简单分类精度可能不高对非线性问题处理能力有限当特征与目标之间存在复杂非线性关系时效果可能不佳对特征独立性有一定要求特征之间相关性较强时可能影响效果2.5 逻辑回归算法实现2.5.1 数据的准备与处理数据片段如下图所示其中标签包含Time,V1-V28,Amount可以看到数据相当多且混乱我们可以对数据进行可视化观察数据的特点。# 数据可视化模板 def cm_plot(y,yp): cm confusion_matrix(y,yp) plt.matshow(cm,cmapplt.cm.Blues) plt.colorbar() for x in range(len(cm)): for y in range(len(cm)): plt.annotate(cm[x,y],xy(y,x),horizontalalignmentcenter,verticalalignmentcenter) plt.ylabel(True label) plt.xlabel(Predicted label) return plt然后我们对数据进行Z-标准化处理并且划分出训练集与测试集以便后面使用。# 读取数据 data pd.read_csv(rE:\new_learning\machine_learning\code\day11\creditcard.csv) # Z-标准化 scaler StandardScaler() data[Amount] scaler.fit_transform(data[[Amount]]) data data.drop([Time],axis1) # 对数据进行切分划分出训练集与测试集 x data.drop(Class,axis1) y data.Class x_train,x_test,y_train,y_test train_test_split(x,y,test_size0.3,random_state0)2.5.2 建立模型数据处理好就可以开始建立模型前面我们都是直接建立模型然后得到结果没有考虑其他因素会不会对模型优劣产生影响如下所示model LogisticRegression(C5,l1_ratio0,max_iter1000) model.fit(x_train,y_train)通过观察可以看到在模型中还含有许多参数可以调节所以在正式建立模型之前我们需要调参。那如何进行调参呢那不得不提到交叉验证了。交叉验证Cross-Validation是一种用于评估机器学习模型泛化能力的统计学方法其核心目的是解决单次划分训练集和测试集所带来的评估结果不稳定的问题。在之前的实践中我们通常将数据集划分为训练集和测试集比如 80% 训练 20% 测试。这种做法虽然简单但存在一个致命的隐患测试集划分的随机性。假如我们运气不好那 20% 的测试集中恰好包含了极难预测的离群点或样本或者恰好全是特别简单的样本那么计算出的准确率就会有巨大的波动。我们无法确定这个准确率是模型本身优秀还是只是运气好碰到了简单的测试集。交叉验证的核心思想不把希望寄托在一次随机的数据划分上而是多次划分、多次训练、多次评估最后取平均成绩。这样得出的评估结果更加稳定、可信。# 优化模型进行交叉验证 scores [] c_param_range [0.001,0.01,0.1,1,10,100] for i in c_param_range: model LogisticRegression(Ci,l1_ratio0,solverlbfgs,max_iter1000) score cross_val_score(model,x_train,y_train,cv8,scoringrecall) score_mean sum(score)/len(score) scores.append(score_mean) print(score_mean)经过交叉验证后我们得到了最优的参数Cbest_c将它代入模型之中model LogisticRegression(Cbest_c,l1_ratio0,max_iter1000) model.fit(x_train,y_train)2.5.3 检验模型# 自测绘制混淆矩阵 train_pred model.predict(x_train) print(metrics.classification_report(y_train,train_pred)) # 自测 cm_plot(y_train,train_pred).show() # 使用测试集进行测试 test_pred model.predict(x_test) print(metrics.classification_report(y_test,test_pred,digits6)) cm_plot(y_test,test_pred).show()完整代码如下import pandas as pd import matplotlib.pyplot as plt import numpy as np from sklearn.metrics import confusion_matrix from sklearn.preprocessing import StandardScaler from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.model_selection import cross_val_score from sklearn import metrics # 数据可视化模板 def cm_plot(y,yp): cm confusion_matrix(y,yp) plt.matshow(cm,cmapplt.cm.Blues) plt.colorbar() for x in range(len(cm)): for y in range(len(cm)): plt.annotate(cm[x,y],xy(y,x),horizontalalignmentcenter,verticalalignmentcenter) plt.ylabel(True label) plt.xlabel(Predicted label) return plt # 读取数据 data pd.read_csv(rE:\new_learning\machine_learning\code\day11\creditcard.csv) # Z-标准化 scaler StandardScaler() data[Amount] scaler.fit_transform(data[[Amount]]) data data.drop([Time],axis1) # 对数据进行切分划分出训练集与测试集 x data.drop(Class,axis1) y data.Class x_train,x_test,y_train,y_test train_test_split(x,y,test_size0.3,random_state0) # 优化模型进行交叉验证 scores [] c_param_range [0.001,0.01,0.1,1,10,100] for i in c_param_range: model LogisticRegression(Ci,l1_ratio0,solverlbfgs,max_iter1000) score cross_val_score(model,x_train,y_train,cv8,scoringrecall) score_mean sum(score)/len(score) scores.append(score_mean) print(score_mean) best_c c_param_range[np.argmax(scores)] print(*****************最优惩罚因子为{}****************.format(best_c)) # 建立最优模型 model LogisticRegression(Cbest_c,l1_ratio0,max_iter1000) model.fit(x_train,y_train) # 自测绘制混淆矩阵 train_pred model.predict(x_train) print(metrics.classification_report(y_train,train_pred)) # 自测 cm_plot(y_train,train_pred).show() # 使用测试集进行测试 test_pred model.predict(x_test) print(metrics.classification_report(y_test,test_pred,digits6)) cm_plot(y_test,test_pred).show()

相关新闻

JDK 22 安装与验证教程(Windows版,含环境变量自动配置+版本检测)

JDK 22 安装与验证教程(Windows版,含环境变量自动配置+版本检测)

JDK (Java Development Kit) 是推出的Java开发工具包,在Java应用程序开发领域必不可少 一、准备工作 安装包下载:https://pan.xunlei.com/s/VOz6L3mepdOW-C0RHJAG78qkA1?pwdj2f6#,下载好【JDK 22】压缩包,右键解压到同名文件夹…

2026/8/4 5:35:15 阅读更多 →
BPM与流程挖掘:企业数字化转型的黄金组合

BPM与流程挖掘:企业数字化转型的黄金组合

1. 行业盛会背后的企业数字化升级浪潮上周在上海斯歌举办的这场三方流程领域峰会,堪称国内BPM行业近年来规格最高的线下活动。作为全程参与的技术顾问,我亲眼见证了来自金融、制造、零售等行业的CIO们对"BPM流程挖掘方法论"这一组合拳的热烈讨…

2026/8/4 5:34:15 阅读更多 →
人工智能通识题库及答案2025版 PDF

人工智能通识题库及答案2025版 PDF

人工智能通识题库及答案2025版 包括: 1-8章习题集 题型包括: 选择题 填空题 简答题 章节包括: 绪论 机器学习 计算机视觉 大数据分析 物联网 区块链 生物信息学 大模型 获取 人工智能通识题库及答案2025版::https://download.csdn.net/do…

2026/8/4 5:34:15 阅读更多 →

最新新闻

AMD Ryzen硬件调试终极指南:解锁处理器隐藏潜能的完整教程

AMD Ryzen硬件调试终极指南:解锁处理器隐藏潜能的完整教程

AMD Ryzen硬件调试终极指南:解锁处理器隐藏潜能的完整教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https:…

2026/8/5 9:53:14 阅读更多 →
8.3[A]

8.3[A]

poolingFabric ManagerPBRcompletion传统网络与CXLCXL一致性Poolingmodel/四张表生命流程Decoder责任边界实现totalexamplehost内部switch侧InterleavingFabric Manager实现Otherfinal

2026/8/5 9:53:14 阅读更多 →
Scilab频域分析实战:从FFT原理到窗函数与功率谱估计

Scilab频域分析实战:从FFT原理到窗函数与功率谱估计

1. 从时域到频域:为什么我们需要频谱分析 如果你做过信号处理,无论是音频降噪、振动监测还是通信解调,大概率都听过FFT(快速傅里叶变换)这个词。但很多时候,我们只是机械地调用 fft() 函数,看…

2026/8/5 9:53:14 阅读更多 →
SMUDebugTool终极指南:免费开源的AMD Ryzen处理器深度调试与性能优化完整教程

SMUDebugTool终极指南:免费开源的AMD Ryzen处理器深度调试与性能优化完整教程

SMUDebugTool终极指南:免费开源的AMD Ryzen处理器深度调试与性能优化完整教程 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. …

2026/8/5 9:53:14 阅读更多 →
如何快速掌握锐龙处理器调试?SMUDebugTool完整使用指南

如何快速掌握锐龙处理器调试?SMUDebugTool完整使用指南

如何快速掌握锐龙处理器调试?SMUDebugTool完整使用指南 【免费下载链接】SMUDebugTool A dedicated tool to help write/read various parameters of Ryzen-based systems, such as manual overclock, SMU, PCI, CPUID, MSR and Power Table. 项目地址: https://g…

2026/8/5 9:53:14 阅读更多 →
大模型稳定输出JSON的工程化解决方案:从提示词到后处理全链路实践

大模型稳定输出JSON的工程化解决方案:从提示词到后处理全链路实践

这次我们来看一个在AI开发中非常实际的问题:如何让大模型稳定、可靠地输出结构化的JSON数据。无论是构建AI Agent、开发自动化工具,还是处理复杂的API调用,JSON格式的稳定输出都是连接大模型能力与下游业务逻辑的关键桥梁。然而,开…

2026/8/5 9:52:14 阅读更多 →

日新闻

Java缓存框架:JetCache

Java缓存框架:JetCache

TOC 一、简介 JetCache 是一个 Java 缓存抽象框架,为不同的缓存解决方案提供了统一的使用方式。 它提供的注解比 Spring Cache 更加强大。 JetCache 的注解支持原生 TTL、两级缓存以及在分布式环境中的自动刷新功能,同时你也可以通过代码直接操作 Cach…

2026/8/5 0:00:43 阅读更多 →
AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

AD 铺铜设置十字连接,过孔全连接,新版AD的简单设置

需求:通孔焊盘 十字花;过孔 Via 实心直连;贴片焊盘按需设置 AD 测试版本AD24 很多工程师踩坑:全部统一十字,导致接地过孔阻抗高、大电流发热! 一、快捷键打开规则 PCB 界面按下:D R 展开…

2026/8/5 0:00:43 阅读更多 →
AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

AI素描转换技术深度拆解(2024最新论文+工业级落地代码):从Stable Diffusion ControlNet到LoRA微调全链路解析

更多请点击: https://kaifayun.com 第一章:AI生成素描效果 AI生成素描效果是计算机视觉与风格迁移技术融合的典型应用,其核心在于将彩色照片或RGB图像转换为具有手绘质感、明暗对比强烈、边缘清晰的单色素描图像。该过程通常依赖于深度学习模…

2026/8/5 0:00:43 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →