Граница решения логарифмов многомерного распределения - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть некоторые 2d данные о 2 классах, и я пытаюсь вычислить шансы журнала:

ln(P(class=a|x)/P(class=b|x))

Затем я хочу построить границу решения, а именно все точки, которые имеют шансы журнала = 0.Я сделал это для 1d данных, но для 2d данных моя интуиция заключается в том, что я должен использовать 2d гистограмму, чтобы получить P(x) и P(x|class = a), P(x | class = b).Что я делаю правильно?У меня один вопрос: где я могу получить P (класс = a)?Это просто 0,5, потому что есть 2 класса с равным количеством образцов?Я также думаю, что способ, которым я строю границу решения, может быть неправильным, поскольку это не совсем то, что я ожидал.

N = 1000

mean_a = [0, 0]
cov_a = [[2, 0], [0, 2]]  # diagonal covariance

mean_b = [1, 2]
cov_b = [[1, 0], [0, 1]]  # diagonal covariance

#generate data
Xa = np.random.multivariate_normal(mean_a, cov_a, N)
Xb = np.random.multivariate_normal(mean_b, cov_b, N)
Xall = np.vstack((Xa,Xb))

def logratio(a, b, eps=1e-14): 
    # take log ( ratio of probabilities of (y vs not-y) )   
    a=a+eps # to prevent taking logs of 0 or infinity
    b=b+eps # to prevent taking logs of 0 or infinity
    return np.log(a/b)

P_a = 0.5 # since each class has equal number of samples
P_b = 0.5

(P_xn_if_a, x_bins, y_bins) = np.histogram2d(Xa[:, 0], Xa[:, 1])
(P_xn, x_bins, y_bins) = np.histogram2d(Xall[:, 0], Xall[:, 1])
(P_xn_if_b, x_bins, y_bins) = np.histogram2d(Xb[:, 0], Xb[:, 1])

P_b_if_xn = P_xn_if_b * P_a / (P_xn + 1e-16)
P_a_if_xn = P_xn_if_a * P_a / (P_xn + 1e-16)
log_odds = logratio(P_a_if_xn, P_b_if_xn)

#plot only boundary
for i in range(0,10):
    for j in range(0,10):
        if log_odds[i][j] != 0:
            log_odds[i][j] = 0
        else:
            log_odds[i][j] = 1



fig, ax6 = plt.subplots(nrows=1, ncols=1,figsize=(15,8))
ax6.contour(x_bins[:-1], y_bins[:-1], log_odds,levels=[0], cmap="Greys_r")
ax6.scatter(Xa[:,0],Xa[:,1],color='r')
ax6.scatter(Xb[:,0],Xb[:,1],color='b')

введите описание изображения здесь

...