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

Python机器学习数据清洗到特征工程策略

Python机器学习数据清洗到特征工程策略

目录

  1. ✨ 数据清洗:处理缺失值与异常值的策略
  2. 🔄 特征选择:筛选与数据目标高度相关的特征
  3. 🛠 特征工程:数据转换与生成新特征的多样化方法
  4. 📊 类别型变量的数值化:数值编码与独热编码的实践
  5. 🚀 数据标准化与归一化:确保特征数据的一致性
  6. 💡 时间序列数据的预处理:日期特征提取与滞后特征生成

1. ✨ 数据清洗:处理缺失值与异常值的策略

在机器学习任务中,数据预处理的首要步骤是数据清洗。数据清洗的目的是识别和处理缺失值、重复数据以及异常值,以确保数据的完整性与质量。未经过清洗的原始数据通常存在各种不完美,这些问题若不处理,将直接影响模型的训练效果与预测结果。常见的数据清洗步骤包括处理缺失值、重复值和异常值。

处理缺失值

缺失值是数据预处理中最常见的问题之一。缺失值的处理方式有很多种,包括删除缺失值所在的行、用统计量(如均值、中位数等)填充,或使用插值法、建模填充等高级方法。以下是几种处理缺失值的方式:

  • 删除缺失值:当缺失值的比例较小或该特征对模型无关紧要时,可以选择直接删除这些数据行。Pandas库中的dropna()函数可以方便地执行这一操作:

    import pandas as pd# 创建包含缺失值的DataFrame
    data = {'Age': [25, 30, None, 35], 'Salary': [50000, None, 60000, 65000]}
    df = pd.DataFrame(data)# 删除包含缺失值的行
    df_cleaned = df.dropna()
    print(df_cleaned)
    
  • 填充缺失值:如果删除数据行会导致样本量不足,可以采用均值、中位数或众数来填充缺失值。Pandas库的fillna()函数可以直接进行填充操作:

    # 用列的均值填充缺失值
    df_filled = df.fillna(df.mean())
    print(df_filled)
    
  • 插值法填充:对于时间序列数据或有序数据,可以采用插值法来填充缺失值,以保证数据的连续性和合理性。通过插值法,可以根据数据的趋势进行预测填充:

    # 使用插值法填充缺失值
    df_interpolated = df.interpolate()
    print(df_interpolated)
    

处理重复值

重复值通常会降低模型的泛化能力,使模型对某些特定模式产生偏倚。因此,必须检测并处理重复数据。在Pandas中,可以使用duplicated()drop_duplicates()方法来检测和删除重复值。

# 检查重复值
duplicates = df.duplicated()# 删除重复值
df_no_duplicates = df.drop_duplicates()
print(df_no_duplicates)

处理异常值

异常值(outliers)是指偏离数据整体分布规律的值,它们可能对模型产生极大的负面影响。在处理异常值时,可以采用统计分析法(如箱线图法)或基于算法的检测方法(如局部异常因子)。一种常见的处理方法是将异常值替换为特定的统计值,或者通过过滤策略删除异常值。

import numpy as np# 创建包含异常值的数据
data_with_outliers = {'Age': [22, 25, 30, 120, 28], 'Salary': [50000, 60000, 55000, 90000, 65000]}
df_outliers = pd.DataFrame(data_with_outliers)# 使用Z-score方法识别异常值
df_outliers['Age_Zscore'] = (df_outliers['Age'] - df_outliers['Age'].mean()) / df_outliers['Age'].std()
df_outliers = df_outliers[(df_outliers['Age_Zscore'].abs() <= 3)]  # 保留Z-score在3以内的数据
print(df_outliers)

清洗后的数据更加可靠且具备更好的模型适应性。通过合理处理缺失值、重复值与异常值,可以大大提高机器学习模型的训练效果。


2. 🔄 特征选择:筛选与数据目标高度相关的特征

特征选择是机器学习中提高模型性能和可解释性的重要步骤。特征选择的目的是筛选出对目标变量最有帮助的特征,同时删除不相关或冗余的特征,以减少数据噪音、提高模型效率。

过滤法

过滤法通过统计指标(如相关系数、卡方检验、互信息等)来评估每个特征与目标变量之间的关联性。相关性高的特征保留,相关性低的特征则删除。这种方法简单高效,适用于大规模数据集。

from sklearn.feature_selection import SelectKBest, f_classif
from sklearn.datasets import load_iris# 加载Iris数据集
X, y = load_iris(return_X_y=True)# 选择与目标变量最相关的两个特征
selector = SelectKBest(score_func=f_classif, k=2)
X_new = selector.fit_transform(X, y)
print(X_new)

包装法

包装法则通过反复训练模型来评估特征的组合效果。递归特征消除(Recursive Feature Elimination, RFE)是一种常见的包装法,通过递归地移除最不重要的特征,最终选出最优特征子集。

from sklearn.feature_selection import RFE
from sklearn.ensemble import RandomForestClassifier# 使用随机森林作为基模型
model = RandomForestClassifier()# 实例化递归特征消除工具
rfe = RFE(estimator=model, n_features_to_select=2)# 进行特征选择
X_rfe = rfe.fit_transform(X, y)
print(X_rfe)

嵌入法

嵌入法则结合了模型训练和特征选择过程,直接通过模型的权重或特征重要性来决定特征的去留。例如,决策树和随机森林等模型本身就能够评估特征的重要性。

# 使用随机森林评估特征重要性
model.fit(X, y)
importances = model.feature_importances_# 打印特征的重要性
for i, importance in enumerate(importances):print(f"Feature {i}: Importance {importance}")

特征选择不仅能够提高模型的性能,还可以减少过拟合风险,使模型的泛化能力更强。通过合理选择特征,可以有效提高机器学习模型的精度和效率。


3. 🛠 特征工程:数据转换与生成新特征的多样化方法

特征工程是一项非常关键的任务,涉及对原始数据进行处理、转化甚至生成新特征。高质量的特征工程可以极大提升模型的表现。特征工程包括对连续变量的处理、离散化,以及生成派生特征等。

数值特征的处理

数值型特征往往需要进行适当的变换,以便更好地用于机器学习模型中。常见的操作包括对数变换、平方根变换等,以解决特征的分布不均衡问题。

import numpy as np# 对数变换
df['log_Age'] = np.log(df['Age'] + 1)# 平方根变换
df['sqrt_Age'] = np.sqrt(df['Age'])

离散化

对于连续变量,可以将其离散化为多个区间,从而帮助模型更好地捕捉变量的分布特征。cut()函数可以将数据分箱处理:

# 使用Pandas对连续变量进行分箱
df['Age_binned'] = pd.cut(df['Age'], bins=[0, 20, 40, 60, 80], labels=['Young', 'Adult', 'Middle-aged', 'Senior'])
print(df)

派生特征

派生特征是从已有数据中创建的新特征。例如,在时间序列数据中,可以提取出月份、季度等时间特征,这样能够增强模型对时间模式的捕捉能力。

# 提取日期特征
df['date'] = pd.to_datetime(df['date'])
df['month'] = df['date'].dt.month
df['quarter'] = df['date'].dt.quarter

特征工程通过合理转换与生成特征,能够帮助模型更好地学习数据中的模式,提高预测效果。


相关文章:

Python机器学习数据清洗到特征工程策略

Python机器学习数据清洗到特征工程策略 目录 ✨ 数据清洗&#xff1a;处理缺失值与异常值的策略&#x1f504; 特征选择&#xff1a;筛选与数据目标高度相关的特征&#x1f6e0; 特征工程&#xff1a;数据转换与生成新特征的多样化方法&#x1f4ca; 类别型变量的数值化&…...

多线程-进阶(2)CountDownLatchConcurrentHashMapSemaphore

目的; JUC(java.util.concurrent) 的常⻅类 接着上一节课到 1.信号量 Semaphore 信号量, ⽤来表⽰ "可⽤资源的个数". 本质上就是⼀个计数器。 理解信号量 可以把信号量想象成是停⻋场的展⽰牌: 当前有⻋位 100 个. 表⽰有 100 个可⽤资源. 当有⻋开进去的时候,…...

密码管理器KeePass的安装及使用

文章目录 软件下载安装汉化新建数据库创建\移动\修改 群组添加/修改/删除/移动 记录展示、搜索、锁定单独使用keepass生成密码的功能AES-256的密钥长度为256位&#xff0c;为啥可以设置超过32个字符的密钥&#xff1f; 软件下载 安装 分别解压&#xff1a;KeePass-2.53.1.zip&…...

星海智算:【萤火遛AI-Stable-Diffusion】无需部署一键启动

部署流程 1、注册算力云平台&#xff1a;星海智算 https://gpu.spacehpc.com/ 2、创建实例&#xff0c;镜像请依次点击&#xff1a;“镜像市场”->“更换”->“AI绘画”->“萤火遛AI-Stable Diffusion”。 程序首次启动可能需要几分钟&#xff0c;待实例显示“运行…...

JS生成器的特殊用法:委托yield*

yield 的基本用法 yield 用于在生成器函数中暂停函数执行&#xff0c;并返回一个值给外部调用者。当生成器再次被调用时&#xff0c;会从暂停的地方继续执行。 示例&#xff1a; function* simpleGenerator() {yield 1;yield 2;yield 3; }const gen simpleGenerator();cons…...

【CuPy报错】NVRTC_ERROR_COMPILATION (6)找不到 ‘vector_types.h‘

cupy安装不要再使用pip install cupy了&#xff0c; 已经替换成基于版本安装了pip install cupy-cuda12x&#xff0c;详见cupy官网。 安装完成后&#xff0c;在import cupy之后报错&#xff0c;找不到 ‘vector_types.h’: CompileException: /home/zoe/venv/lib/python3.10/…...

机器学习:知识蒸馏(Knowledge Distillation,KD)

知识蒸馏&#xff08;Knowledge Distillation&#xff0c;KD&#xff09;作为深度学习领域中的一种模型压缩技术&#xff0c;主要用于将大规模、复杂的神经网络模型&#xff08;即教师模型&#xff09;压缩为较小的、轻量化的模型&#xff08;即学生模型&#xff09;。在实际应…...

【C++入门篇 - 3】:从C到C++第二篇

文章目录 从C到C第二篇new和delete命名空间命名空间的访问 cin和coutstring的基本使用 从C到C第二篇 new和delete 在C中用来向系统申请堆区的内存空间 New的作用相当于C语言中的malloc Delete的作用相当于C语言中的free 注意&#xff1a;在C语言中&#xff0c;如果内存不够…...

YOLOv8模型改进 第七讲 一种新颖的注意力机制 Outlook Attention

随着目标检测技术的不断发展&#xff0c;YOLOv8 作为最新一代的目标检测模型&#xff0c;已经在多个基准数据集上展现了其卓越的性能。然而&#xff0c;在复杂场景中&#xff0c;如何进一步提升模型的检测精度和鲁棒性依然是一个重要挑战。本文将探讨将 Outlook Attention 机制…...

C#多线程基本使用和探讨

线程是并发编程的基础概念之一。在现代应用程序中&#xff0c;我们通常需要执行多个任务并行处理&#xff0c;以提高性能。C# 提供了多种并发编程工具&#xff0c;如Thread、Task、异步编程和Parallel等。 Thread 类 Thread 类是最基本的线程实现方法。使用Thread类&#xff0…...

PHP DateTime基础用法

PHP DateTime 的用法详解 一、引言 在开发 PHP 应用程序时&#xff0c;处理日期和时间是一个至关重要的任务。PHP 提供了强大的日期和时间处理功能&#xff0c;其中 DateTime 类是最常用的工具之一。DateTime 类提供了丰富的方法来创建、格式化、计算和比较日期时间&#xff…...

一次Fegin CPU占用过高导致的事故

记录一下 一次应用事故分析、排查、处理 背景介绍 9号上午收到CPU告警&#xff0c;同时业务反馈依赖该服务的上游服务接口响应耗时太长 应用告警-CPU使用率 告警变更 【WARNING】项目XXX,集群qd-aliyun,分区bbbb-prod,应用customer,实例customer-6fb6448688-m47jz, POD实例CP…...

【Go初阶】两万字快速入门Go语言

初见golang语法 package mainimport "fmt"func main() {/* 简单的程序 万能的hello world */fmt.Println("Hello Go")} 第一行代码package main定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包&#xff0c;如&#xff1a;package main…...

【React】使用 react hooks 需要遵守的原则

1&#xff09;只能在顶层调用Hooks 这是指你不能在循环、条件语句或嵌套函数中调用Hooks。确保每次组件渲染时&#xff0c;Hooks的调用顺序保持一致。因此&#xff0c;你应该始终在React函数组件的最顶层调用Hooks。 React依赖于Hooks的调用顺序。如果这些调用在不同的渲染中顺…...

Python编程:创意爱心表白代码集

在寻找一种特别的方式来表达你的爱意吗&#xff1f;使用Python编程&#xff0c;你可以创造出独一无二的爱心图案&#xff0c;为你的表白增添一份特别的浪漫。这里为你精选了六种不同风格的爱心表白代码&#xff0c;让你的创意和情感通过代码展现出来。 话不多说&#xff0c;咱…...

腾讯IM SDK:TUIKit发送多张图片

一、问题描述 在使用腾讯IM DEMO&#xff08;https://github.com/TencentCloud/chat-uikit-vue.git&#xff09;时发现其只支持发送一张图片&#xff1a; 二、解决方案 // src\TUIKit\components\TUIChat\message-input-toolbar\image-upload\index.vue<inputref"inp…...

《本地部署开源大模型》在Ubuntu 22.04系统下ChatGLM3-6B高效微调实战

在Ubuntu 22.04系统下ChatGLM3-6B高效微调实战 无论是在单机单卡&#xff08;一台机器上只有一块GPU&#xff09;还是单机多卡&#xff08;一台机器上有多块GPU&#xff09;的硬件配置上启动ChatGLM3-6B模型&#xff0c;其前置环境配置和项目文件是相同的。如果大家对配置过程还…...

Python 脚本来自动发送每日电子邮件报告

安装必要的库 我们将使用 smtplib 发送邮件&#xff0c;以及 email.mime 来创建电子邮件内容。另外&#xff0c;为了让脚本自动定时运行&#xff0c;可以使用操作系统的计划任务工具&#xff08;如 Linux 的 cron 或 Windows 的 Task Scheduler&#xff09;。 创建邮件内容 使…...

大语言模型与ChatGPT:深入探索与应用

文章目录 1. 前言2. 大语言模型的概述2.1 什么是大语言模型&#xff1f;2.2 Transformer架构的核心2.3 预训练与微调 3. ChatGPT的架构与技术背景3.1 GPT模型的演进3.2 ChatGPT的工作原理 4. ChatGPT的实际应用4.1 日常对话助手4.2 内容生成与写作4.3 编程辅助4.4 教育与学习辅…...

【从零开始的LeetCode-算法】3164.优质数对的总数 II

给你两个整数数组 nums1 和 nums2&#xff0c;长度分别为 n 和 m。同时给你一个正整数 k。 如果 nums1[i] 可以被 nums2[j] * k 整除&#xff0c;则称数对 (i, j) 为 优质数对&#xff08;0 < i < n - 1, 0 < j < m - 1&#xff09;。 返回 优质数对 的总数。 示…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

3.3.1_1 检错编码(奇偶校验码)

从这节课开始&#xff0c;我们会探讨数据链路层的差错控制功能&#xff0c;差错控制功能的主要目标是要发现并且解决一个帧内部的位错误&#xff0c;我们需要使用特殊的编码技术去发现帧内部的位错误&#xff0c;当我们发现位错误之后&#xff0c;通常来说有两种解决方案。第一…...

前端导出带有合并单元格的列表

// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

什么是EULA和DPA

文章目录 EULA&#xff08;End User License Agreement&#xff09;DPA&#xff08;Data Protection Agreement&#xff09;一、定义与背景二、核心内容三、法律效力与责任四、实际应用与意义 EULA&#xff08;End User License Agreement&#xff09; 定义&#xff1a; EULA即…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...