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

news2024/11/18 22:56:04

逻辑回归(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 正则化,因为它可以自动选择出有用的特征(即对垃圾邮件的预测有用的单词)。
  • 通过这种组合,你可以让模型在大规模数据集上表现得更好,同时还能筛选出关键特征。

我们使用一份在线的癌症数据来进行分析,下面是数据的info()信息和PPT 里面的字段会有差异,但是不影响。

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 np

def 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.coloradmin.cn/o/2166560.html

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

相关文章

C嘎嘎入门篇:类和对象(1)

前言&#xff1a; 小编在之前讲述了C的部分入门基础&#xff0c;读者朋友一定要掌握好那些&#xff0c;因为C的学习和C有点不同&#xff0c;C的知识都是比较连贯的&#xff0c;所以我们学好了前面才可以学习后面的内容&#xff0c;本篇文章小编将会讲述C真正的入门篇&#xff1…

爬虫逆向学习(九):记录一个集cookie、请求参数、请求体、响应文本加密的站点反爬

此分享只用于学习用途&#xff0c;不作商业用途&#xff0c;若有冒犯&#xff0c;请联系处理 反爬前置信息 站点&#xff1a;aHR0cHM6Ly96d2Z3LmNxLmdvdi5jbi9pY2l0eS9pY2l0eS9lbmdpbmVlcmluZy9uYXZpZ2F0aW9u 接口&#xff1a;/icity/api-v2/cq.app.icity.engineering.Engine…

vue3组件通信(组合式API)

vue3组件通信&#xff08;组合式API&#xff09; vue3组件通信&#xff0c;采用组合式API。选项式API&#xff0c;参看官网 Vue3组件通信和Vue2的区别&#xff1a; 移出事件总线&#xff0c;使用mitt代替。 vuex换成了pinia。把.sync优化到了v-model里面了。把$listeners所…

fo-dicom开源库,深入理解项目的模块化设计

前言 DICOM&#xff08;Digital Imaging and Communications in Medicine&#xff09;是医学图像和相关信息的国际标准&#xff0c;广泛应用于医学影像领域。FO-DICOM是一个开源的DICOM库&#xff0c;提供了丰富的功能和模块&#xff0c;用于处理DICOM数据、实现DICOM网络通信…

16.面试算法-树的层次遍历与相关面试题

1. 树的层次遍历与相关面试题 1.1 层次遍历简介 广度优先在面试里出现的频率非常高&#xff0c;但是相对简单&#xff0c;题目也比较少&#xff0c;常见的题目也就七八道。 广度优先又叫层次遍历&#xff0c;基本过程如下&#xff1a; 层次遍历就是从根节点开始&#xff0c…

【STM32】 TCP/IP通信协议(1)

一、前言 TCP/IP是干啥的&#xff1f;它跟SPI、IIC、CAN有什么区别&#xff1f;它如何实现stm32的通讯&#xff1f;如何去配置&#xff1f;为了搞懂这些问题&#xff0c;查询资料可解决如下疑问&#xff1a; 1.为什么要用以太网通信? 以太网(Ethernet) 是指遵守 IEEE 802.3 …

【mbti课堂】计算机系统的六个层次与指令系统

课件&#xff1a;可以从 6 个层次分析和看待计算机系统的基本组成。 指令系统层处在硬件系统和软 件系统之间&#xff0c; 是硬、 软件之间的接口部分&#xff0c; 对两部分都有重要影响。 硬件系统用于实现每条指令的功能&#xff0c; 解决指令之间的衔接关系&#xff1b; 软件…

Golang | Leetcode Golang题解之第437题路径总和III

题目&#xff1a; 题解&#xff1a; func pathSum(root *TreeNode, targetSum int) (ans int) {preSum : map[int64]int{0: 1}var dfs func(*TreeNode, int64)dfs func(node *TreeNode, curr int64) {if node nil {return}curr int64(node.Val)ans preSum[curr-int64(targ…

复杂网络分析_NetworkX

一&#xff1a;NetworkX简介 NetworkX库是一个用于创建、操作复杂网络的结构、动态和功能的Python库。在经济网络中&#xff0c;它可以帮助分析各种经济实体&#xff08;如公司、个人、国家&#xff09;之间的相互关系和互动模式。以下是一些NetworkX在经济网络分析中的实际应…

ArrayList源码实现(一)

ArrayList源码实现&#xff08;一&#xff09; 1. ArrayList的大小是如何自动增加的&#xff1f; 初始化 在构造函数中&#xff0c;可以设定列表的初始值大小&#xff0c;如果没有的话默认使用&#xff0c;提供的静态数据 public ArrayList(int initialCapacity) {if (initi…

Milvus - 架构设计详解

Milvus 是一个专为在大规模密集向量数据集上进行相似性搜索而设计的开源向量数据库系统。其架构建立在流行的向量搜索库之上&#xff0c;如 Faiss、HNSW、DiskANN 和 SCANN&#xff0c;能够处理数百万、数十亿甚至数万亿的向量数据。为了全面了解 Milvus 架构&#xff0c;我们首…

计网作业3

1.交换机是依据 MAC地址 来转发数据包的 2.数据链路层 负责将数据封装成帧&#xff0c;在相邻节点间进行传输 数据链路层负责以下任务&#xff1a; 封装数据 物理地址寻址&#xff1a;使用MAC地址进行寻址&#xff0c;确保数据能够在局域网中正确传输到目标节点 介质访问控…

正确理解C++的友元friend

C的友元&#xff08;friend&#xff09;是个很重要的概念&#xff0c;该如何正确理解呢&#xff1f;本文将以友元函数为例讲解一下&#xff0c;仔细看。 友元的特性&#xff1a; 1、使用friend修饰的成员函数可以访问其他成员的私有成员(private)和保护成员(protected)。 2、…

快速上手基于Vue的动画引擎vueuse/motion

在现代前端开发中&#xff0c;动画可以极大地提升用户体验和界面美感。VueUse Motion 是一个强大的动画库&#xff0c;旨在为 Vue 应用提供简单易用的动画功能。那我们就来看看它在Vue项目中是如何应用的&#xff0c;快速手上为主&#xff0c;官网地址&#x1f447; vueuse/mo…

DevExpress WinForms中文教程:Data Grid - 如何添加或删除行?

本教程介绍DevExpress WinForm的Data Grid控件UI元素和API&#xff0c;它们使您和最终用户能够添加或删除数据行。您将首选学习如何启用内置的数据导航器&#xff0c;然后学习如何使用Microsoft Outlook启发的New Item行添加新记录。最后教程将向您展示基本的API&#xff0c;它…

全景可视化特点+可视化功能实现

全景可视化介绍 全景可视化是一种利用现代计算机技术、图像处理技术和虚拟现实技术&#xff0c;将现实世界中的场景以360度全景的方式呈现在用户面前的技术。它不仅能够提供水平方向360度的全景视野&#xff0c;还能通过垂直方向的视角变化&#xff0c;实现上下视角的调节&…

MVC core 、MVC framework addTagHelper、htmlhelper 、Environment

mvc core 标签助手 TagHelper 只有core 支持 htmlhelper mvc、mvc core 都支持 Environment <environment include"Development">*开发环境,使用不压缩的文件&#xff0c;排除压缩的文件*<link rel"stylesheet" asp-href-include"css/*"…

Linux相关概念和重要知识点(8)(操作系统、进程的概念)

1.操作系统&#xff08;OS&#xff09; &#xff08;1&#xff09;基本结构的认识 任何计算机系统都包含一个基本的程序集合&#xff0c;用于实现计算机最基本最底层的操作&#xff0c;这个软件称为操作系统。操作系统大部分使用C语言编写&#xff0c;少量使用汇编语言。 从…

[极客大挑战 2019]RCE ME1

<?php error_reporting(0); if(isset($_GET[code])){$code$_GET[code];if(strlen($code)>40){die("This is too Long.");}if(preg_match("/[A-Za-z0-9]/",$code)){die("NO.");}eval($code); } else{highlight_file(__FILE__); }// ?>…

【React】组件通信

1. 组件通信 组件间的数据传递 1.1 父传子 步骤&#xff1a; 父组件传递数据——在子组件标签上绑定属性子组件接收数据——子组件通过props参数接收数据 function Son(props) {return <div>{props.value}</div> }function App() {const value 父组件传给子…