Я выполняю PCA, используя Scikitlearn в Python3.
Но после того, как я запустил свой код, основной компонент последней строки имеет значение «выключено». Я точно знаю, что последняя строка правильная.
Я построил три PCA, чтобы визуализировать проблему. На первом графике (полный набор данных) вы можете видеть «выборочные» графики, как и предполагалось, но на втором и третьем графиках, если я удаляю популяции (часть полного набора данных), выборочные графики «странны».
Фрейм данных с вычисленными основными компонентами (см. последнюю строку):
principal_component_1 principal_component_2 Sample_name Population
0 3.279363 -0.288892 HG02291 American_Ancestry
1 3.625035 -0.296081 HG02275 American_Ancestry
2 3.870248 -0.264558 HG02272 American_Ancestry
3 3.118460 -0.272594 HG02271 American_Ancestry
4 2.811992 -0.376418 HG02259 American_Ancestry
... ... ... ... ...
1590 1.849372 -0.167314 HGDP00555 Oceanian_Ancestry
1591 1.666233 -0.224749 HGDP00556 Oceanian_Ancestry
1592 1.983947 -0.202254 HGDP00552 Oceanian_Ancestry
1593 2.202948 -0.210858 HGDP00554 Oceanian_Ancestry
1594 -4.693172 126.672265 Sample Sample
Код, который я использую:
def do_pca(pca_data, sample_name, pops):
"""
This function plots the PCA data from the sample and dataset in a PCA plot
"""
# initiliaze variabeles for the PCA plot
pops = pops + ["Sample"]
pca_df = pd.read_csv(pca_data, sep = ";")
pca_df = pca_df[pca_df["Population"].isin(pops)].reset_index()
features = list(pca_df.columns.values)
features.remove("Population")
features.remove("Sample_name")
x = pca_df.loc[:, features].values # Separating out the features
y = pca_df.loc[:, ["Population", "Sample_name"]] # Separating out the target
x = StandardScaler().fit_transform(x) # Standardizing the features
# initiliaze PCA plot
dot_size = 20
pca = PCA(n_components=2)
pc = pca.fit_transform(x)
pc_df = pd.DataFrame(data=pc, columns=["principal_component_%s" % (x + 1) for x in range(2)])
pc_df["Sample_name"] = y["Sample_name"]
pc_df["Population"] = y["Population"]
return pc_df
Может кто-нибудь объяснить мне, что я делаю неправильно? Мой код выключен?
Я нашел похожий вопрос на StackOverflow, но на него нет ответа: ссылка
Если вы посмотрите на мой код, вы увидите, что я выделяю функции, которые содержат образец. Пожалуйста, взгляните на мой код. Я очень в отчаянии.
Просмотр StackOverflow говорит мне, что атрибут "svd_solver" или "random_state" для объекта PCA может привести к этой ошибке (из-за размера измерения). Но изменение svd_solver или random_state не решает проблему.
Вы говорите, что ваша последняя строка верна, но содержит ли она экстремальные значения в высоком измерении?
@Y.P Да, я проверил образцы данных, если что-то пошло не так (например, неправильный синтаксический анализ, форматирование и т. д.), но я не смог найти никаких ошибок, объясняющих экстремальные значения в высоком измерении. Я вручную все проверил. Странно вот что. когда я удаляю популяции в PCA и пересчитываю PCA, возникает экстремальное значение.
попробуй выключить и снова включить :/
Я действительно не вникал в ваш код, но, возможно, вы не использовали
StandardScaler
в образце?