详细介绍:深入理解 Scikit-learn:Python 中最常用的机器学习库

news/2025/10/26 22:10:49/文章来源:https://www.cnblogs.com/tlnshuju/p/19167496

详细介绍:深入理解 Scikit-learn:Python 中最常用的机器学习库

2025-10-26 22:06  tlnshuju  阅读(0)  评论(0)    收藏  举报

1. Scikit-learn 简介

Scikit-learn 是 Python 中最广泛使用的机器学习库之一。它涵盖了从数据预处理、模型选择、评估到结果可视化等各个环节。无论你是机器学习新手还是经验丰富的数据科学家,Scikit-learn 都能提供一个简洁、高效的开发环境。

Scikit-learn 是基于 NumPy、SciPy 和 matplotlib 等科学计算库构建的,目的是为 Python 提供一个高效、简便的机器学习工具。它的设计思想是易用、可扩展、与其他工具兼容,并且可以轻松地与数据分析和深度学习库(如 pandas、TensorFlow 和 PyTorch)配合使用。

Scikit-learn 的主要特点

2. 安装与配置

Scikit-learn 可以通过 pipconda 安装。以下是常见的安装方法:

pip install scikit-learn

或者如果你使用 Anaconda,可以通过以下命令安装:

conda install scikit-learn

3. Scikit-learn 核心概念

在使用 Scikit-learn 时,有几个重要的概念需要理解:

3.1 Estimator(估计器)

Scikit-learn 中的所有学习算法(如分类器、回归模型等)都是 估计器。每个估计器都实现了 fit()predict() 方法:

3.2 Transformer(转换器)

除了估计器外,Scikit-learn 还包含许多转换器(Transformer),例如标准化、归一化等,它们常用于数据预处理。转换器实现了 fit()transform() 方法,用来将输入数据转化为某种形式(例如:将数据标准化)。

3.3 Pipeline(管道)

管道(Pipeline) 是一个非常重要的工具,它允许你将多个步骤(如数据预处理和模型训练)串联在一起。通过管道,整个机器学习流程可以更加模块化和高效。Scikit-learn 提供了 Pipeline 类,可以用来构建数据预处理、特征工程和模型训练的流水线。

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LogisticRegression
pipeline = Pipeline([
('scaler', StandardScaler()),
('classifier', LogisticRegression())
])
# 使用管道进行训练
pipeline.fit(X_train, y_train)

4. Scikit-learn 使用示例

4.1 加载数据集

Scikit-learn 提供了几个内置数据集,可以用于快速开始机器学习实验。以下是加载鸢尾花(Iris)数据集的代码:

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
# 加载鸢尾花数据集
data = load_iris()
X = data.data
y = data.target
# 切分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

4.2 训练一个模型

使用 K 最近邻(KNN) 算法进行分类:

from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import accuracy_score
# 初始化 KNN 分类器
model = KNeighborsClassifier(n_neighbors=3)
# 训练模型
model.fit(X_train, y_train)
# 进行预测
y_pred = model.predict(X_test)
# 计算准确率
print(f"Accuracy: {accuracy_score(y_test, y_pred):.2f}")

4.3 模型评估

Scikit-learn 提供了多种评估模型性能的工具。例如,混淆矩阵和分类报告可以帮助我们评估分类模型的表现:

from sklearn.metrics import confusion_matrix, classification_report
# 混淆矩阵
print(confusion_matrix(y_test, y_pred))
# 分类报告
print(classification_report(y_test, y_pred))

4.4 交叉验证

交叉验证是评估模型的一种方法,它通过将数据分成多个子集进行训练和测试,来避免模型过拟合。Scikit-learn 提供了 cross_val_score 函数来简化交叉验证的使用:

from sklearn.model_selection import cross_val_score
# 使用 5 折交叉验证评估模型
scores = cross_val_score(model, X, y, cv=5)
# 输出交叉验证的结果
print(f"Cross-validation scores: {scores}")
print(f"Mean accuracy: {scores.mean():.2f}")

5. 模型调优与超参数选择

5.1 网格搜索

网格搜索(Grid Search) 是一种常见的超参数调优方法,Scikit-learn 提供了 GridSearchCV 类来帮助你调优模型的超参数。例如,使用随机森林模型并通过网格搜索来寻找最佳的超参数配置:

from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
# 创建随机森林模型
rf = RandomForestClassifier()
# 设置超参数搜索空间
param_grid = {
'n_estimators': [100, 200],
'max_depth': [10, 20, None]
}
# 创建网格搜索对象
grid_search = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, n_jobs=-1)
# 进行网格搜索
grid_search.fit(X_train, y_train)
# 输出最佳参数和最佳得分
print("Best parameters:", grid_search.best_params_)
print("Best score:", grid_search.best_score_)

5.2 随机搜索

除了网格搜索,Scikit-learn 还提供了 随机搜索(RandomizedSearchCV),这种方法比网格搜索更加高效,特别是在搜索空间非常大的时候。

from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import randint
# 设置超参数搜索空间
param_dist = {
'n_estimators': randint(100, 1000),
'max_depth': [None, 10, 20, 30],
'min_samples_split': randint(2, 20)
}
# 创建随机搜索对象
random_search = RandomizedSearchCV(RandomForestClassifier(), param_distributions=param_dist, n_iter=100, cv=5)
# 进行随机搜索
random_search.fit(X_train, y_train)
# 输出最佳参数和得分
print("Best parameters:", random_search.best_params_)
print("Best score:", random_search.best_score_)

6. 总结

Scikit-learn 是一个功能强大且易于使用的机器学习库,它为从数据预处理到模型训练和评估的整个机器学习工作流提供了简便的工具。无论你是刚开始学习机器学习的初学者,还是经验丰富的数据科学家,Scikit-learn 都能帮助你高效地解决实际问题。凭借其丰富的功能和简洁的 API,它已成为机器学习任务的标配工具。如果你对机器学习感兴趣,学习如何使用 Scikit-learn 是一个非常好的开始。

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

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

相关文章

[AI] Gemini-Cli 安装和使用教程

[AI] Gemini-Cli 安装和使用教程$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");Gemini生成(2025年10月26日20:58:40)gemini-cli 是一个命令行界面工具,它…

主动求索:大学生应掌控学习与时间

读完这几篇文章我深有感触,因为大学没有高中管得严,手机的自由度高了起来,像是要把以前的全补回来,基本整天都在和手机接触,在上课时即使手机没有任何消息,放在手边,也总想去打开看那么一眼再关上。当我开始管控…

2025.10.25 测试 广二 + 梦熊

2025.10.25 测试 广二 + 梦熊上午广二 1. P3293 [SCOI2016] 美味 考虑 + x 就是循环位移 然后直接二分每一位可不可以为 1 ,用主席树维护区间个数,用当前区间减去 x 得到真实区间 复杂度 \(O(n \log V \log n)\) 所以…

CSP-S模拟392025多校冲刺CSP模拟赛8

前言: 嘻嘻,虽迟但到(其实没啥意义)的改题 T1:最小生成树(tree) 据说养鸡大户蛙蛙说原始数据暴力可过请看显然不是我的码风的code #include<bits/stdc++.h>//骇死我力假了inf版线段树!!! using names…

关于莫队算法

莫队算法,优雅的暴力~ 先来一道例题 P3901 数列找不同引入:如何解决?\(O\)(\(n^2\)) 每次读入询问区间\(l至r\)暴力判定!如何优化? 已经知道区间l至r,可以\(O(1)\)扩展至区间l+1至r~询问无序,如何解决步子过大,…

Serilog 日志库的简介

本文主要介绍了 Serilog 的几个核心特点,并简单列了下适用场景,供参考。〇、前言 相较于 log4net,Serilog 则是新项目的首选,现代化、高性能、易用,是 .NET 日志的未来方向。如需了解 log4net 详见往期博文:http…

2025东莞环评公司/环评手续/环评报告/环评验收推荐:广东三洁环保,专业高效,合规保障

2025东莞环评公司/环评手续/环评报告/环评验收推荐:专业高效,合规保障 当前东莞环评领域的技术挑战与数据现状 随着东莞市制造业的持续发展和环保政策的日益严格,环评行业面临着前所未有的技术挑战。根据相关统计数…

word文档使用技巧----一键插入题注

这个学期某课程word文档报告需要图片有题注才给较高的分数,一张张图片打题注非常麻烦,网上搜到用脚本插入题注的方法,修改了一下,方便下次直接复制。 在word的开发工具选择Visual Basic-->插入-->模块-->…

再见 懦弱者的泪滴 善恶判断舍弃 永别 那廉价的正义

test28 我用什么才能留住你liuzhuni 我当然知道正解符合人类直觉,但是任意错解难道不符合很多人的直觉吗,没有大样例好难啊好难啊。注意到最优解一定可以是某种田忌赛马,不妨枚举赢的断点,来做一个暴力的对拍。 首…

2025年东莞环评公司权威推荐榜:环评手续/环评报告/环评验收一站式服务,专业高效合规首选厂家

2025年东莞环评公司权威推荐榜:环评手续/环评报告/环评验收一站式服务,专业高效合规首选厂家 行业背景分析 随着国家环保政策的持续收紧和企业环保意识的提升,环评服务市场正迎来前所未有的发展机遇。在制造业重镇东…

【CI130x-离在线】FreeRTOS的信号量

CI130x ALG SDK库中的audio_play_os_state_t audio_play_semaphore_give(audio_play_os_sem_t xSemaphore)函数是对 FreeRTOS 内置函数 xSemaphoreGive()的简单封装/*** @brief 发送信号量** @param xSemaphore 信号量…

践行 “学思行”,解锁学习新境界

践行 “学思行”,解锁学习新境界—— 读三篇学习类文章有感 在阅读了《大学生上课为什么一定要认真听讲?》《“做中学(Learning By Doing)” 之乒乓球刻意训练一年总结》《优秀的教学方法 --- 做教练与做中学》这三…

Windows Archive

MSDN and TechNetMSDN and TechNet LibrariesWe started the migration of MSDN Library and TechNet Library to docs.microsoft.com in late 2017, and completed the migration this year.MSDN and TechNet ForumsW…

变盲从为探索:专注听课

在阅读《大学生为何必须重视课堂专注?》及后续两篇关于“学用结合”的分享后,我如醍醐灌顶,深刻领悟到真正的成长,绝非被动地接受知识灌输,而是一场需要主动发力的修行——既需要高效的课堂输入,也需要扎实的实践…

以听为基,以做为翼

以听为基,以做为翼,共赴学习成长之途 阅读了三篇关于学习方法的文章后,我对大学阶段的学习有了更深刻的认知,它们从不同维度为我指明了学习的方向,让我获益匪浅。 在《大学生上课为什么一定要认真听讲?》一文中,…

[java 虚拟线程 ]

package com.hugh.java17.v19;import java.time.Duration; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.stream.IntStream;import org.slf4j.Logger; imp…

【ArcMap】按属性表复制字段并上移一段距离

将属性表中 LXMC 为 名称2 的字段复制并上移20米,在py编辑器中插入以下代码:# -*- coding: utf-8 -*- import arcpy import os import sys# 重新加载sys并设置默认编码 reload(sys) sys.setdefaultencoding(utf-8)# …

WPF 关闭程序 Aforge摄像头关闭不了 问题

public static Bitmap StaticBitmap = new Bitmap(100,100); public void Cam_NewFrame(object sender, NewFrameEventArgs eventArgs){lock (StaticHelper.StaticBitmap){using (Bitmap b = (Bitmap)eventArgs.Frame)…

CF1060

题目 C(Hard Version) 因为制造两个2的倍数只需至多两次操作,因此按价格排序后,选择方案只有\(1+i\),\(i\) 和 \(1\) 三种,直接判断即可。\(\Omicron(n\ln{n})\) D 按树的深度进行奇偶分类,从叶节点开始删除,设当前奇…