首页 > 其他分享 >数模国赛冲刺 | 数据预处理方法合集(特征工程、数据降维、数据划分、数据平衡)

数模国赛冲刺 | 数据预处理方法合集(特征工程、数据降维、数据划分、数据平衡)

时间:2024-08-26 14:23:48浏览次数:13  
标签:采样 降维 数模 import print np array 数据

​数据预处理方法合集(特征工程数据降维数据划分数据平衡

本文继续介绍数据预处理中的特征工程数据降维数据划分数据平衡的内容,接下来我们将详细地介绍具体的方法,文末可获得预处理方法合集PDF

目录

特征工程

特征选择(Feature Selection)

特征提取

数据降维

线性降维方法

非线性降维方法

数据划分

训练集、验证集和测试集划分

交叉验证(Cross-Validation)

分层抽样(Stratified Sampling)

时间序列数据划分(Time Series Split)

留出法(Hold-Out Method)

自助法(Bootstrap Method)

数据平衡

欠采样(Undersampling)

过采样(Oversampling)

混合采样(Hybrid Sampling)

集成方法(Ensemble Methods)

成本敏感学习(Cost-Sensitive Learning)

生成对抗网络(GAN)

自适应采样


特征工程

特征选择(Feature Selection)

特征选择是从数据集中选择对目标变量最有影响的特征,同时剔除不相关或冗余的特征。通过特征选择,可以减少模型的复杂度,提高模型的性能和可解释性。

  • 过滤法(Filter Methods):依据统计特性(如方差、相关系数、卡方检验、互信息)选择特征。

  • 包裹法(Wrapper Methods): 使用模型性能指标(如精度、AUC)评估特征组合。

  • 嵌入法(Embedded Methods): 在模型训练过程中内置特征选择(如Lasso回归、决策树)。

1)过滤法(Filter Method)
  • 方差选择法(Variance Threshold)

低方差特征可能对模型贡献较小,因此可以删除方差低于某个阈值的特征。

适用场景:在数据中存在常数特征或几乎不变的特征时,可以通过方差选择法来去除它们。

from sklearn.feature_selection import VarianceThreshold

# 示例数据
X = [[0, 2, 0, 3],
     [0, 1, 4, 3],
     [0, 1, 1, 3]]

# 去除低方差特征
selector = VarianceThreshold(threshold=0.1)
X_high_variance = selector.fit_transform(X)

print("去除低方差特征后的数据:")
print(X_high_variance)
  • 卡方检验(Chi-Square Test)

卡方检验用于检查类别变量之间的独立性。通过计算特征与目标变量之间的卡方统计量来判断其相关性。

适用场景:用于分类问题中的特征选择,特别是类别变量的处理。

from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectKBest, chi2

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

# 使用卡方检验选择前2个最相关特征
selector = SelectKBest(score_func=chi2, k=2)
X_kbest = selector.fit_transform(X, y)

print("卡方检验选择的特征:")
print(X_kbest)
  •  皮尔逊相关系数(Pearson Correlation Coefficient)

计算每个特征与目标变量之间的线性相关性,选择相关性较高的特征。

适用场景:用于连续型特征和目标变量之间的线性关系分析。

import numpy as np
from scipy.stats import pearsonr

# 示例数据
X = np.array([1, 2, 3, 4, 5])
y = np.array([1, 2, 3, 4, 5])

# 计算相关系数
corr, _ = pearsonr(X, y)
print("皮尔逊相关系数:", corr)
  •  互信息(Mutual Information)

互信息衡量两个变量之间的依赖性,捕捉线性和非线性关系。它是信息论中的一个概念,表示通过一个变量可以获得多少关于另一个变量的信息。

适用场景:用于处理分类问题中的非线性关系特征选择。

from sklearn.feature_selection import mutual_info_classif

# 示例数据
X = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
y = [0, 1, 0]

# 计算互信息
mi = mutual_info_classif(X, y)

print("互信息得分:", mi)
2)包裹法(Wrapper Method)

包裹法使用一个预测模型来评估特征子集的性能,通过训练模型来找到最优的特征组合。包裹法比过滤法更能捕捉特征之间的相互作用,但计算成本较高,特别是当特征数量很多时。

  • 递归特征消除(Recursive Feature Elimination, RFE)

RFE通过递归地构建模型,逐步消除最不重要的特征,最终得到最优特征子集。

适用场景:适用于需要选择少量最重要特征的场景,尤其是在特征数量较多时。

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

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

# 使用RFE选择特征
model = LogisticRegression(max_iter=200)
selector = RFE(model, n_features_to_select=2)
X_rfe = selector.fit_transform(X, y)

print("RFE选择的特征:")
print(X_rfe)
  • 前向选择(Forward Selection)

从空特征集开始,每次加入一个最能提高模型性能的特征,直到达到某个停止条件。适用场景:适用于逐步构建特征集,尤其在计算资源有限的情况下。

  •  后向选择(Backward Elimination)

从完整特征集开始,每次去除一个对模型影响最小的特征,直到达到某个停止条件。适用场景:适用于逐步减少特征,尤其在已经有一个比较好的特征集的情况下。

3)嵌入法(Embedded Method)

嵌入法在模型训练过程中自动进行特征选择,特征选择过程与模型的训练过程是同步进行的。嵌入法结合了过滤法和包裹法的优点,既考虑了特征与目标变量之间的关系,也考虑了特征之间的相互作用。

  •  Lasso回归(L1正则化)

Lasso回归通过在损失函数中加入L1正则化项,使得某些特征的系数缩小为零,从而起到特征选择的作用。

适用场景:适用于线性模型,尤其是当特征数量多于样本数量时。

from sklearn.linear_model import Lasso
from sklearn.datasets import load_boston

# 加载数据
X, y = load_boston(return_X_y=True)

# 使用Lasso进行特征选择
model = Lasso(alpha=0.1)
model.fit(X, y)
importance = model.coef_

print("Lasso回归选择的特征:")
print(importance)
  •  决策树模型(Decision Tree)

决策树模型通过选择信息增益最大的特征来进行分裂,天然地进行特征选择。

适用场景:适用于处理分类和回归问题,尤其是当特征之间存在非线性关系时。

from sklearn.tree import DecisionTreeClassifier

# 加载数据
X, y = load_iris(return_X_y=True)

# 使用决策树进行特征选择
model = DecisionTreeClassifier()
model.fit(X, y)
importance = model.feature_importances_

print("决策树模型选择的特征:")
print(importance)
  • 基于正则化的随机森林(Random Forest with Regularization)

随机森林通过构建多个决策树,计算每个特征的重要性得分,选择最重要的特征。

适用场景:适用于处理高维数据和非线性问题,特别是在特征之间存在复杂交互时。

from sklearn.ensemble import RandomForestClassifier

# 加载数据
X, y = load_iris(return_X_y=True)

# 使用随机森林进行特征选择
model = RandomForestClassifier(n_estimators=100)
model.fit(X, y)
importance = model.feature_importances_

print("随机森林模型选择的特征:")
print(importance)

总结

  •  过滤法: 简单且计算效率高,适合初步筛选特征,但无法考虑特征之间的交互作用。

  • 包裹法: 更能捕捉特征之间的交互作用,但计算成本较高,适用于特征数量较少的情况。

  • 嵌入法: 在模型训练过程中自动选择特征,结合了模型的性能和特征的重要性,适用于大多数机器学习问题。

特征提取

特征提取是将高维数据转换为低维特征空间的过程,目的是提取出对模型预测有用的特征,同时去除噪声和冗余信息。

1)主成分分析(PCA)

主成分分析(PCA)是一种线性降维技术,通过将数据投影到方差最大的方向上,从而减少数据的维度。PCA的目标是找到数据中一组新的正交坐标轴(称为主成分),这些轴上的投影能最大程度地保留数据的方差信息。

Step1 计算数据的协方差矩阵。

Step2 求解协方差矩阵的特征值和特征向量。

Step3 根据特征值的大小选择对应的特征向量作为主成分。

Step4 将原始数据投影到选择的主成分上。

适用场景: PCA适用于需要降维和去除噪声的场景,尤其是在数据集中包含大量相关特征的情况下。常用于图像处理、数据可视化和压缩等领域。

from sklearn.decomposition import PCA
import numpy as np

# 示例数据
X = np.array([[2.5, 2.4], [0.5, 0.7], [2.2, 2.9], [1.9, 2.2], [3.1, 3.0], [2.3, 2.7]])

# 使用PCA进行特征提取
pca = PCA(n_components=1)
X_pca = pca.fit_transform(X)

print("PCA提取的主成分:")
print(X_pca)
2)独立成分分析(ICA)

独立成分分析(ICA)是一种统计和计算方法,旨在将观察到的混合信号分解为具有统计独立性的源信号。ICA常用于盲源分离(如音频信号的分离)和数据降维中。

Step1 寻找一个解混合矩阵,使得分离后的信号相互独立。

Step2 通过最大化信号的非高斯性来实现信号的独立性。

适用场景: ICA适用于信号处理领域,尤其是在音频、图像处理和神经科学中,用于从混合信号中提取独立成分。

from sklearn.decomposition import FastICA

# 示例数据
X = np.array([[2, 4], [1, 3], [2, 2], [3, 5], [4, 6], [2, 3]])

# 使用ICA进行特征提取
ica = FastICA(n_components=2)
X_ica = ica.fit_transform(X)

print("ICA提取的独立成分:")
print(X_ica)
3)线性判别分析(LDA)

线性判别分析(LDA)是一种监督式降维方法,旨在通过最大化类间方差与类内方差的比率,找到能最好区分不同类别的数据投影方向。与PCA不同,LDA考虑了类别标签的信息。

Step1 计算类内散布矩阵(SW)和类间散布矩阵(SB)。

Step2 求解矩阵SW−1SB的特征值和特征向量。

Step3 将数据投影到选定的特征向量方向上。

适用场景: LDA适用于分类问题中的降维,特别是在特征数量多于样本数量的情况下,如人脸识别、文本分类等。

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA

# 示例数据
X = np.array([[2, 3], [3, 4], [4, 5], [5, 6], [6, 7]])
y = np.array([0, 0, 1, 1, 1])

# 使用LDA进行特征提取
lda = LDA(n_components=1)
X_lda = lda.fit_transform(X, y)

print("LDA提取的判别分量:")
print(X_lda)
4)奇异值分解(SVD)

奇异值分解(SVD)是一种矩阵分解方法,用于将一个矩阵分解为三个矩阵的乘积:左奇异矩阵、对角奇异值矩阵和右奇异矩阵。SVD广泛应用于降维、数据压缩、图像处理和推荐系统中。

SVD分解公式为:X=U⋅Σ⋅VT其中,X是原始数据矩阵,

标签:采样,降维,数模,import,print,np,array,数据
From: https://blog.csdn.net/EasyMCM/article/details/141536872

相关文章

  • 数模国赛冲刺 | 数据预处理方法合集(数据清洗、数据变换与数据编码)
    ​数据预处理方法合集(数据清洗、数据变换与数据编码)数据预处理是数据科学和机器学习项目成功的基础步骤。通过适当的数据预处理,可以确保数据的质量、提升模型的性能,并为后续的建模和分析打下坚实的基础。忽视数据预处理可能导致模型训练失败或性能不佳,甚至得出错误的结论。因......
  • 网站提示500.19 服务器错误:该文件的数据在配置数据库中配置不正确怎么办
    当网站提示 500.19InternalServerError 并指出“该文件的数据在配置数据库中配置不正确”时,这通常意味着IIS(InternetInformationServices)服务器上的配置文件(如 web.config)存在问题。这类错误通常与配置文件的格式、权限或内容有关。以下是解决 500.19InternalServ......
  • 数据分析~2
    excel数据备份-隐藏看数据量级筛选ctrl+alt+LGMV-商品交易总额(包含未支付订单)UV-人(去重)与PV-点击量等CPC-每产生一次点击的成本数据透视表:添加新字段切片器(跟表联动的)或者筛选器数据透视图:组合图函数学习:sum函数视图进行分屏全部求和=SUM(......
  • AIGC时代,如何为“数据飞轮”提速
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 企业通过数智化转型实现降本增效,已经成为行业共识。而随着AIGC时代到来,企业的创新能力和决策效率带来大幅度提升,对数智化转型也带来积极影响。 在数智化领域,火山引擎已在走在前列。基......
  • 在使用FastAPI处理数据输入的时候,对模型数据和路径参数的一些转换处理
    在开发Python的后端API平台的时候,为了兼容我SqlSugar开发的一些Winform端、BS端、UniApp端、WPF端等接入,由于部分是基于.net的处理,因此可能对于接入对象的属性为常见的Camel的驼峰命名规则,但是Python一般约定属性名称为小写,因此需要对这个模型进行兼容;另外默认FastAPI路由路径也是......
  • 利用python连接MySQL数据库
    利用python连接MySQL数据库1、准备工作:(1)事先在系统中已经安装好mysql数据库(2)在系统控制台通过pipinstallpymysql,安装python的第三方数据库模块2、利用python连接数据库#导入模块importpymysql#连接数据库conn=pymysql.connect(host="127.0.0.1",user="root",pas......
  • 《数据资产管理核心技术与应用》读书笔记-第五章:数据服务(二)
    《数据资产管理核心技术与应用》是清华大学出版社出版的一本图书,全书共分10章,第1章主要让读者认识数据资产,了解数据资产相关的基础概念,以及数据资产的发展情况。第2~8章主要介绍大数据时代数据资产管理所涉及的核心技术,内容包括元数据的采集与存储、数据血缘、数据质量、数据监控与......
  • 常见问题解决 --- 如何给一个不支持配置代理的程序抓取https流量数据
    比如我有一个C#编写票务系统,它内嵌浏览器功能,我想抓取它的流量,但是这个客户端不支持配置代理设置解决办法:1.安装配置proxifier开启全局代理服务。安装好后网上有激活码激活一下,点击profile-proxyserver,添加一个代理服务器127.0.0.1,端口8080,协议https。点击profile-prox......
  • 在 SQLAlchemy 中实现数据处理的时候,实现表自引用、多对多、联合查询,有序id等常见的一
    有时候,我们在使用SQLAlchemy操作某些表的时候,需要使用外键关系来实现一对多或者多对多的关系引用,以及对多表的联合查询,有序列的uuid值或者自增id值,字符串的分拆等常见处理操作。1、在SQLAlchemy中定义具有嵌套children关系的表要在SQLAlchemy中定义具有嵌套children关系......
  • 告别数据泄露风险,一键申请免费SSL证书,安全升级
    在数字化时代,网站已成为企业展示形象、提供服务、促进交易的重要窗口。然而,随着网络攻击手段的不断升级,数据泄露风险也日益加剧,给企业和用户带来了严重的安全威胁。为了守护这份来之不易的数字资产,免费SSL证书应运而生,成为网站安全升级的重要利器。什么是SSL证书?SSL(SecureSo......