Различные Z-счета с NumPy / Склеарн / Панды - PullRequest
2 голосов
/ 10 января 2020

Я пытаюсь стандартизировать набор данных Chiaretti et al. который можно загрузить в блокнот Google Colab следующим образом:

import pandas as pd
import numpy as np

!wget https://github.com/kivancguckiran/microarray-data/raw/master/csv/chiaretti.tar.gz
!tar -zxvf chiaretti.tar.gz 

features = pd.read_csv("chiaretti_inputs.csv", header=None)
labels = pd.read_csv("chiaretti_outputs.csv", header=None).squeeze()

Я использовал три различных метода для вычисления Z-баллов, и мне интересно, что вызывает (небольшую) разницу в результатах между pandas & numpy / sklearn:

n_samples, n_features = features.shape
standardised_sklearn = pd.DataFrame(StandardScaler().fit_transform(features))
standardised_numpy = pd.DataFrame((features - np.mean(features)) / np.std(features))
standardised_pandas = pd.DataFrame((features - features.mean()) / features.std())

#count how many z-scores are less then epsilon=10**-10 apart (between sklearn & numpy)
compare1 = len(np.where(np.abs(standardised_sklearn - standardised_numpy) <= 10**-10)[0])
print(compare1 / (n_samples*n_features))  #will output 100%

#count how many z-scores are less then epsilon=10**-10 apart (between sklearn & pandas)
compare2 = len(np.where(np.abs(standardised_sklearn - standardised_pandas) <= 10**-10)[0])
print(compare2 / (n_samples*n_features))  #will output 0%

#count how many z-scores are less then epsilon=10**-2 apart (between sklearn & pandas)
compare3 = len(np.where(np.abs(standardised_sklearn - standardised_pandas) <= 10**-2)[0])
print(compare3 / (n_samples*n_features))  #will output 98%

Мы можем видеть, что sklearn & numpy практически одинаковы (результаты отличаются в 10–15 раз), но pandas очень отличается. Мне интересно, что происходит "под колпаком", который делает вычисления среднего / стандартного отклонения такими разными в pandas.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...