python - 使用 FunctionTransformer 在特征子集上使用 PCA 的 sklearn 管道

标签 python scikit-learn pca

考虑链接 PCA 和回归的任务,其中 PCA 执行降维,回归执行预测。

来自 sklearn 文档的示例:

import numpy as np
import matplotlib.pyplot as plt

from sklearn import linear_model, decomposition, datasets
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV

logistic = linear_model.LogisticRegression()

pca = decomposition.PCA()
pipe = Pipeline(steps=[('pca', pca), ('logistic', logistic)])

digits = datasets.load_digits()
X_digits = digits.data
y_digits = digits.target

n_components = [5, 10]
Cs = np.logspace(-4, 4, 3)

param_grid = dict(pca__n_components=n_components, logistic__C=Cs)
estimator = GridSearchCV(pipe,param_grid)
estimator.fit(X_digits, y_digits)

如何使用 FunctionTransformer 仅对特征集的子集执行降维(例如,将 PCA 限制为 X_digits 的最后十列)?

最佳答案

您可以首先创建一个函数(下面称为 last_ten_columns),该函数返回输入 X_digits 的最后 10 列。创建指向该函数的函数转换器,并将其用作管道的第一步。

import numpy as np
import matplotlib.pyplot as plt

from sklearn import linear_model, decomposition, datasets
from sklearn.pipeline import Pipeline
from sklearn.model_selection import GridSearchCV
from sklearn.preprocessing import FunctionTransformer

logistic = linear_model.LogisticRegression()

pca = decomposition.PCA()

def last_ten_columns(X):
    return X[:, -10:]

func_trans = FunctionTransformer(last_ten_columns)

pipe = Pipeline(steps=[('func_trans',func_trans), ('pca', pca), ('logistic', logistic)])

digits = datasets.load_digits()
X_digits = digits.data
y_digits = digits.target

n_components = [5, 10]
Cs = np.logspace(-4, 4, 3)

param_grid = dict(pca__n_components=n_components, logistic__C=Cs)
estimator = GridSearchCV(pipe, param_grid)
estimator.fit(X_digits, y_digits)

关于python - 使用 FunctionTransformer 在特征子集上使用 PCA 的 sklearn 管道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53561598/

相关文章:

python - 带有 Gui 的 Websocket

python - 从 scikit-learn 导入 make_blobs

machine-learning - 使用 scikit 学习重建错误分析的快速 ICA

python - pywinauto: MenuSelect() 在某些应用程序中不能用于选择 "MenuBar"。该库中适合使用的功能是什么?

python - 使用 S3 子文件夹作为 Django 收集静态目标

python - Sklearn的类 "StratifiedShuffleSplit"

opencv - 主成分分析和旋转

java - 无法在 Java 代码中使用 Weka 的 PCA 过滤器

python - 按下 ESCape 时如何退出 python2.x 脚本

python - HashingVectorizer 与 TfidfVectorizer 导出文件大小