[机器学习]04-逻辑回归(python)-03-API与癌症分类案例讲解

逻辑回归(Logistic Regression) 的一API 介绍

关于如何配置模型中的优化器、正则化和惩罚项。

1. 逻辑回归 API

在 Scikit-learn 中,逻辑回归可以通过如下方式定义:

from sklearn.linear_model import LogisticRegression
​
model = LogisticRegression(solver='liblinear', penalty='l2', C=1.0)

solver:这是用于优化损失函数的算法(或求解器),因为我们需要根据给定的数据去寻找模型参数,所以这个求解器决定了使用哪种算法去最小化损失函数。

penalty:这是正则化的类型,可以选择 'l1''l2',它是为了防止模型过拟合。

C:这是正则化的强度参数,值越小正则化越强,默认是 1.0。

2. solver(求解器)介绍

solver 是用于最小化损失函数的算法选项,在不同的数据规模和正则化条件下,选择合适的求解器会影响计算效率和结果。

liblinear:这个求解器适合 小数据集,速度更快。它采用 坐标下降法,可以用于 L1 和 L2 正则化。因为它的计算复杂度较低,所以在小数据集上的表现很好.

sag、saga:这两个求解器适合 大数据集,它们使用的是 随机梯度下降法(Stochastic Average Gradient Descent),这种方法可以在处理大量数据时表现得更高效。

  • sagsaga 支持 L2 正则化,或者也可以不使用正则化。
  • saga 支持 L1 和 L2 正则化,所以它更灵活,特别适合处理稀疏数据集(很多 0 值的数据)。

3. 正则化

正则化(penalty) 是用于防止模型 过拟合 的一种技术。过拟合意味着模型在训练集上表现很好,但在测试集上表现不佳,正则化的作用就是让模型在训练时不过于依赖训练数据。

  • L1 正则化:又称为 Lasso 正则化,它会让某些权重变为 0,从而达到特征选择的效果。它适合处理有很多不相关特征的数据集,因为它会自动选择出相关特征,忽略掉不相关的特征。
  • L2 正则化:又称为 Ridge 正则化,它不会让权重变为 0,但会压缩权重的值。它倾向于使模型的参数尽量小,从而减少模型的复杂度。

4. 惩罚参数 C

C 是正则化的强度,值越小,正则化越强

  • 当 ( C ) 很小的时候,模型的正则化效果很强,它会强制模型的权重变得更小,以此来减少模型的复杂性。
  • 当 ( C ) 很大的时候,正则化的效果很弱,模型允许有较大的权重,可能会导致模型过拟合。

5. 总结 API 的使用场景

  • 当我们面对 小数据集 时,可以选择 liblinear 求解器,它的计算速度更快,适合处理小规模问题。
  • 当面对 大数据集 时,推荐使用 sagsaga,因为它们能够更高效地处理大规模数据集。
  • 正则化的选择:
    • 如果我们想要做 特征选择 或者数据集中的特征较多,使用 L1 正则化(例如在稀疏数据中,比如文本分类)。
    • 如果我们仅仅想防止过拟合,但不需要特征选择,使用 L2 正则化

举个简单的例子:

假设你在做一个文本分类任务,比如垃圾邮件分类。你有一个非常大的数据集,每封邮件都可以用几万个单词表示,那么这里很多单词是不相关的,你可以使用:

model = LogisticRegression(solver='saga', penalty='l1', C=1.0)
  • 选择 saga,因为数据集很大,它的求解效率高。
  • 选择 L1 正则化,因为它可以自动选择出有用的特征(即对垃圾邮件的预测有用的单词)。
  • 通过这种组合,你可以让模型在大规模数据集上表现得更好,同时还能筛选出关键特征。

import pandas as pd
url = "https://github.com/akmand/datasets/raw/main/breast_cancer_wisconsin.csv"
data = pd.read_csv(url)
data.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 569 entries, 0 to 568
Data columns (total 31 columns):
 #   Column                   Non-Null Count  Dtype  
---  ------                   --------------  -----  
 0   mean_radius              569 non-null    float64
 1   mean_texture             569 non-null    float64
 2   mean_perimeter           569 non-null    float64
 3   mean_area                569 non-null    float64
 4   mean_smoothness          569 non-null    float64
 5   mean_compactness         569 non-null    float64
 6   mean_concavity           569 non-null    float64
 7   mean_concave_points      569 non-null    float64
 8   mean_symmetry            569 non-null    float64
 9   mean_fractal_dimension   569 non-null    float64
 10  radius_error             569 non-null    float64
 11  texture_error            569 non-null    float64
 12  perimeter_error          569 non-null    float64
 13  area_error               569 non-null    float64
 14  smoothness_error         569 non-null    float64
 15  compactness_error        569 non-null    float64
 16  concavity_error          569 non-null    float64
 17  concave_points_error     569 non-null    float64
 18  symmetry_error           569 non-null    float64
 19  fractal_dimension_error  569 non-null    float64
 20  worst_radius             569 non-null    float64
 21  worst_texture            569 non-null    float64
 22  worst_perimeter          569 non-null    float64
 23  worst_area               569 non-null    float64
 24  worst_smoothness         569 non-null    float64
 25  worst_compactness        569 non-null    float64
 26  worst_concavity          569 non-null    float64
 27  worst_concave_points     569 non-null    float64
 28  worst_symmetry           569 non-null    float64
 29  worst_fractal_dimension  569 non-null    float64
 30  diagnosis                569 non-null    object 
dtypes: float64(30), object(1)
memory usage: 137.9+ KB

根据字段信息,以下是翻译后的中文版本:

  1. mean_radius - 平均半径

  2. mean_texture - 平均纹理

  3. mean_perimeter - 平均周长

  4. mean_area - 平均面积

  5. mean_smoothness - 平均平滑度

  6. mean_compactness - 平均致密度

  7. mean_concavity - 平均凹陷

  8. mean_concave_points - 平均凹点

  9. mean_symmetry - 平均对称性

  10. mean_fractal_dimension - 平均分形维数

  11. radius_error - 半径误差

  12. texture_error - 纹理误差

  13. perimeter_error - 周长误差

  14. area_error - 面积误差

  15. smoothness_error - 平滑度误差

  16. compactness_error - 致密度误差

  17. concavity_error - 凹陷误差

  18. concave_points_error - 凹点误差

  19. symmetry_error - 对称性误差

  20. fractal_dimension_error - 分形维数误差

  21. worst_radius - 最差半径

  22. worst_texture - 最差纹理

  23. worst_perimeter - 最差周长

  24. worst_area - 最差面积

  25. worst_smoothness - 最差平滑度

  26. worst_compactness - 最差致密度

  27. worst_concavity - 最差凹陷

  28. worst_concave_points - 最差凹点

  29. worst_symmetry - 最差对称性

  30. worst_fractal_dimension - 最差分形维数

  31. diagnosis - 诊断(通常 "B" 表示良性,"M" 表示恶性)

这些翻译可以帮助你更好地理解数据集中的各个特征。

from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
import pandas as pd
import numpy as npdef dm_LogisticRegression():# 1. 获取数据url = "https://github.com/akmand/datasets/raw/main/breast_cancer_wisconsin.csv"data = pd.read_csv(url)# 2. 基本数据处理# 2.1 缺失值处理data = data.replace(to_replace="?", value=np.NaN)data = data.dropna()# 2.2 确定特征值和目标值x = data.iloc[:, 1:-1]  # 去除 ID 列y = data.iloc[:, -1]  # 目标值为最后一列,通常为 'Diagnosis'# 2.3 按 8:2 比例分割数据集x_train, x_test, y_train, y_test = train_test_split(x, y,train_size=0.8, random_state=22)# 3. 特征工程(标准化)transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4. 机器学习模型训练(逻辑回归)estimator = LogisticRegression()estimator.fit(x_train, y_train)# 5. 模型评估y_predict = estimator.predict(x_test)print('y_predict -->', y_predict)accuracy = estimator.score(x_test, y_test)print('accuracy -->', accuracy)# 调用函数
dm_LogisticRegression()

结果分析:

1. y_predict --> ['B', 'M', 'M', 'M', ...]:

•  这是模型对测试集的预测结果,其中:

• 'B' 表示 良性(Benign)肿瘤。

• 'M' 表示 恶性(Malignant)肿瘤。

• 模型对每个样本进行了分类,给出了它是良性还是恶性肿瘤。

2. accuracy --> 0.951048951048951:

准确率(Accuracy)是模型在测试集上的表现指标,定义为模型预测正确的样本数量占总测试样本数量的比例。

• 该模型的准确率为 95.1%,这意味着模型在测试集中 95.1% 的样本被正确分类为良性或恶性肿瘤。

结论:

模型表现良好:95.1% 的准确率表明该逻辑回归模型对乳腺癌数据集有着较好的分类能力,大多数情况下能够正确判断肿瘤是良性还是恶性。

进一步改进:虽然 95.1% 的准确率已经较高,但在实际应用中可以进一步优化模型(例如通过调参、使用更复杂的模型、处理不平衡数据等)以提升准确率和鲁棒性。

总体来说,该结果表明模型在检测良性和恶性肿瘤的分类任务上表现较好,但仍有一定的错误分类。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/147400.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Web 安全(Web Security)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

Renesas R7FA8D1BH (Cortex®-M85)的 General PWM的应用实践

目录 概述 1 General PWM介绍 1.1 特性 1.2 定时器选择注意点 2 时钟配置 3 应用案例 3.1 基本定时器应用 3.2 定时器回调函数案例 3.3 输入捕捉功能案例 3.4 更新周期案例 3.5 更新占空比案例 3.6 单次触发脉冲案例 4 测试 4.1 代码介绍 4.2 验证 概述 本文主…

算法练习题25——leetcode3279统计重新排列后包含另一个字符串的子字符串的数目(滑动窗口 双指针 哈希)

题目描述 解题思路 本题用到了滑动窗口 双指针 哈希 刚开始我是没读懂题的因为我笨 我想把我的思路说一下 左端不轻易缩小 只有找到跟word2匹配了 比如说abbcdd 遍历到c的时候才能匹配这个word2 对吧 那么之后加上以一个d或者俩d 都符合了 然后我们算完了 才能缩小左端 扩大…

python爬虫案例——异步加载网站数据抓取,post请求(6)

文章目录 前言1、任务目标2、抓取流程2.1 分析网页2.2 编写代码2.3 思路分析前言 本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。 1、任务目标 目标网…

STM32篇:按键点亮LED灯

输入&#xff08;按键&#xff09;&#xff1a;KEY1---PA0 KEY2---PA1 输出&#xff08;LED灯&#xff09;&#xff1a;LED1---PB8 LED2---PB9

【M-LOAM学习】

M-LOAM(INITIALIZATION) Article Analysis Scan-Based Motion Estimation 通过在consecutive frame (each LiDAR)&#xff08;因为omp parallel&#xff09;中寻找correspondences然后通过最小化所有考虑feature之间residual error的transformation between frame to frame 针…

(done) 声音信号处理基础知识(7) (Understanding Time Domain Audio Features)

参考&#xff1a;https://www.youtube.com/watch?vSRrQ_v-OOSg&t1s 时域特征包括&#xff1a; 1.幅度包络 2.均方根能量 3.过零率 振幅包络的定义&#xff1a;一个 frame 里&#xff0c;所有采样点中最大的振幅值 一个形象的关于振幅包络的可视化解释如下&#xff1a;…

MateBook 16s 2023在Deepin下开启性能模式,调节风扇转速到最大,全网首发!

方法 在Deepin下按住Fnp快捷键&#xff0c;开启性能模式。 验证 首先去debian下载acpi-call-dkms https://packages.debian.org/sid/all/acpi-call-dkms/download 然后使用root用户执行&#xff1a; apt install --simulate ./acpi-call-dkms_1.2.2-2.1_all.deb apt inst…

C++入门——(类的默认成员函数)析构函数

文章目录 一、析构函数二、析构函数的特点总结 一、析构函数 析构函数与构造函数功能相反&#xff0c;析构函数不是完成对对象本⾝的销毁&#xff0c;⽐如局部对象是存在栈帧的&#xff0c;函数结束栈帧销毁&#xff0c;他就释放了&#xff0c;不需要我们管&#xff0c;C规定对…

【ChatGPT】提示词助力广告文案、PPT制作与书籍推荐的高效新模式

博客主页&#xff1a; [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 &#x1f4af;前言&#x1f4af;高效广告推销文案提示词使用方法 &#x1f4af;AI自动生成PPT全流程提示词使用方法 &#x1f4af;精选书籍推荐爆款文案提示词使用方法 &#x1f4af;小结 &#x1f4af;…

第一个NDK项目

新建项目 选择Native C的项目&#xff0c;我这里给项目的命名是NDKTest。 目录分析 新增了一个cpp目录&#xff0c;里面有一个CMakeLists和.cpp文件。 CMakeLists 文件是用来配置C编译过程的。 # Sets the minimum CMake version required for this project. cmake_minimum_…

【解密 Kotlin 扩展函数】命名参数和默认值(十三)

导读大纲 1.0.1 命名参数1.0.2 默认参数值 上一节讲述如何自定义 joinToString 函数来代替集合的默认字符串表示 文末遗留下几个待优化问题–传送门 1.0.1 命名参数 我们要解决的第一个问题涉及函数调用的可读性 例如,请看下面的joinToString调用: joinToString(collection,&…

循环中用sleep

echo <pre>;for ($i0;$i<10000000;$i){var_dump($i);} 没有用sleep,快速消耗cpu和内存 使用sleep后效果 echo <pre>;for ($i0;$i<10000000;$i){var_dump($i);usleep(1000);//php 暂停0.001秒} 总结&#xff1a;sleep能释放资源(cpu和内存)&#xff0c;但是运…

2025校招内推-招联金融

【投递方式】 直接扫下方二维码&#xff0c;或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus&#xff0c;使用内推码 igcefb 投递&#xff09; 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…

LeetCode 面试经典150题 191.位1的个数

Java中的算术右移和逻辑右移的区别 题目&#xff1a;编写一个函数&#xff0c;获取一个正整数的二进制形式并返回其二进制表达式中设置位的个数&#xff08;也被称为汉明重量&#xff09;。 设置位的个数即二进制中1的个数。 思路&#xff1a;方法一&#xff1a;因为正数的原…

【永磁同步电机(PMSM)】 4. 同步旋转坐标系仿真模型

【永磁同步电机&#xff08;PMSM&#xff09;】 4. 同步旋转坐标系仿真模型 1. Clarke 变换的模型与仿真1.1 Clarke 变换1.2 Clarke 变换的仿真模型 2. Park 变换的模型与仿真2.1 Park 变换2.2 Park 变换的仿真模型 3. Simscape标准库变换模块3.1 abc to Alpha-Beta-Zero 模块3…

java反射基础知识

1.java的反射机制 Java 反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为 Java 语言的反射…

学生管理系统1.0版本

学生管理系统1.0版本有5个功能&#xff0c;即添加学生、删除学生、修改学生、查看全部学生、退出系统。 里面对添加重复学号、删除和修改不存在的学号等问题都有相应的解决办法。 代码区&#xff1a; Student.java package student;//快捷键Altinsert public class Student …

Machine Learning Specialization 学习笔记(4)

文章目录 前言一、模型评估训练集常规训练集线性回归逻辑回归 交叉验证集 偏差与方差正则化 学习曲线数据集的添加&#xff08;数据增强&#xff09;迁移学习精确率与召回率 二、决策树基本概念决策树的工作原理决策树的优点决策树的缺点决策树算法的变体决策树在Python中的实现…

Shell 脚本学习

Shell学习 Shell 脚本 Shell 是一个用 C 语言编写的程序&#xff0c;它是用户使用 Linux 的桥梁。Shell 既是一种命令语言&#xff0c;又是一种程序设计语言。 Shell 是指一种应用程序&#xff0c;这个应用程序提供了一个界面&#xff0c;用户通过这个界面访问操作系统内核的服…