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