Гауссовский KDE n-мерных данных: старший минор массива не является положительно определенным - PullRequest
1 голос
/ 02 марта 2020

У меня есть два подмножества n-мерных данных A и B, и я хотел бы знать, для каждого образца в B плотность выборок из A вокруг него.

Примеры наборов данных с 5 выборками в 3 измерениях

A = np.array([[-2.44528668, -0.09326276, -1.06527892],
       [-1.35144799, -1.45507518, -0.02096   ],
       [-0.5788315 , -1.48932706, -0.28496559],
       [-1.60224949, -0.76823424, -0.11548589],
       [-1.15768561, -0.74704022, -0.14744463]])

B = np.array([[-1.84134663, -1.42036525, -1.38819347],
       [-2.58165693, -2.49423057, -1.57609454],
       [-0.78776371, -0.79168188,  0.21967791],
       [-1.0165618 , -1.78509185, -0.68373997],
       [-1.21764947, -0.43215885, -0.34393573]])

Я попытался сделать следующее

from scipy.stats import gaussian_kde

kernel = gaussian_kde(A)
densities = kernel(B)

, но это подняло

LinAlgError: 2-th leading minor of the array is not positive definite

Что означает эта ошибка, и как я могу получить плотность точек от A для каждого образца в B?

1 Ответ

0 голосов
/ 02 марта 2020

Основываясь на сообщении об ошибке, которое я получаю, когда я

kernel = gaussian_kde(A)
densities = kernel(B[0])

, я понял, что gaussian_kde считает каждый столбец одним образцом, а каждую строку - координатами в n-м измерении, поэтому я вместо этого я должен использовать транспонирование моих массивов.

Итак, чтобы получить желаемый результат, я должен делать

kernel = gaussian_kde(A.T)
densities = kernel(B.T)

Но я все еще не знаю, какое сообщение об ошибке я получил получать средства.

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