机器学习特征预处理之PCA降维
示例
def apply_pca(X_train, X_test, n_components=None, explained_variance=0.95): """PCA降维""" if n_components is None and explained_variance: pca = PCA(n_components=explained_variance) else: pca = PCA(n_components=n_components) X_train_pca = pca.fit_transform(X_train) X_test_pca = pca.transform(X_test) cols = [f'PC{i + 1}' for i in range(X_train_pca.shape[1])] return pd.DataFrame(X_train_pca, columns=cols, index=X_train.index), \ pd.DataFrame(X_test_pca, columns=cols, index=X_test.index)函数功能
这是一个用于主成分分析(PCA)降维的Python函数,可以对训练集和测试集进行降维处理。
参数说明
X_train:训练集特征数据
X_test:测试集特征数据
n_components:指定降维后的维度数(默认为None)
explained_variance:累积解释方差比例(默认0.95,即保留95%的信息)
代码逐行解析
1. PCA对象创建
if n_components is None and explained_variance: pca = PCA(n_components=explained_variance) else: pca = PCA(n_components=n_components)如果用户没有指定维度数(
n_components=None)但指定了方差比例,则按方差比例降维否则使用指定的维度数降维
PCA(n_components=0.95)表示选择能保留95%方差的主成分数量
2. 训练和转换
X_train_pca = pca.fit_transform(X_train) # 拟合并转换训练集 X_test_pca = pca.transform(X_test) # 只转换测试集训练集使用
fit_transform:学习PCA参数并转换数据测试集只使用
transform:应用训练集学到的参数转换(避免数据泄露)
3. 列名生成
python
cols = [f'PC{i + 1}' for i in range(X_train_pca.shape[1])]生成主成分列名:PC1, PC2, PC3...
shape[1]是降维后的特征数量
4. 返回DataFrame
return pd.DataFrame(X_train_pca, columns=cols, index=X_train.index), \ pd.DataFrame(X_test_pca, columns=cols, index=X_test.index)将NumPy数组转换为DataFrame,方便后续操作
保留原始数据的索引,便于追溯
使用示例
python
# 方式1:按方差比例降维 X_train_pca, X_test_pca = apply_pca(X_train, X_test, explained_variance=0.95) # 方式2:指定维度数 X_train_pca, X_test_pca = apply_pca(X_train, X_test, n_components=10) # 方式3:不降维(使用全部主成分) X_train_pca, X_test_pca = apply_pca(X_train, X_test, n_components=None)
注意事项
数据泄露防范:测试集只应用训练集的PCA参数,这是正确的做法
参数优先级:当同时指定
n_components和explained_variance时,n_components优先返回格式:返回两个DataFrame便于后续分析和可视化
这个函数是机器学习中特征降维的标准实现,特别适合处理高维数据。
