引言:初识 Scikit-Learn

Scikit-learn 是 Python 机器学习领域的黄金标准库。它构建在 NumPy, SciPy 和 Matplotlib 之上,提供了大量用于分类、回归、聚类和降维等任务的算法。Scikit-learn 广受欢迎的原因在于其三大核心优势:

  • 一致的 API 设计: 几乎所有的算法都遵循相同的、简洁的接口模式,使得学习和应用新模型变得非常容易。
  • 丰富的算法选择: 涵盖了从经典的线性模型到强大的集成方法等绝大多数机器学习算法。
  • 强大的生态集成: 与 NumPy 数组和 Pandas DataFrame 无缝集成,是整个 Python 数据科学生态的核心组件之一。

本篇的目标是带领您走完使用 Scikit-learn 构建一个完整机器学习模型的全过程,让您亲身体验其简洁与强大,并为后续更复杂的项目建立信心。

Scikit-Learn 的核心 API 模式

Scikit-learn 的设计哲学是“一致性”。一旦你掌握了一个模型的使用方法,你就几乎掌握了所有模型的使用方法。这个通用的模式可以概括为以下几个步骤,我们称之为“Estimator API”:

  1. 选择模型类 (Choose a model)
    从 Scikit-learn 的模块中导入你需要的模型类。例如,from sklearn.tree import DecisionTreeClassifier

  2. 实例化模型 (Instantiate the model)
    创建该模型类的一个实例,并可以设置其超参数(Hyperparameters)。超参数是模型在学习前设置的参数,例如决策树的最大深度。

    # 超参数 max_depth=3 在实例化时设置
    model = DecisionTreeClassifier(max_depth=3)
    
  3. 拟合模型 (Fit the model)
    使用训练数据来训练模型。这一步通过调用模型的 .fit() 方法完成,传入训练集的特征 X_train 和标签 y_train

    model.fit(X_train, y_train)
    
  4. 预测 (Predict)
    使用训练好的模型对新数据(通常是测试集)进行预测。这一步通过调用 .predict() 方法完成,传入测试集的特征 X_test

    predictions = model.predict(X_test)
    
  5. 评估 (Evaluate)
    比较模型的预测结果和真实的测试集标签,以评估模型性能。这通常通过调用 .score() 方法或使用 sklearn.metrics 模块中的函数来完成。

    accuracy = model.score(X_test, y_test)
    

这个“导入-实例化-拟合-预测-评估”的流程是 Scikit-learn 的核心。掌握了这个模式,你就掌握了使用 Scikit-learn 的钥匙,可以轻松地在不同算法之间切换和实验。

你的第一个模型:决策树分类器实战

为了专注于 Scikit-learn 的工作流程,我们将使用一个简单且干净的内置数据集——鸢尾花(Iris)数据集。这是一个典型的多分类问题,我们的任务是根据四个特征(花萼长度、花萼宽度、花瓣长度、花瓣宽度)来预测鸢尾花的种类。

步骤 1: 导入库并加载数据

首先,我们导入所有需要的库和函数,并加载 Iris 数据集。load_iris() 函数返回一个类似字典的对象,其中 .data 属性是特征数据,.target 属性是标签数据。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score# 加载数据集
iris = load_iris()
X = iris.data   # 特征矩阵
y = iris.target # 标签向量

步骤 2: 划分训练集和测试集

遵循我们在上一篇文章中学到的原则,我们使用 train_test_split 函数将数据划分为训练集和测试集,通常将 30% 的数据作为测试集。random_state 参数用于确保每次运行代码时,随机划分的结果都是一样的,这对于结果复现很重要。

# 划分数据,70% 用于训练,30% 用于测试
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)print(f"训练集大小: {X_train.shape}, 测试集大小: {X_test.shape}")

步骤 3 & 4: 实例化并训练模型

现在我们应用 Scikit-learn 的核心 API 模式。我们选择 DecisionTreeClassifier 作为我们的模型,创建一个实例,然后用训练数据 .fit() 它。

# 1. 实例化决策树分类器
clf = DecisionTreeClassifier()# 2. 使用训练数据训练模型
clf.fit(X_train, y_train)

步骤 5: 进行预测

模型训练好之后,我们用它来对测试集 X_test 进行预测。

# 对测试集进行预测
y_pred = clf.predict(X_test)

步骤 6: 评估模型

最后一步是评估模型的性能。我们将模型预测的 y_pred 与真实的测试集标签 y_test 进行比较。对于分类问题,最直观的评估指标是准确率 (Accuracy),即正确预测的样本占总样本的比例。

# 计算并打印模型的准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型准确率: {accuracy:.2f}")

运行代码后,你可能会看到一个接近 1.00 的准确率,这表明我们的简单决策树模型在这个问题上表现得非常好。

结果解读

准确率为 1.00 意味着我们的模型在测试集上正确预测了所有样本的类别。虽然这是一个非常理想的结果,但在更复杂、更“脏”的真实世界数据集中,达到这样的性能是罕见的。

注意:准确率虽然直观,但并非总是最佳的评估指标,尤其是在处理类别不平衡的数据集时。在后续的项目中,我们将接触到更多评估指标,如精确率 (Precision)召回率 (Recall)F1 分数 (F1-score)

总结与展望

恭喜!您已经成功地使用 Scikit-learn 构建、训练并评估了您的第一个机器学习模型。您不仅完成了一个完整的流程,更重要的是,您掌握了 Scikit-learn 通用的 Estimator API,这为您探索更多高级算法铺平了道路。

现在,您已经具备了数据处理、可视化和基础建模的能力。是时候将这些技能整合起来,挑战一个更真实、更复杂的项目了。在下一篇文章中,我们将踏上泰坦尼克号的航程,运用目前所学的一切,预测这艘传奇巨轮上的生还者。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA芯片的配置方法

FPGA芯片的配置方法 文章目录 FPGA芯片的配置方法1. FPGA配置概述2. 主动配置模式3. 被动配置模式4. JTAG配置模式5. 总结 1. FPGA配置概述 当我们在PC机上的FPGA软件集成开发环境中完成我们的设计后,必须通过某种形式将其映射到FPGA芯片硬件中,这样FPG…

通过python+openCV实现对图片中箭头方向的判断

在项目中遇到一个需求,需要对图片中的箭头方向进行判断,本来是使用YOLOv8算法来实现的,但是发现YOLO的效果对箭头的识别效果很差,不管是分类算法还是检测算法,效果都不理想,因此试一试通过openCV对箭头方向进行判断,发现效果还可以。 下面附上完整的代码和原理。 文章目…

React 第六十六节Router中 StaticRouter使用详解及注意事项

前言 StaticRouter 是 React Router 为服务器端渲染(SSR)提供的专用路由组件。它允许在服务器环境中处理路由逻辑,确保服务器和客户端渲染结果一致。下面我将详细解释其用途、原理并提供完整的代码示例。 一、StaticRouter 的核心用途 服务…

嵌入模型与大语言模型的区别:从结构到应用的深度解析

嵌入模型与大语言模型的区别:从结构到应用的深度解析 在当今自然语言处理(NLP)技术蓬勃发展的背景下,嵌入模型(Embedding Model) 和 大语言模型(Large Language Model, LLM) 成为了…

el-date-picker赋值不成功

vue使用element 的时间组件el-date-picker赋值不成功,点击后才回显数据 解决: 组件未渲染完成之前赋值了,在onMounted函数内赋值,或者在确保组件已经渲染后赋值

深入浅出JavaScript中的私有变量与特权方法

深入浅出JavaScript中的私有变量与特权方法:封装的艺术 在JavaScript的开发实践中,私有变量和特权方法是实现数据封装和代码安全性的核心工具。它们不仅帮助我们隐藏敏感数据,还能通过闭包和作用域机制构建更健壮的代码结构。本文将从基础概…

ReactNative【实战系列教程】我的小红书 2 -- 快捷登录、手机号密码登录

最终效果 技术要点 用户协议 – 打开本地浏览器 点击后,直接打开本地浏览器浏览网页 // 最终需修改为 《用户协议》 的网址Linking.openURL("https://www.baidu.com");手机号输入框的 344 展示 onChangeText{(text: string) > {setPhone(formatPhone(…

【赵渝强老师】OceanBase数据库从零开始:Oracle模式

这里我们来介绍一下新上线的课程《OceanBase数据库从零开始:Oracle模式》,本门课程共11章。 视频讲解如下 【赵渝强老师】OceanBase从零开始(Oracle模式) 下面详细介绍一下每一章的主要内容: 第01章-OceanBase的体系…

Flink核心功能与运行流程详解

目录 一、背景 二、图构建 三、任务执行流程(yarn per-job模式) 3.1 Flink组件 3.2 执行流程 四、分布式调度 4.1 TM的slot 4.2 TM的slot的CPU与内存 4.3 节点的部署 4.4 节点的状态 4.5 节点部署流程 五、数据传输 5.1 内存分配 5.2 传输…

linux 操作docker的基本命令docker仓库

基本操作命令 docker run --nametest-host -itd centos7.6 /bin/bash 通过镜像创建容器 登录容器 [rootdocker101 ~]# docker exec -it test-host /bin/bash (exec是执行,i是交互式。t叫tty) 或者container id [rootdocker101 ~]# doc…

Netty学习路线图 - 第四阶段:Netty基础应用

Netty学习路线图 - 第四阶段:Netty基础应用 📚 Netty学习系列之四 本文是Netty学习路线的第四篇,我们将用大白话讲解Netty的基础应用,带你从理论走向实践。 写在前面 大家好!在前面三篇文章中,我们学习了J…

开源项目推荐:MCP Registry——管理MCP服务器的利器

探索MCP Registry:未来模型上下文协议的核心注册服务 随着人工智能技术的迅速发展,机器学习模型的管理和配置变得愈发重要。今天,我们将探索一个颇具潜力的开源项目——MCP Registry。这是一个由社区驱动的注册服务,专为模型上下文协议(Model Context Protocol,简称MCP)…

Spring Boot 统一功能处理:拦截器详解

一、拦截器核心概念 作用:拦截器是 Spring 框架提供的核心功能,用于在请求处理前后执行预定义逻辑,实现统一处理(如登录校验、日志记录等)。 核心方法: public class LoginInterceptor implements Handl…

在docker容器中安装docker服务,基于fuse-overlayfs进行overlay挂载,而不是vfs

1、docker 安装 正常安装docker软件,运行docker时,会提示:No docker socket 服务 2、启动docker服务(包含守护进程) systemctl start docker #dockerd &if ! ps aux | grep -v grep | grep -q "dockerd&qu…

虚拟机配置注意事项

一.VM大部分产品免费,遇到付费的要斟酌一下 在小编之前的文章中有简单下载VM的教程VMwareWorkstPro安装-CSDN博客 二.配置过程中的设置大部分都可以在配置完成后更改 例如下图设备所涉及到的,都是可以更改设置的 三.电脑关机时,要注意先把…

openGL+QT快速学习和入门案列

openGLQT快速学习和入门案列

深度学习03 人工神经网络ANN

什么是神经网络 人工神经网络( Artificial Neural Network, 简写为ANN)也简称为神经网络(NN),是一种模仿生物神经网络结构和功能的计算模型,人脑可以看做是一个生物神经网络,由众多的神经元连接而成.各个神经元传递复…

Linux中部署Jenkins保姆间教程

本文将以docker的方式,讲述如何部署Jenkins 一、拉取Jenkins镜像 1.1 最新版Jenkins介绍 最新版Jenkins地址:Download and deploy 当前最新版的如下图所示: 1.2 各版本支持的JDK版本 地址如下:Java Support Policy 如果你安装…

【软考中级·软件评测师】下午题·面向对象测试之架构考点全析:分层、分布式、微内核与事件驱动

一、分层架构:分层独立与质量特性的双向约束 分层架构通过“垂直分层(表示层→服务层→业务逻辑层→数据层)”实现职责隔离,是Web应用、企业级系统的主流架构模式。 1. 父类成员函数重测场景 子类继承父类时,若父类…

C++ 快速回顾(五)

C 快速回顾(五) 前言一、Dll和Lib的区别区别在开发中使用 二、封装并使用C库1.封装库2.使用库 三、封装并使用C库1.封装库2.使用库 前言 用于快速回顾之前遗漏或者补充C知识 一、Dll和Lib的区别 静态库(LIB)在编译时链接&#…