Я углубился в линейный дискриминантный анализ и SVD и использую реализацию sklearn. Я погрузился в код sklearn и нашел эти строки масштабирования в _solve_svd()
:
# 1) within (univariate) scaling by with classes std-dev
std = Xc.std(axis=0)
# avoid division by zero in normalization
std[std == 0] = 1.
fac = 1. / (n_samples - n_classes)
# 2) Within variance scaling
X = np.sqrt(fac) * (Xc / std)
# SVD of centered (within)scaled data
U, S, V = linalg.svd(X, full_matrices=False)
Может кто-нибудь объяснить, что на самом деле делает это масштабирование? Причина, по которой я спрашиваю, состоит в том, что, поскольку я выяснил, что число выходных измерений равно min(n_components,n_samples-n_classes)
.
Например, если у меня 1000 объектов с 900 классами и я установил n_components
в 300, мое выходное измерение100.
Спасибо!