常用数据预处理与特征选择方法总结记录

news2024/11/18 17:21:44

在很多机器学习或者是深度学习建模之前,对于数据的处理尤为重要,选择合适的数据预处理方法和特征构建算法对于后续模型的结果有着很大的影响作用,这里的主要目的就是想记录总结汇总常用到的处理方法,学习备忘!

数据清洗:
数据清洗是指对数据进行处理,以去除或修正缺失值、异常值和重复值等问题。
    处理缺失值:
    可以通过删除包含缺失值的样本、使用均值或中位数填充缺失值,或使用插值方法(如线性插值或多重插补)来填充缺失值。
    优点:
    简单易行,不会引入额外的特征。
    缺点:
    可能会导致数据丢失或引入不准确性,填充方法可能不适用于所有情况。
    
    处理异常值:
    可以通过统计方法(如3σ原则)或使用离群点检测算法(如箱型图或基于距离的方法)来识别和处理异常值。
    优点:
    可以排除异常值对模型造成的干扰。
    缺点:
    可能会误删有用的信息,需要专业领域知识来判断异常值是否真实存在。
    
    处理重复值:
    可以通过比较样本之间的特征值,找出并删除重复的记录。
    优点:
    避免了重复数据对模型训练和评估的影响。
    缺点:
    删除重复值可能会减少数据集的大小,但在某些情况下可能没有太大影响。

Demo代码实现如下所示:

import numpy as np
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import StandardScaler, MinMaxScaler
from sklearn.decomposition import PCA
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor
from sklearn.datasets import make_classification


"""
使用make_classification生成了一个具有缺失值、异常值和重复值的示例数据集。然后,分别使用SimpleImputer进行缺失值填充、使用IsolationForest进行异常值检测和移除、使用np.unique进行重复值去除
"""


# 创建一个示例数据集
X, y = make_classification(n_samples=100, n_features=5, n_informative=3, n_classes=2, random_state=42)

# 处理缺失值
missing_values = np.isnan(X)
imputer = SimpleImputer(strategy='mean')  # 使用均值填充缺失值,也可以使用'median'或'most_frequent'
X_filled = imputer.fit_transform(X)

# 处理异常值
outlier_detector = IsolationForest(contamination=0.1)  # 设置异常值比例为10%
outlier_labels = outlier_detector.fit_predict(X_filled)
X_outliers_removed = X_filled[outlier_labels == 1]

# 处理重复值
_, unique_indices = np.unique(X_outliers_removed, axis=0, return_index=True)
X_duplicates_removed = X_outliers_removed[np.sort(unique_indices)]


    
特征缩放:
特征缩放是对特征进行归一化或标准化,以使其具有相同的尺度。
    归一化:
    将特征值缩放到0和1之间,常用方法包括最小-最大规范化。
    优点:
    保留了特征的分布形状,适用于对特征值范围敏感的算法(如K近邻)。
    缺点:
    可能受极端值的影响,对离群点不稳定。
    
    标准化:
    将特征值转换为均值为0、方差为1的正态分布,常用方法包括Z-score标准化。
    优点:
    更稳定,不受极端值的影响。
    缺点:
    可能会改变特征的分布形状。

Demo代码实现如下所示:

import numpy as np
from sklearn.preprocessing import MinMaxScaler, StandardScaler
from sklearn.datasets import make_classification


"""
使用make_classification生成了一个示例数据集。然后,分别使用MinMaxScaler进行归一化和使用StandardScaler进行标准化。

在归一化中,MinMaxScaler将特征值缩放到0和1之间,通过选择最小值和最大值来确定缩放范围。优点是保留了特征的分布形状,适用于对特征值范围敏感的算法(如K近邻)。缺点是可能受极端值的影响,对离群点不稳定。

在标准化中,StandardScaler将特征值转换为均值为0、方差为1的正态分布。优点是更稳定,不受极端值的影响。缺点是可能会改变特征的分布形状。
"""

# 创建一个示例数据集
X, y = make_classification(n_samples=100, n_features=5, n_informative=3, n_classes=2, random_state=42)

# 归一化
minmax_scaler = MinMaxScaler()
X_normalized = minmax_scaler.fit_transform(X)

# 标准化
standard_scaler = StandardScaler()
X_standardized = standard_scaler.fit_transform(X)


数据平衡:
数据平衡处理是针对不平衡的分类问题,通过过采样、欠采样或合成新样本等方法来调整类别之间的样本数量差异。
    过采样:
    增加少数类样本的数量,常用方法有随机复制、SMOTE(合成少数类过采样技术)等。
    优点:
    可以提高模型对少数类的识别能力。
    缺点:
    可能导致过拟合,并引入重复信息。
    
    欠采样:
    减少多数类样本的数量,常用方法有随机删除、Tomek Links等。
    优点:
    可以提高模型对多数类的泛化能力。
    缺点:
    可能会导致丢失多数类的重要信息。
    
    合成新样本:
    通过利用少数类和多数类之间的关系来合成新的样本,例如SMOTE。
    优点:
    保留了原始数据分布的特征,避免了信息丢失。
    缺点:
    可能引入合成样本的噪声。

Demo代码实现如下所示:

import numpy as np
from sklearn.datasets import make_classification
from sklearn.utils import resample
from imblearn.over_sampling import SMOTE

"""
使用make_classification生成了一个示例的不平衡数据集。然后,使用resample函数进行过采样和欠采样。对于过采样,我们随机复制了少数类样本,使其数量与多数类相同。对于欠采样,我们随机从多数类样本中删除了一些样本,使其数量与少数类相同。最后,使用SMOTE进行合成新样本,根据少数类和多数类之间的关系生成新的样本。
"""

# 创建一个示例不平衡的数据集
X, y = make_classification(n_samples=1000, n_features=10, weights=[0.9, 0.1], random_state=42)

# 过采样
X_oversampled, y_oversampled = resample(X[y == 1], y[y == 1], replace=True,
                                        n_samples=X[y == 0].shape[0], random_state=42)
X_balanced_oversampled = np.concatenate((X[y == 0], X_oversampled))
y_balanced_oversampled = np.concatenate((y[y == 0], y_oversampled))

# 欠采样
X_undersampled, y_undersampled = resample(X[y == 0], y[y == 0], replace=False,
                                          n_samples=X[y == 1].shape[0], random_state=42)
X_balanced_undersampled = np.concatenate((X[y == 1], X_undersampled))
y_balanced_undersampled = np.concatenate((y[y == 1], y_undersampled))

# 合成新样本
smote = SMOTE(random_state=42)
X_synthetic, y_synthetic = smote.fit_resample(X, y)


    

数据转换:
数据转换是对数据进行转换,以满足模型假设或改善数据的分布。
    对数转换:
    将数据取对数,常用于偏态分布的数据。
    优点:
    可以使数据更加对称,减小极端值的影响。
    缺点:
    无法处理非正值或零值。
    
    指数转换:
    将数据进行指数变换,常用于数据呈指数增长的情况。
    优点:
    可以减小指数增长带来的差异性,使得模型更容易捕捉到趋势。
    缺点:
    可能会放大噪声,造成数据的不稳定性。

Demo代码实现如下所示:

import numpy as np
from sklearn.preprocessing import FunctionTransformer
from sklearn.datasets import make_classification


"""
使用make_classification生成了一个示例数据集。然后,分别使用FunctionTransformer进行对数转换和指数转换。

对于对数转换,np.log1p函数将数据取对数(以e为底),np.expm1函数为其逆操作。这种转换常用于偏态分布的数据,可以使数据更加对称,减小极端值的影响。

对于指数转换,np.exp函数将数据进行指数变换(以e为底),np.log函数为其逆操作。这种转换常用于数据呈指数增长的情况,可以减小指数增长带来的差异性,使得模型更容易捕捉到趋势。
"""


# 创建一个示例数据集
X, y = make_classification(n_samples=100, n_features=5, n_informative=3, n_classes=2, random_state=42)

# 对数转换
log_transformer = FunctionTransformer(func=np.log1p, inverse_func=np.expm1)
X_log_transformed = log_transformer.transform(X)

# 指数转换
exp_transformer = FunctionTransformer(func=np.exp, inverse_func=np.log)
X_exp_transformed = exp_transformer.transform(X)


    

降维:
降维是通过减少特征维度来降低数据复杂性和噪声的方法。
    主成分分析(PCA):
    通过线性变换将原始特征映射到新的特征空间,以保留最大方差的主成分。
    优点:
    可以消除高度相关的特征,并减少数据集的维度。
    缺点:
    可能导致信息丢失,不适用于非线性关系的问题。
    
    线性判别分析(LDA):
    在保持类别间距离最大化和类别内距离最小化的基础上,将高维数据投影到低维空间。
    优点:
    可以减少维度同时保持类别信息。
    缺点:
    对数据的分布假设要求较高。

Demo代码实现如下所示:

import numpy as np
from sklearn.decomposition import PCA
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
from sklearn.datasets import make_classification


"""
使用make_classification生成了一个示例数据集。然后,分别使用PCA进行主成分分析和LinearDiscriminantAnalysis进行线性判别分析。

主成分分析(PCA)通过线性变换将原始特征映射到新的特征空间,在保留最大方差的前K个主成分的基础上实现降维。优点是可以消除高度相关的特征,并减少数据集的维度。缺点是可能导致信息丢失,不适用于非线性关系的问题。

线性判别分析(LDA)在保持类别间距离最大化和类别内距离最小化的基础上,将高维数据投影到低维空间。优点是可以减少维度同时保持类别信息。缺点是对数据的分布假设要求较高。
"""



# 创建一个示例数据集
X, y = make_classification(n_samples=100, n_features=10, n_informative=5, n_classes=2, random_state=42)

# 主成分分析(PCA)
pca = PCA(n_components=3)
X_pca = pca.fit_transform(X)

# 线性判别分析(LDA)
lda = LinearDiscriminantAnalysis(n_components=2)
X_lda = lda.fit_transform(X, y)

 

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

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

相关文章

Docker集群部署-MySQL主从复制

实验目的 利用Docker实现MySQL主从复制架构的部署,实现1主1从集群配置。 实验准备 要求实验主机能够连接外网,已经正确安装Docker,并关闭防火墙和selinux。 【实验步骤】 新建主服务器容器实例3307 # docker run -p 3307:3306 --name my…

mysql —案例复杂查询+索引使用+DBeaver中创建索引

前言 接上章 我们 对一个简单的选课功能进行 设计分析 实际上在工作中 拿到一个需求,也是这样的一个分析过程 一个份 需求文档原型 出来,只要是你负责这个模块,就需要你自己建表建库,设计接口文档,也许现在有的公司…

AIGC|FineTune工程之LoRa高效参数微调

徐辉 | 后端开发工程师 一、引言 随着深度学习和自然语言处理技术的快速发展,大型预训练语言模型(如GPT、Vicuna、Alpaca、Llama、ChatGLM等)在各种应用场景中取得了显著的成果。然而,从零开始训练这些模型需要大量的计算资源和…

Cristiano Linux学习小结

一、linux基础 1.1 基本概述 1、Linux组成:内核 Shell 文件系统 应用程序 2、内核(Kernel),即核心程序。实现操作系统的基本功能(进程管理、内存管理、进程间通信、虚拟文件系统和网络接口),决定着系统的性能和稳定性。…

递归典型例题:汉诺塔问题

文章目录 1. 什么是汉诺塔2. 汉诺塔的解题步骤3. 代码实现汉诺塔 1. 什么是汉诺塔 1. 汉诺塔的来源 一位法国数学家曾编写过一个印度的古老传说:在世界中心拿勒斯的圣庙里边,有一块黄铜板,上边插着三根宝柱。印度教的主神梵天在创造世界的时…

div绑定键盘点击事件

为箭头绑定绑定键盘方向键 <div class"toggle-nav"><spanv-if"leftToggleSt"click"toggleGoods(1)"keyup.left"toggleGoods(1)"class"toggle-left"><a-icon type"left" class"icon" /&…

Linux系统设置

Linux的系统设置 01 选择“Install CentOS7” 02 选择安装界面的语言 03 选择时区&#xff0c;这里选择上海 04 选择安装类型&#xff0c;选择最小安装即可&#xff0c;不需要图形界面与其他的组件 05 选择安装位置&#xff0c;自定义分区 06 我要配置分区&#xff0c;进行…

ARS408毫米波雷达使用记录

参考&#xff1a;ARS_408毫米波雷达数据解析学习记录 感谢博主的分享&#xff08;https://blog.csdn.net/weixin_49401384&#xff09; 雷达can消息解析&#xff08;通用can解析思路&#xff09; socketcan学习can总线 毫米波雷达can协议解读RadarCfgRadarState 代码基本是关于…

Python接口自动化核心模块 - 数据库操作和日志

进行接口测试时&#xff0c;我们需要连接到数据库中&#xff0c;对数据源进行备份、还原、验证等操作。 Python连接数据库常见模块 MysqlDB python2时代最火的驱动库。基于C开发&#xff0c;对windows平台不友好。现在已经进入python3时代&#xff0c;基本不再使用 MysqlCl…

干农活太累了,尤其是对一位22女孩来说

干农活太累了&#xff0c;尤其是对一位22女孩来说。要是能够通过电商来销售农产品可以大大减轻干农活的负担。在重庆荣昌的一个小村庄里&#xff0c;一个名叫杨儿杨的00后女孩&#xff0c;正通过抖音电商&#xff0c;书写着她自己的故事。杨儿杨的生活并不容易。5岁前&#xff…

数据库 --- mysql(01)

MYSQL 1、数据库简介 数据&#xff1a;描述事物的符号记录&#xff0c; 可以是数字、 文字、图形、图像、声音、语言等&#xff0c;数据有多种形式&#xff0c;它们都可以经过数字化后存入计算机。 数据库&#xff1a;存储数据的仓库&#xff0c;是长期存放在计算机内、有组…

武大+上交提出 BatGPT:创新性采用双向自回归架构,可预测前后token

进NLP群—>加入NLP交流群 本论文介绍了一种名为BATGPT的大规模语言模型&#xff0c;由武汉大学和上海交通大学联合开发和训练。 该模型采用双向自回归架构&#xff0c;通过创新的参数扩展方法和强化学习方法来提高模型的对齐性能&#xff0c;从而更有效地捕捉自然语言的复杂…

Seata 分布式事务的中间件Seata设计和实现方案

文章目录 分布式事务的中间件SeataSeata AT 模式-默认模式前提整体机制写隔离读隔离 Seata XA 模式前提整体机制工作机制 Seata TCC 模式Seata Saga 模式概述缺点&#xff1a; Saga的实现外传 分布式事务的中间件Seata Seata 是一款开源的分布式事务解决方案&#xff0c;致力于…

element ui组件的自定义类名样式不生效

element ui中&#xff0c;类似描述列表这种组件 会提供自定义类名属性 需要注意&#xff0c;样式不能写在<style scoped>标签中&#xff0c;会被vue自动加上data-v属性&#xff0c;导致样式失效。 必须写在<style>标签里

C++进阶—红黑树详解及map、set封装(3)

目录 1. 红黑树的概念 2. 红黑树的性质 3. 红黑树节点的定义 4. 红黑树性质分析 5. 红黑树插入节点简要分析&#xff08;新插入节点的parent为红色&#xff09; 5.1 简要分析1-变色&#xff1a; 5.2 简要分析2-变色旋转 5.3 简要分析总结 6. 红黑树插入节点详细分析 …

Linux下载安装Redis(Ubuntu系统)

相比于 Windows 系统而言&#xff0c;Redis 更适合于在 Linux 系统上使用&#xff0c;这是由 Redis 的底层机制决定的。下面介绍一下如何在 Linux 发行版 Ubuntu 系统上安装 Redis 数据库。 了解Redis版本 Redis 版本号采用国际标准惯例&#xff0c;即“主版本号.副版本号.补…

Linux分布式应用 Zabbix监控软件 安装

zabbix 是什么&#xff1f; ●zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 ●zabbix 能监视各种网络参数&#xff0c;保证服务器系统的安全运营&#xff1b;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。 ●…

第七届御网杯re的wp_Ba0

re拿了一血和二血&#xff0c;感觉挺简单的&#xff08; 1、easycpp 使用IDA进行linux动调 主要异或加密&#xff0c;还原即可 1 2 3 4 flag1[0x23,0x21,0x27,0x22,0x27,0x27,0x25,0x2B,0x2D,0x26,0x23,0x23,0x22,0x26,0x27,0x2E] flag[18,19,20,22,18,17,18,19,20,22,18,17…

visual stodio 编译

一、生成文件复制一份到其他路径 选到这里&#xff0c;添加命令&#xff1a; PlatformName 平台版本 x86/x64 Configuration 配置生成目录 Debug/Release OutputPath 生成路径 Debug/Release copy /y "$(OutputPath)$(ProjectName).dll" "E:\Project\UseDll…

LED点阵动画

23-7-6 #include<regx52.h> #include "Delay.h" #include "Matrix.h" /*点阵屏显示动画*/ unsigned char code Animation[]{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x08,0x08,0x08,0xff,0x00,0x0e,0x15,0x15,0x15,0x08,0x00,0x7e,0x01,0x02,…