当前位置: 首页 > news >正文

Python 数据分析与机器学习入门 (八):用 Scikit-Learn 跑通第一个机器学习模型

引言:初识 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.dtcms.com/a/263540.html

相关文章:

  • stm32达到什么程度叫精通?
  • 百度文心大模型4.5系列正式开源,开源会给百度带来什么?
  • docker-compose部署Nacos、Seata、MySQL
  • API接口安全-1:身份认证之传统Token VS JWT
  • 【甲方安全建设】SDL基线建设及审计评估
  • 从设计到开发一个小程序页面
  • JavaScript异步编程的五种方式
  • RocketMQ第五节(springboot整合MQ)
  • C语言main函数的原理:程序入口的奥秘
  • docker使用容器网络
  • 华为云Flexus+DeepSeek征文 | 对接华为云ModelArts Studio大模型:AI赋能投资理财分析与决策
  • 【软考高项论文】信息系统项目的人力资源管理
  • springboot中多个定时任务(@Scheduled)如何互不影响
  • P1967 [NOIP 2013 提高组] 货车运输
  • localStorage 和 sessionStorage
  • 编译原理——运行时存储组织与内存管理
  • Zookeeper安装使用教程
  • 回写缓存为何需要脏位?
  • SimLOD代码精读(二)建立Octree之Splitting Pass分裂阶段
  • 英国研究团队启动合成完整人类基因组的前沿项目
  • Java-包-访问修饰符-封装
  • Redis Lua 调试器(LDB)完全指南
  • 深度剖析 LNK 参数隐藏攻击 (ZDI-CAN-25373)
  • C++ Vector的使用(下)
  • 贪心算法在C++中的应用与实践
  • 基于动漫数据的可视化分析与推荐系统实现
  • Pyhton-EXCEL与Mysql数据对比
  • Monorepo+Pnpm+Turborepo
  • Vue Vue-route (1)
  • jvm的调优命令jstack打印堆栈信息阐述以及调优