gpt4 book ai didi

python - 我是否必须分别为训练和测试数据做拟合 PCA

转载 作者:行者123 更新时间:2023-12-05 07:25:07 28 4
gpt4 key购买 nike

我正在考虑使用 PCA(TruncatedSVD) 来减少我的稀疏矩阵的维数。

我将我的数据拆分为训练和测试拆分。

X_train , X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)

我必须分别为 X_train 和 X_test 进行 PCA 吗?

pca = PCA()
X_train = pca.fit_transform(X_train)
X_test = pca.fit_transform(X_test)

或者我是否必须只适合训练数据,然后转换训练和测试数据。哪个更受欢迎?

pca.fit(X_train)
train = pca.transform(X_train)
test = pca.transform(X_test)

编辑:

我正在做分类任务。我的实际数据集中有一个名为 project_description 的列,我为该列应用了 BoW (CountVectorizer) 并将其转换为计数向量,然后对其应用 PCA 以减少维度。

我的实际数据集还有其他列,例如 price, place, date, share% etc...

现在,在连接应用了 PCA 的 Bow Vector 之前,我是否必须在我的实际数据集(即其他列)上应用 PCA?

最佳答案

您不应该使用整个数据集进行降维或归一化等任何预处理方法,因此:

  • 首先,你应该拆分数据集,

  • 然后您可以仅使用训练集来标准化(或根据您的条件规范化)数据集

  • 之后,您也可以使用拟合缩放器对测试集进行变换。
    如果你想应用像 PCA 这样的降维方法,现在你应该:

  • 仅在训练集上执行 PCA

  • 然后对测试集也进行改造(所以只有问题中提到的第二个代码是正确的。)
    这样,稍后我们可以使用测试集在未见数据点上评估我们的模型,以查看模型是否泛化良好。

      # Split the dataset
    X_train, X_test, y_train, y_test = model_selection.train_test_split(X_array,
    y_array,
    test_size=0.3,
    random_state=42)
    # Standardize the dataset
    scaler = preprocessing.StandardScaler()
    # Fit on the train set only
    scaler.fit(X_train)
    # Apply to both the train set and the test set.
    X_train = scaler.transform(X_train)
    X_test = scaler.transform(X_test)
    # Apply PCA
    pca = PCA()
    # Fit on the train set only
    pca.fit(X_train)
    # Apply transform to both the train set and the test set.
    X_train = pca.transform(X_train)
    X_test = pca.transform(X_test)

关于python - 我是否必须分别为训练和测试数据做拟合 PCA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55045012/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com