Требования линейного дискриминантного анализа
Я пытаюсь проанализировать разреженный набор данных, используя sklearn LDA (но не только этот, я также попробовал личную реализацию). Набор данных имеет 14 столбцов и несколько различное количество столбцов, которые я выбрал для проведения различных экспериментов, сохраняя их с большей дисперсией.
X = dfplants.values
print(X.shape)
(14,15)
u,s,v = np.linalg.svd(X)
print(len(s))
y = dfplants_sup['tecnique'].values
lda = LDA(n_components=2, solver='svd', store_covariance=True)
X_lda=lda.fit_transform(X,y)
print("X_lda")
print(X_lda)
X_lda
[[-6.03602598]
[-6.14807425]
[-4.02479902]
[-5.85982518]
[-6.96663709]
[-5.93062031]
[-6.24874635]
[ 5.42840829]
[ 6.5065448 ]
[ 6.47761884]
[ 6.50027698]
[ 6.31051439]
[ 3.57171076]
[ 6.41965411]]
Неважно, если я использую 2 или более компонентов, или если я оставлю все или только два с наибольшим отклонением, я всегда получаю 1 столбец в результате. Почему я получаю только один столбец? Каковы требования для применения LDA?
1 ответ
Согласно документации:
n_components : int, optional Number of components (< n_classes - 1) for dimensionality reduction.
Так что если у вас есть бинарная проблема (из 2 классов), то количество возвращаемых компонентов будет равно 1. И это то, что вы испытываете.