Почему система sklearn train / test split плюс PCA делает мою маркировку неправильной?

detly спросил: 07 октября 2018 в 11:37 в: python

Я изучаю PCA в Scikit-learn (0.20 на Python 3), используя Pandas для структурирования моих данных. Когда я применяю тест / разделение поезда (и только когда), мои входные метки, кажется, больше не совпадают с выходными данными PCA.

import pandas
import sklearn.datasets
from matplotlib import pyplot
import seaborndef load_bc_as_dataframe():
    data = sklearn.datasets.load_breast_cancer()
    df = pandas.DataFrame(data.data, columns=data.feature_names)
    df['diagnosis'] = pandas.Series(data.target_names[data.target])
    return data.feature_names.tolist(), dffeature_names, bc_data = load_bc_as_dataframe()from sklearn.model_selection import train_test_split
# bc_train, _ = train_test_split(bc_data, test_size=0)
bc_train = bc_datafrom sklearn.decomposition import PCA
pca = PCA(n_components=2)
bc_pca_raw = pca.fit_transform(bc_train[feature_names])
bc_pca = pandas.DataFrame(bc_pca_raw, columns=('PCA 1', 'PCA 2'))
bc_pca['diagnosis'] = bc_train['diagnosis']seaborn.scatterplot(
    data=bc_pca,
    x='PCA 1',
    y='PCA 2',
    hue='diagnosis',
    style='diagnosis'
)pyplot.show()

Это выглядит разумно, что подтверждается точными результатами классификации. Если я заменим bc_train = bc_data на вызов train_test_split() (даже с test_size=0), мои метки больше не будут соответствовать оригинальным.

я понимаю, что train_test_split() обычно перетасовывает мои данные, которые я, вообще говоря, хочу перенаправить ( но я не понимаю, почему это может быть проблемой, так как PCA и назначение меток используют одни и те же перемешанные данные. Преобразование PCA - это просто проекция, и, хотя оно, очевидно, не сохраняет те же функции (столбцы), оно не должно изменять, какая метка соответствует какому фрейму.

Как правильно перемаркировать мой вывод PCA?

0 ответов