StandarScaler, sklearn получить другой результат из моего собственного расчета? - PullRequest
0 голосов
/ 23 мая 2018

StandardScaler в sklearn используется для нормализации данных с помощью формулы: x_normalize = (x-mean) / std.Однако у меня другой результат.

Вот мой маленький пример:

a = pd.DataFrame({'X': [1,2,3,4],
                  'Y': [1,2,4,72]})
StandardScaler().fit_transform(a)

Результат:

array([[-1.34164079, -0.6211513 ],
       [-0.4472136 , -0.58802323],
       [0.4472136 , -0.52176709],
       [ 1.34164079,  1.73094161]])

Я пытаюсь вычислить сам:

a.loc[:,'X'].mean()
Out[61]: 2.5
a.loc[:,'X'].std()
Out[62]: 1.2909944487358056
(1-a.loc[:,'X'].mean())/a.loc[:,'X'].std()
Out[63]: -1.161895003862225

Вы можете видеть, что на основе StardardScale a.loc [0, 'X'] равен 1, а затем -1,3416 после преобразования.Но мой результат -1.1618.

Может кто-нибудь объяснить мне, если я ошибся?

1 Ответ

0 голосов
/ 23 мая 2018

Pandas std и numpy std используют разные формулы для расчета стандартного отклонения.В пандах они используют:

sigma = sqrt(sum((X-X.mean())**2)/len(X-1))

Но в стандартном отклонении numpy рассчитывается следующим образом:

sigma = sqrt(sum((X-X.mean())**2)/len(X))

В обучении scikit они использовали numpy как стандартное отклонение.Итак, и -1,34, и -1,16 верны, учитывая, что вы последовательно используете одну формулу.

...