Scikit-learn使用指南

news2025/4/2 17:16:18

1. Scikit-learn 简介

  • 定义
    Scikit-learn(简称 sklearn)是基于 Python 的开源机器学习库,提供了一系列算法和工具,用于数据挖掘、数据预处理、分类、回归、聚类、模型评估等任务。
  • 特点
    • 基于 NumPySciPyMatplotlib 开发,与科学计算库无缝集成。
    • 算法接口统一,学习曲线低,适合快速实现机器学习任务。
    • 包含丰富的内置数据集(如鸢尾花、葡萄酒数据集)和常用算法(如决策树、随机森林、SVM、K-means)。
  • 适用场景
    • 研究与开发中的快速原型设计。
    • 生产环境中需要稳定、易维护的机器学习模型。

2. 安装与环境配置

安装命令
pip install scikit-learn

注意

  • 若需特定版本(如 0.24),可指定版本:
    pip install scikit-learn==0.24.0
    
  • 推荐使用 虚拟环境(如 virtualenvconda)管理依赖,避免版本冲突。
虚拟环境示例(macOS/Linux)
# 创建虚拟环境
python -m venv ml_env
source ml_env/bin/activate  # 激活环境

# 安装依赖
pip install scikit-learn numpy pandas

3. 核心功能与常用模块

(1) 数据集加载

Scikit-learn 提供了多个内置数据集,直接调用即可使用:

from sklearn.datasets import load_iris, load_wine, make_classification

# 加载鸢尾花数据集
iris = load_iris()
X_iris = iris.data  # 特征
y_iris = iris.target  # 标签

# 生成合成数据(分类)
X_syn, y_syn = make_classification(n_samples=1000, n_features=20, random_state=42)
(2) 数据预处理
  • 标准化/归一化
    from sklearn.preprocessing import StandardScaler, MinMaxScaler
    
    scaler = StandardScaler()
    X_scaled = scaler.fit_transform(X)
    
  • 缺失值处理
    from sklearn.impute import SimpleImputer
    
    imputer = SimpleImputer(strategy='mean')
    X_imputed = imputer.fit_transform(X)
    
(3) 模型训练与评估
示例:决策树分类器(鸢尾花数据集)
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, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 初始化模型并训练
clf = DecisionTreeClassifier()
clf.fit(X_train, y_train)

# 预测与评估
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print(f"准确率: {accuracy:.2f}")
(4) 超参数调优
  • 网格搜索(Grid Search)

    from sklearn.model_selection import GridSearchCV
    
    param_grid = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 5]}
    grid_search = GridSearchCV(DecisionTreeClassifier(), param_grid, cv=5)
    grid_search.fit(X_train, y_train)
    print("最佳参数:", grid_search.best_params_)
    
  • 随机搜索(Random Search)

    from sklearn.model_selection import RandomizedSearchCV
    
    param_dist = {'max_depth': [3, 5, 7], 'min_samples_split': [2, 5, 10]}
    random_search = RandomizedSearchCV(DecisionTreeClassifier(), param_distributions=param_dist, n_iter=10, cv=5)
    random_search.fit(X_train, y_train)
    

4. 版本更新与新特性(以0.24版本为例)

  1. Halving Search(渐进式搜索)

    • 适用于大规模搜索空间或训练缓慢的模型(如 HalvingGridSearchCVHalvingRandomSearchCV)。
    • 需要先启用实验功能:
      from sklearn.experimental import enable_halving_search_cv
      from sklearn.model_selection import HalvingGridSearchCV
      
  2. ICE 图(个体条件期望)

    • 可视化特征与预测结果的关系,支持 plot_partial_dependencykind='individual' 参数。
  3. 分类特征支持

    • HistGradientBoostingClassifierHistGradientBoostingRegressor 新增 categorical_features 参数,支持分类特征的高效处理。
    • 示例:
      from sklearn.ensemble import HistGradientBoostingClassifier
      model = HistGradientBoostingClassifier(categorical_features=[True, False])
      

5. 常见问题与解决方案

(1) 数据格式不兼容
  • 问题:混合使用 H2OScikit-learn 时需转换数据格式。
  • 解决
    # H2OFrame 转 Pandas DataFrame
    import h2o
    df_pandas = h2o_frame.as_data_frame()
    
    # Pandas DataFrame 转 H2OFrame
    h2o_frame = h2o.H2OFrame(df_pandas)
    
(2) 版本冲突
  • 问题:不同项目依赖不同版本的 Scikit-learn。
  • 解决:使用虚拟环境隔离依赖,确保每个项目使用独立的 Python 环境。
(3) 缺失值处理
  • 问题:模型训练时遇到 NaN 值。
  • 解决
    from sklearn.impute import SimpleImputer
    imputer = SimpleImputer(strategy='mean')
    X_imputed = imputer.fit_transform(X)
    

6. 推荐学习资源

  1. 官方文档
    Scikit-learn 官网
  2. 书籍
    • 《Scikit-Learn机器学习核心技术与实践》(谭贞军)
    • 《Python机器学习基础教程》(Sebastian Raschka)
  3. 实践示例
    • 使用鸢尾花、葡萄酒等内置数据集快速上手分类任务。
    • 尝试 GridSearchCVRandomizedSearchCV 进行超参数调优。

7. 代码示例:完整机器学习流程

# 完整流程:数据加载→预处理→模型训练→评估
from sklearn.datasets import load_wine
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import classification_report

# 加载数据
wine = load_wine()
X, y = wine.data, wine.target

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义Pipeline(标准化 + 随机森林)
pipeline = Pipeline([
    ('scaler', StandardScaler()),
    ('classifier', RandomForestClassifier(n_estimators=100))
])

# 训练模型
pipeline.fit(X_train, y_train)

# 评估
y_pred = pipeline.predict(X_test)
print("分类报告:\n", classification_report(y_test, y_pred))

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

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

相关文章

uniapp微信小程序封装navbar组件

一、 最终效果 二、实现了功能 1、nav左侧返回icon支持自定义点击返回事件(默认返回上一步) 2、nav左侧支持既显示返回又显示返回首页icon 3、nav左侧只显示返回icon 4、nav左侧只显示返回首页icon 5、nav左侧自定义left插槽 6、nav中间支持title命名 7…

系统思考与心智模式

我们的生命为什么越来越长?因为有了疫苗,有了药物。可这些是怎么来的?是因为我们发现了细菌的存在。但在很久以前,医生、助产士甚至都不洗手——不是他们不负责,而是根本不知道“细菌”这回事。那细菌是怎么被发现的&a…

数据库--数据库设计

目录: 1.数据库设计和数据模型 2.概念结构设计:E-R模型 3.逻辑结构设计:从E-R图到关系设计 4.数据库规范化设计理论 5.数据库规范化设计实现 1.数据库设计和数据模型 数据库设计会影响数据库自身和上层应用的性能。 一个好的数据库设计可以提…

[Mac]利用hexo-theme-fluid美化个人博客

接上文,使用Fluid美化个人博客 文章目录 一、安装hexo-theme-fluid安装依赖指定主题创建「关于页」效果展示 二、修改个性化配置1. 修改网站设置2.修改文章路径显示3.体验分类和标签4.左上角博客名称修改5.修改背景图片6.修改关于界面 欢迎大家参观 一、安装hexo-theme-fluid 参…

黑盒测试的场景法(能对项目业务进行设计测试点)

定义: 通过运用场景来对系统的功能点或业务流程的描述,设计用例遍历场景,验证软件系统功能的正确性从而提高测试效果的一种方法。 场景法一般包含基本流和备用流。 基本流:软件功能的正确流程,通常一个业务只存在一个基本流且基本流有一个…

通过Anaconda Prompt激活某个虚拟环境并安装第三方库

打开 Anaconda Prompt 在Windows中,可以通过开始菜单搜索 Anaconda Prompt 来打开。(红色箭头指向的地方。) 激活虚拟环境 输入以下命令来激活您的虚拟环境(假设虚拟环境名称为 myenv): conda activate…

全长约8.3公里!宁波象山港跨海大桥南中塔柱云端合龙

快科技3月31日消息,据报道,由中国交建二航局承建的宁波象山港跨海大桥顺利完成南中塔柱合龙施工,标志着这一重大交通工程取得阶段性突破。 这座连接宁波鄞州区与象山县的跨海通道全长8.3公里,其标志性的南主塔采用创新"钻石…

使用 2 端口探头测量 40 uOhm(2000 安培)PDN 的挑战 – 需要多少 CMRR?

部分 1 / 3 本文是 3 部分系列的第一部分: 第 2 部分 - 测量结果! 第 3 部分 - 使用另一台 VNA 的测量结果 介绍 我们大多数人都知道 2 端口测量中的接地回路。我们大多数人也都知道,我们需要引入接地回路隔离器来纠正错误。如果没有&…

蓝桥杯——统计子矩阵

解法&#xff1a;二维前缀和双指针 代码&#xff1a; #include <iostream> using namespace std; typedef long long ll; ll prefix[505][505], a[250010]; int main() {ll n, m, k, ans 0; cin >> n >> m >> k;for(int i 1; i < n; i)for(int …

吾爱破解安卓逆向学习笔记(4p)

学习目标&#xff0c;了解安卓四大组件&#xff0c;activity生命周期&#xff0c;同时了解去除部分广告和更新提示。 广告类型 1.启动页广告 2.更新广告 3.横幅广告 安卓四大组件 组件描述Activity(活动)在应用中的一个Activity可以用来表示一个界面&#xff0c;意思可以…

stm32第十天外部中断和NVIC讲解

一&#xff1a;外部中断基础知识 1.STM32外部中断框架 中断的概念&#xff1a;在主程序运行过程中&#xff0c;出现了特点的中断触发条件&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行 1&…

26考研——线性表_ 线性表的链式表示_单链表(2)

408答疑 文章目录 三、 线性表的链式表示单链表概念单链表的结构头结点 单链表上基本操作的实现单链表的初始化带头结点和不带头结点的初始化操作注意 求表长操作按序号查找结点按值查找表结点插入结点操作扩展&#xff1a;对某一结点进行前插操作 删除结点操作扩展&#xff1a…

MATLAB 控制系统设计与仿真 - 31

二次型最优控制 考虑到系统如果以状态空间方程的形式给出&#xff0c;其性能指标为&#xff1a; 其中F,Q,R是有设计者事先选定。线性二次最优控制问题简称LQ(Linear Quadractic)问题,就是寻找一个控制,使得系统沿着由指定初态出发的相应轨迹,其性能指标J取得最小值。 LQ问题分…

蓝桥杯15届JAVA_A组

将所有1x1转化为2x2 即1x1的方块➗4 然后计算平方数 记得-1 2 import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.io.PrintWriter;public class Main{static BufferedReader in new BufferedReader(new In…

deepseek v3 0324实现工作流编辑器

HTML 工作流编辑器 以下是一个简单的工作流编辑器的HTML实现&#xff0c;包含基本的拖拽节点、连接线和可视化编辑功能&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewp…

20250331-智谱-沉思

背景 收到GLM沉思的消息&#xff0c;立马试用下。感觉真的太及时了。 &#xff08;背景&#xff1a;为了客户的需求“AI辅助写作”实验了2款开源workflow&#xff0c;2款在线workflow&#xff0c;好几款多智能体框架后&#xff0c;心中无底之际。。。&#xff09; 1. GLM(开启…

Java EE(17)——网络原理——IP数据报结构IP协议解析(简述)

一.IP数据报结构 (1)版本&#xff1a;指明协议的版本&#xff0c;IPv4就是4&#xff0c;IPv6就是6 (2)首部长度&#xff1a;单位是4字节&#xff0c;表示IP报头的长度范围是20~60字节 (3)8位区分服务&#xff1a;实际上只有4位TOS有效&#xff0c;分别是最小延时&#xff0c;最…

26考研|高等代数:线性空间

线性空间这一章在整个高等代数学习过程中是非常精华的部分&#xff0c;在学习这一章的过程中会有部分的概念较为抽象&#xff0c;一定要抓紧抓牢对于概念的理解&#xff0c;反复阅读与感受&#xff0c;同时也可以根据已知的解析几何中介绍的二维空间或者三维空间进行类推比较&a…

【Linux】进程间通信(IPC)-- 无名管道、命名管道

IPC机制 实现进程间通信 在多个进程间传输数据或共享信息的机制。 数据交换&#xff0c;共享资源&#xff0c;进程同步&#xff0c;消息传递。 IPC实现原理&#xff1a;通信进程能够访问相同的内存区域。 方法&#xff1a; 管道&#xff1a;无名管道pipe、命名管道FIFO S…

每日一题-力扣-2278. 字母在字符串中的百分比 0331

字母在字符串中的百分比求解方案 | 力扣 2278 题解 问题描述 给定一个字符串 s 和一个字母 letter&#xff0c;我们需要计算 letter 在 s 中出现的百分比&#xff0c;并将结果向下取整。例如&#xff0c;如果字符串是 "foobar"&#xff0c;字母是 "o"&…