У меня проблема с реализацией байесовского классификатора с алгоритмом окна Парзена с использованием сферического (или изотропного) ядра.
Я запускаю алгоритм с тестовыми данными, содержащими 2 измерения и 3 разных класса (для каждого класса у меня есть 10 тестовых точек и 40 тренировочных точек, все в 2 измерениях). Когда я изменяю значение моего гиперпараметра (sigma_sq для сферического ядра Гаусса), я обнаруживаю, что это не влияет на то, как точки классифицируются.
Это моя оценка плотности. Мой self.sigma_sq одинаков во всех измерениях моих данных (2 измерения)
for i in range(test_data.shape[0]):
log_prob_intermediate = 0
for j in range(n): #n is size of training set
c = -self.n_dims * np.log(2*np.pi)/2.0 - self.n_dims*np.log(self.sigma_sq)/2.0
log_prob_intermediate += (c - np.sum((test_data[i,:] - self.train_data[j,:])**2.0) / (2.0 * self.sigma_sq))
log_prob.append(log_prob_intermediate / n)
Как я реализовал свой байесовский классификатор: есть 3 класса, которые мой байесовский классификатор должен различать. Я создал 3 тренировочных набора и 3 тестовых набора (по одному тренировочному и тестовому набору на класс). Для каждой точки в моем тестовом наборе я запускаю оценку плотности для каждого класса точки. Это дает мне вектор из 3 значений: логарифмическая вероятность того, что моя новая точка находится в классе 1, классе 2 или классе 3. Затем я выбираю максимальное значение и назначаю новую точку этому классу.
Поскольку я использую сферическое ядро Гаусса, я понимаю, что мой sigma_sq должен быть общим для каждой оценки плотности (одна оценка плотности для каждого класса). Это правильно? Если бы у меня был другой sigma_sq для каждой пары измерений, разве это не дало бы мне что-то вроде диагонального ядра Гаусса?
Для моего списка из 30 тестовых точек (по 10 для каждого класса) я обнаружил, что запуск байесовского классификатора по этим точкам продолжает давать мне одну и ту же классификацию для каждой точки, независимо от того, какую сигму я использую. Это нормально? Поскольку это сферическое ядро Гаусса, и все мои измерения используют одно и то же ядро, увеличивает или уменьшает мой sigma_sq просто пропорциональный эффект на мою логарифмическую вероятность без изменения классификации? ИЛИ у меня есть какая-то проблема с моей оценкой плотности, которую я не могу понять.