数据预处理方法合集(特征工程、数据降维、数据划分、数据平衡)
本文继续介绍数据预处理中的特征工程、数据降维、数据划分、数据平衡的内容,接下来我们将详细地介绍具体的方法,文末可获得预处理方法合集PDF!
目录
成本敏感学习(Cost-Sensitive Learning)
特征工程
特征选择(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