初识机器学习(逻辑回归)
一、十种常用的机器学习算法本篇主要分享逻辑回归算法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/10/19 3:17:05 阅读更多 →
BPM与流程挖掘:企业数字化转型的黄金组合

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

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

2026/10/17 7:50:50 阅读更多 →
人工智能通识题库及答案2025版 PDF

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

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

2026/10/17 11:20:20 阅读更多 →

最新新闻

Flutter工程规范实战:用Claude Code和Codex约束AI写代码

Flutter工程规范实战:用Claude Code和Codex约束AI写代码

最近我在几个 Flutter 项目里试了用 Claude Code 和 Codex 来写代码,效果确实惊艳,但翻车概率也一点都不低。最典型的情况是:AI 能独立完成一个小功能,却会在你根本没注意到的地方破坏既有约定——混用状态管理方案、跳过异常处理…

2026/10/19 3:17:05 阅读更多 →
YOLOv8基建裂缝检测系统:轻量高鲁棒的工程落地实践

YOLOv8基建裂缝检测系统:轻量高鲁棒的工程落地实践

1. 项目概述:为什么一个“基建裂缝检测系统”值得用YOLOv8重做一遍你可能已经见过不少用YOLO系列做裂缝识别的Demo——拍张照片,框出几条灰白细线,再打个“裂缝:0.87”的标签,就叫“智能巡检”。但真把它拉进某高铁桥墩…

2026/10/19 3:17:05 阅读更多 →
基于Python与深度学习的植物病虫害识别系统设计与实现

基于Python与深度学习的植物病虫害识别系统设计与实现

1. 项目整体设计与技术选型植物病虫害识别这几年一直是农业信息化里的热门方向,真正落地做过的朋友都知道,难点不在模型本身,而是“识别”这个动作如何被最终用户方便地使用。我这次做的这套基于Python的植物病虫害识别系统,目标很…

2026/10/19 3:17:05 阅读更多 →
基于Python的植物病虫害识别系统实战:从模型训练到前后端部署

基于Python的植物病虫害识别系统实战:从模型训练到前后端部署

1. 项目价值与整体定位看到“基于Python的植物病虫害识别系统”这个标题时,我第一反应是这应该是一个典型的“算法工程”相结合的综合型项目。它既要解决“能不能识别出来”的算法问题,又要解决“别人怎么用”的工程落地问题。前后端源码意味着它不仅仅是…

2026/10/19 3:17:05 阅读更多 →
二进制部署Kubernetes高可用:从单master到双master+双LB实践

二进制部署Kubernetes高可用:从单master到双master+双LB实践

做二进制方式部署 Kubernetes 的人,多少带点“倔”——不想被 kubeadm 那堆自动生成的证书和静态 Pod 挡住视线,就想亲手把 etcd、apiserver、controller-manager、scheduler 一个个进程拉起来,看它们到底是怎么协作的。我前阵子刚把一套“单…

2026/10/19 3:17:05 阅读更多 →
Metadef实践指南:CANN自定义算子开发的基石

Metadef实践指南:CANN自定义算子开发的基石

Metadef 这个名字在自定义算子开发圈子里,说实话一开始很容易被忽略。很多人刚接触 CANN 算子开发时,目光全放在 kernel 怎么实现、tiling 怎么切分上,等真正动手写第一个算子才发现,最卡脖子的不是计算逻辑,而是“这个…

2026/10/19 3:16:05 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/18 0:00:55 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/18 0:00:55 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →