[机器学习]sklearn入门指南(1)

简介

scikit-learn(简称sklearn)是一个开源的Python机器学习库,它提供了简单而高效的工具用于数据挖掘和数据分析,并且拥有一个活跃的开发社区。它建立在NumPy、SciPy和matplotlib这些科学计算库之上,旨在提供一致且可复用的API。
中文社区

安装

pip install scikit-learn

模型训练与预测

步骤

  1. 导入必要的库:首先需要导入sklearn中你需要用到的模块,以及其他可能需要的库,如numpy、pandas等。

    import pandas as pd
    from sklearn.ensemble import RandomForestRegressor
    from sklearn.metrics import mean_absolute_error
    from sklearn.model_selection import train_test_split
    
  2. 加载数据:从数据路径中加载你的训练数据集

    iowa_file_path = '../input/train.csv'
    home_data = pd.read_csv(iowa_file_path)
    
  3. 划分数据集:将训练数据集划分为训练集和验证集。

    y = home_data.SalePricefeatures = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
    X = home_data[features]train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)
    
  4. 选择模型:选择一个适合你问题的模型,比如决策树、随机森林、支持向量机等。

    rf_model = RandomForestRegressor(random_state=1)
    
  5. 训练模型:使用训练集数据训练模型。

    rf_model.fit(train_X, train_y)
    
  6. 模型预测和评估:使用验证集数据进行预测,然后评估模型的性能。

    rf_val_predictions = rf_model.predict(val_X)
    rf_val_mae = mean_absolute_error(rf_val_predictions, val_y)
    
  7. 模型优化:根据模型评估的结果,调整模型参数或选择不同的模型进行优化。
    这里通过遍历优化max_leaf_nodes

    def cal_mae(mln,train_X,val_X,train_y,val_y):rf_model = RandomForestRegressor(random_state=1, max_leaf_nodes = mln)rf_model.fit(train_X, train_y)rf_val_predictions = rf_model.predict(val_X)rf_val_mae = mean_absolute_error(rf_val_predictions, val_y)return rf_val_mae for i in [5,10,25,50,100,150,200]:print(cal_mae(i,train_X,val_X,train_y,val_y))
    
  8. 预测新数据:使用筛选出来的较优参数用所有训练集训练一个好的模型,对测试数据进行预测。

    rf_model_on_full_data = RandomForestRegressor(random_state=1)rf_model_on_full_data.fit(X,y)test_data_path = '../input/test.csv'
    test_data = pd.read_csv(test_data_path)
    test_X = test_data[features]test_preds = rf_model_on_full_data.predict(test_X)
    

完整代码

import pandas as pd
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
from sklearn.model_selection import train_test_splitiowa_file_path = '../input/train.csv'
home_data = pd.read_csv(iowa_file_path)y = home_data.SalePrice
features = ['LotArea', 'YearBuilt', '1stFlrSF', '2ndFlrSF', 'FullBath', 'BedroomAbvGr', 'TotRmsAbvGrd']
X = home_data[features]
train_X, val_X, train_y, val_y = train_test_split(X, y, random_state=1)rf_model = RandomForestRegressor(random_state=1)
rf_model.fit(train_X, train_y)
rf_val_predictions = rf_model.predict(val_X)
rf_val_mae = mean_absolute_error(rf_val_predictions, val_y)print("Validation MAE for Random Forest Model: {:,.0f}".format(rf_val_mae))rf_model_on_full_data = RandomForestRegressor(random_state=1)
rf_model_on_full_data.fit(X,y)test_data_path = '../input/test.csv'
test_data = pd.read_csv(test_data_path)
test_X = test_data[features]test_preds = rf_model_on_full_data.predict(test_X)

结果保存

to_csv函数可以把DataFrame结果保存成csv文件

output = pd.DataFrame({'Id': test_data.Id,'SalePrice': test_preds})
output.to_csv('submission.csv', index=False)

模型保存与读取

持久化模型:将训练好的模型保存到文件中,以便以后使用。

  • joblib是一个用于Python的库,它提供了一种高效的序列化方式,特别适合于存储和加载大型NumPy数组、Pandas数据帧(DataFrames)以及机器学习模型等Python对象。
  • joblib特别优化了对大数据的处理,使用内存映射文件(memory-mapped files)来处理大型数据集,这使得它在处理大型数据时比Python的pickle模块更加高效。
from joblib import dump, load
dump(best_model, 'model.joblib')

加载模型:从文件中加载模型,用于后续的预测或评估。

loaded_model = load('model.joblib')

缺失值处理

在选择处理缺失值的方法时,重要的是要理解数据缺失的原因,以及缺失值对模型可能产生的影响。有时候,结合多种方法,或者对不同的处理策略进行实验,可以帮助找到最佳的解决方案。

删除含有缺失值的列

这种方法是最简单的处理缺失值的方式,即直接删除任何含有缺失值的列。

优点:操作简单,可以快速减少数据集中的缺失值问题。

缺点:如果被删除的列中大部分值都是完整的,那么模型就会失去很多有用信息。

  • 极端情况下,比如一个数据集有10,000行,其中一列只缺失了一个值,这种方法会将整个列删除,这可能会导致信息的大量丢失。
    在这里插入图片描述
m = []
for col in X_train.columns:if X_train[col].isnull().sum() != 0:m.append(col)
print(m)reduced_X_train = X_train.drop(m,axis = 1)

插值

插补是一种更为复杂的处理缺失值的方法,它通过填充缺失值来处理。

  • 例如,我们可以将每列的缺失值替换为该列的平均值。

优点:虽然插补的值在大多数情况下不会完全准确,但通常比直接删除整个列能得到更准确的模型结果。
缺点:插补基于某些假设(如均值、中位数等),这些假设可能不总是成立。且某些插补方法(如KNN)可能需要较高的计算成本。

插补可以基于多种不同的策略,如均值、中位数、众数或者使用更复杂的算法如K-最近邻(KNN)来估计缺失值。
在这里插入图片描述
SimpleImputer是用于缺失值插补的转换器。

class sklearn.impute.SimpleImputer(*, missing_values=nan, strategy='mean', fill_value=None, verbose=0, copy=True, add_indicator=False)

SimpleImputer提供了两个主要的方法:fit(X[, y])和fit_transform(X[, y])。

  1. fit(X[, y])
    • 拟合插补:fit方法用于在数据集X上学习缺失值的插补策略。对于数值型数据,这通常意味着计算所有非缺失值的均值、中位数或众数;对于分类数据,则可能是最频繁出现的类别。
    • 不转换数据:fit方法不会改变或转换数据,它仅仅学习插补的参数(如均值、中位数等)。
    • 返回值:fit方法返回SimpleImputer对象本身,这个对象已经根据X的数据更新了其内部状态,存储了用于插补的统计值。
  2. fit_transform(X[, y])
    • 拟合并转换数据:fit_transform方法首先执行fit操作,学习缺失值的插补策略,然后立即应用这个策略来转换数据集X,填充所有的缺失值。
    • 返回转换后的数据:与fit方法不同,fit_transform方法返回转换后的数据集,其中所有的缺失值已经被插补。
from sklearn.impute import SimpleImputerimputer = SimpleImputer() 
imputed_X_train = pd.DataFrame(imputer.fit_transform(X_train))
imputed_X_valid = pd.DataFrame(imputer.transform(X_valid))# 只用fit一次# 插补会删除列名称,需要重新补上
imputed_X_train.columns = X_train.columns
imputed_X_valid.columns = X_valid.columns

插补的扩展

插补是处理缺失值的标准方法,通常效果不错。但是,插补的值可能会系统地高于或低于它们实际的值(这些值在数据集中没有被收集)。或者,含有缺失值的行在其他方面可能是独特的。在这种情况下,模型如果能够考虑哪些值最初是缺失的,将会做出更好的预测。

这种方法在传统的插补基础上进行了扩展。

  • 首先像以前一样对缺失值进行插补。
  • 然后对于原始数据集中有缺失值的每一列,添加一个新列来显示是否插补。
  • 这个新列用来表明原始数据中哪些位置是缺失的,而哪些是后来插补的。

这种方法的优点在于,它不仅保留了数据的完整性,还提供了额外的信息,这可能会帮助模型捕捉到缺失值背后的模式或趋势。
在这里插入图片描述

imputer = SimpleImputer()
imputed_X_train = pd.DataFrame(imputer.fit_transform(X_train))# 添加一个新列来标记插补的位置
for column in X_train.columns:# 检查原始数据集中哪些值是缺失的missing_mask = X_train[column].isnull()# 在插补后的DataFrame中添加一个新列来标记这些缺失值imputed_X_train [f'{column}_missing'] = missing_mask.astype(int)

来自Learn Tutorial Intermediate Machine Learning

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

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

相关文章

贪心算法(三)

目录 一、k次取反后最大化的数组和 二、优势洗牌 三、最长回文串 四、增减字符串匹配 一、k次取反后最大化的数组和 k次取反后最大化的数组和 贪心策略&#xff1a; 解题代码&#xff1a; class Solution { public:int largestSumAfterKNegations(vector<int>&am…

文本的AIGC率检测原理

背景 你可能在学生群里或者视频中看过这样的消息&#xff1a;“我们学校要求论文AI率不能超过30%&#xff01;”、“你们学校查AI率吗&#xff1f;”之类的&#xff0c;这些消息到底是真是假&#xff1f; 随着人工智能的快速发展和广泛应用&#xff0c;不论是工作中还是学生学…

Linux -- 从抢票逻辑理解线程互斥

目录 抢票逻辑代码&#xff1a; thread.hpp thread.cc 运行结果&#xff1a; 为什么票会抢为负数&#xff1f; 概念前言 临界资源 临界区 原子性 数据不一致 为什么数据不一致&#xff1f; 互斥 概念 pthread_mutex_init&#xff08;初始化互斥锁&#xff09; p…

浅谈目前我开发的前端项目用到的设计模式

浅谈目前我开发的前端项目用到的设计模式 前言 设计模式很多&#xff0c;看到一个需求&#xff0c;项目&#xff0c;我们去开发的时候&#xff0c;肯定是做一个整体的设计进行开发&#xff0c;而在这次我项目中&#xff0c;我也做了一个整体的设计&#xff0c;为什么要设计&a…

ubuntu笔记

1.系统下载与虚拟机设置 系统下载https://cn.ubuntu.comhttps://releases.ubuntu.com 虚拟机设置: 桥接模式 在桥接模式下, 虚拟出来的操作系统就像是局域网中的一台独立的主机, 它可以访问网内任何一台机器主机网卡和虚拟网卡的IP地址处于同一个网段, 子网掩码、网关、DNS等…

开放世界目标检测 Grounding DINO

开放世界目标检测 Grounding DINO flyfish Grounding DINO 是一种开创性的开放集对象检测器&#xff0c;它通过结合基于Transformer的检测器DINO与基于文本描述的预训练技术&#xff0c;实现了可以根据人类输入&#xff08;如类别名称或指代表达&#xff09;检测任意对象的功…

【基础篇】1. JasperSoft Studio编辑器与报表属性介绍

编辑器介绍 Jaspersoft Studio有一个多选项卡编辑器&#xff0c;其中包括三个标签&#xff1a;设计&#xff0c;源代码和预览。 Design&#xff1a;报表设计页面&#xff0c;可以图形化拖拉组件设计报表&#xff0c;打开报表文件的主页面Source&#xff1a;源代码页码&#xff…

电子应用设计方案71:智能客厅窗帘系统设计

智能客厅窗帘系统设计 一、引言 智能客厅窗帘系统为用户提供了更加便捷、舒适和个性化的窗帘控制方式&#xff0c;提升了家居的智能化水平和生活品质。 二、系统概述 1. 系统目标 - 实现客厅窗帘的自动开合控制&#xff0c;可通过多种方式操作。 - 能够根据时间、光照强度和用…

免杀对抗—Behinder魔改流量特征去除

前言 在现实的攻防中&#xff0c;往往webshell要比主机后门要用得多&#xff0c;因为我们首先要突破的目标是网站嘛&#xff0c;而且waf也往往会更注重webshell的检测。webshell的免杀分为两个&#xff0c;一是静态查杀&#xff0c;二是流量查杀。静态查杀不用多说了&#xff…

高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容

预览 第1步&#xff1a;理解基本结构和导入必要的库 # 1. 首先导入需要的库 import os # 用于处理文件和路径 import cv2 # 用于图像处理 import numpy as np # 用于数值计算 from paddleocr import PaddleOCR # 用于文字识别 from pdf2image import convert_from_path #…

如何查看pad的console输出,以便我们更好的进行调试,查看并了解实际可能的问题。

1、以下是baidu AI回复&#xff1a; 2、说明&#xff1a; 1&#xff09;如果小伙伴们经常做android开发的话&#xff0c;这个不陌生&#xff0c;因为调试都是要开启这个开发者模式。并启用USB调试模式。 2&#xff09;需要连上USB线&#xff0c;有的时候会忘记&#xff0c;然…

GitHub 桌面版配置 |可视化界面进行上传到远程仓库 | gitLab 配置【把密码存在本地服务器】

&#x1f947; 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 &#x1f389; 声明: 作为全网 AI 领域 干货最多的博主之一&#xff0c;❤️ 不负光阴不负卿 ❤️ 文章目录 桌面版安装包下载clone 仓库操作如下GitLab 配置不再重复输入账户和密码的两个方…

智慧社区电子商务系统:实现社区资源的数字化管理

2.1vue技术 Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套用于构建用户界面的渐进式JavaScript框架。 [5] 与其它大型框架不同的是&#xff0c;Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层&#xff0c;不仅易于上手&#xff0c;还便于与第三方库或既有项…

【软件项目管理】-期末突击

区别常见的项目和活动 项目和活动的区别&#xff1a; 定义&#xff1a; 项目&#xff1a;为创造独特成果而进行的临时性工作。活动&#xff1a;日常运营中的重复性工作。 目标&#xff1a; 项目&#xff1a;实现特定成果&#xff0c;一次性。活动&#xff1a;维持日常运作&am…

【C++】ceil 和 floor 函数的实现与分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;ceil 和 floor 函数的基础介绍1. ceil 函数定义与功能示例代码输出结果功能分析使用场景 2. floor 函数定义与功能示例代码输出结果功能分析使用场景 &#x1f4af;自行实现…

合合信息:探索视觉内容安全新前沿

2024年12月13日-15日&#xff0c;中国图象图形学学会在杭州召开。大会期间&#xff0c;来自合合信息的图像算法研发总监郭丰俊进行了主题为“视觉内容安全技术的前沿进展与应用”的演讲&#xff0c;介绍了视觉内容安全问题&#xff0c;并总结了现今的技术发展&#xff0c;对我很…

【JetPack】Navigation知识点总结

Navigation的主要元素&#xff1a; 1、Navigation Graph&#xff1a; 一种新的XML资源文件,包含应用程序所有的页面&#xff0c;以及页面间的关系。 <?xml version"1.0" encoding"utf-8"?> <navigation xmlns:android"http://schemas.a…

教师如何打造专属私密成绩查询系统?

期末的校园&#xff0c;被一种特殊的氛围所笼罩。老师们如同辛勤的工匠&#xff0c;精心打磨着每一个教学环节。复习阶段&#xff0c;他们在知识的宝库中精挑细选&#xff0c;把一学期的重点内容一一梳理&#xff0c;为学生们打造出系统的复习框架。课堂上&#xff0c;他们激情…

专栏二十三:Python读取和分析空间数据的经验杂谈

部分情况同样适合单细胞的分析结果 读取数据阶段 1.错误的library_id 包括sc和sq的两种读取方式&#xff0c;大同小异。 理论上有h5数据和spatial文件夹就可以读取成功&#xff0c;并且自动赋予和文件名一样的library_id&#xff0c;例如 slide sq.read.visium("/ho…

如何在谷歌浏览器中启用语音搜索

想象一下&#xff0c;你正在拥挤的地铁上&#xff0c;双手都拿着沉重的购物袋&#xff0c;突然你想搜索附近的咖啡馆。此时如果你能通过语音而不是打字来进行搜索&#xff0c;那将多么的便利&#xff01;在谷歌浏览器中&#xff0c;启用语音搜索功能就是这么简单而高效&#xf…