P (Y | X)에 대해 학습 할 때 성능이 좋은 모델이 있으면 최적의 P (X | Y)를 찾으십시오.


11

입력 데이터:

> 티셔츠의 특징 (컬러, 로고 등)X

> 이윤와이

위의 Y 에서 임의의 포리스트를 학습했으며 테스트 데이터에서 합리적인 정확도를 달성했습니다. 그래서 나는 가지고있다엑스와이

.(와이|엑스)

이제 즉 이 많은 이익 마진이 기대 되는 X 기능 의 확률 분포 를 찾고 싶습니다 .(엑스|와이)엑스

임의의 숲 (또는 다른 차별적 모델)을 사용하여 어떻게합니까?

나를위한 한 가지 제안은 차별적 모델보다는 생성 적 모델로 시작하는 것일 수 있습니다. 그러나 내 이해는 생성 모델이 일반적으로 Naive Bayes의 경우 의 조건부 독립과 같은 매우 제한적인 가정을하지 않는 한 훈련하기 위해 많은 데이터가 필요하다는 것입니다 .엑스

다른 제안은 Y를 바꾸고 차별적 모델을 훈련시키는 것일 수 있습니다. 이제 X 는 수익 마진이되고 Y 는 셔츠의 특징이됩니다. P ( Y | X ) 는 목표 이익 마진이 주어지면 티셔츠 기능의 확률 분포를 직접 제공합니다. 그러나 X 는 항상 캐주얼 변수로, Y 는 효과가 있기 때문에이 접근법은 나에게 옳지 않은 것처럼 보입니다 .엑스와이엑스와이(와이|엑스)엑스와이

또한, 내가 들었던 것으로부터, 약물 발견에 대해 유사한 질문이 제기되었으며, 높은 성공률을 가진 후보 신약을 제안하는 알고리즘이 설계되었습니다. 누군가이 분야의 문헌을 연구하도록 지시 할 수 있습니까?

최신 정보:

내가 건너 온 간스에 대해 이야기가 신약 개발에 사용되고있다. 생식 적대적 네트워크는 내 문제 진술에 적합한 것처럼 보이므로 이에 대해 읽었습니다. 그러나 내가 이해 한 한 가지는 GAN이 감독되지 않은 방식으로 샘플을 생성한다는 것입니다. 먼저 X의 기본 분포를 캡처 한 다음 해당 분포에서 샘플링하는 것과 같은 표본을 생성하려고합니다. 하지만 X | Y에 관심이 있습니다. X 및 Y는 상기 정의되어있다. GAN 이외의 다른 것을 탐색해야합니까? 제발 어떤 포인터?

후속 질문 :

티셔츠를 만드는 법을 배운 GAN 훈련을 받았다고 상상해보십시오 (출력 샘플 X). 주어진 Y에 대해 상위 5 개의 셔츠를 어떻게 얻을 수 있습니까?


이는 배낭 문제 또는 확률 적 변형과 밀접한 관련이 있습니다. 입력 도메인에 대한 합리적인 가정 하에서이를 다시 언급 할 수 있습니까?
mjul

@mjul. Sry는 당신을 얻지 못했습니다. 정교하게 작성하십시오. 문제를 해결하기위한 다른 접근법에 대한 제안은 언제나 환영합니다!
claudius

1
배낭 문제는 조합 최적화 문제이며, 목표는 개별 기능의 가치와 비용을 알고 있다고 가정 할 때 가장 수익성있는 기능 세트 (티셔츠 용)를 식별하는 것입니다. 확률이 아니라 값이 정확하다고 가정합니다. 그러나 합리적인 독립 가정 하에서 문제를 배낭 문제 또는 여러 해에 걸쳐 연구 된 확률 적 변형 중 하나로 다시 언급 할 수 있습니다. 그러나 추가 정보가 없으면 귀하의 경우에 가능하다는 것이 즉시 명확하지 않습니다.
mjul

답변:


10

이 응답은 원래 형식에서 크게 수정되었습니다. 내 원래 응답의 결함에 대해서는 아래에서 설명하지만 크게 편집하기 전에이 응답이 어떻게 보이는지 보려면 다음 노트북을 살펴보십시오. https://nbviewer.jupyter.org/github /dmarx/data_generation_demo/blob/54be78fb5b68218971d2568f1680b4f783c0a79a/demo.ipynb

TL; DR : 사용 대략에 KDE (또는 당신의 선택의 절차) , 다음에서 샘플을 그릴 MCMC를 사용하여 P ( X | Y ) α P ( Y | X ) P ( X )(엑스)(엑스|와이)(와이|엑스)(엑스) 여기서 는 모델에서 제공합니다. 이 샘플에서 두 번째 KDE를 생성 한 샘플에 맞추고 KDE를 최대 사후 측정 (MAP) 추정값으로 최대화하는 관측 값을 선택 하여 "최적" X 를 추정 할 수 있습니다 .(와이|엑스)엑스

최대 가능성 추정

... 그리고 왜 작동하지 않습니까?

필자의 원래 반응에서 내가 제안한 기술은 MCMC를 사용하여 최대한 가능성 추정을 수행하는 것이 었습니다. 일반적으로 MLE는 조건부 확률에 대한 "최적의"솔루션을 찾는 좋은 접근 방법이지만 여기서 문제가 있습니다. 우리는 차별적 모델 (이 경우 임의의 포리스트)을 사용하기 때문에 의사 결정 경계와 관련하여 확률이 계산됩니다. . 클래스 경계에서 충분히 멀어지면 모델은 모든 것에 대한 것을 예측하기 때문에 실제로 이와 같은 모델에 대한 "최적의"솔루션에 대해 이야기하는 것은 이치에 맞지 않습니다. 우리가 충분한 클래스를 가지고 있다면, 그중 일부는 완전히 "주변"될 수 있으며,이 경우에는 문제가되지 않지만, 데이터의 경계에있는 클래스는 반드시 실현 가능하지 않은 값에 의해 "최대화"됩니다.

시연하기 위해 여기 에서 찾을 수있는 편리한 코드를 활용 하겠습니다 .이 GenerativeSampler코드는 원래 응답에서 코드를 래핑 하는 클래스,이 더 나은 솔루션을위한 추가 코드 및 내가 가지고 놀던 추가 기능 (일부 작동하는 일부)을 제공합니다 , 그렇지 않은 일부는 아마 여기에 들어 가지 않을 것입니다.

np.random.seed(123)
sampler = GenerativeSampler(model=RFC, X=X, y=y, 
                            target_class=2, 
                            prior=None, 
                            class_err_prob=0.05, # <-- the score we use for candidates that aren't predicted as the target class
                            rw_std=.05,          # <-- controls the step size of the random walk proposal
                            verbose=True, 
                            use_empirical=False)
samples, _ = sampler.run_chain(n=5000)

burn = 1000
thin = 20
X_s = pca.transform(samples[burn::thin,:])

# Plot the iris data
col=['r','b','g']
for i in range(3):
    plt.scatter(*X_r[y==i,:].T, c=col[i], marker='x')
plt.plot(*X_s.T, 'k')
plt.scatter(*X_s.T, c=np.arange(X_s.shape[0]))
plt.colorbar()
plt.show()

여기에 이미지 설명을 입력하십시오

이 시각화에서 x는 실제 데이터이며 관심있는 클래스는 녹색입니다. 선으로 연결된 점은 우리가 그린 샘플이며, 색상은 샘플의 순서와 일치하며 오른쪽의 색상 막대 레이블로 주어진 "얇은"시퀀스 위치입니다.

보시다시피, 샘플러는 데이터에서 상당히 빠르게 벗어난 다음 기본적으로 실제 관측치에 해당하는 피처 공간 값과 매우 멀리 떨어져 있습니다. 분명히 이것은 문제입니다.

컨닝 할 수있는 한 가지 방법은 기능이 데이터에서 실제로 관찰 한 값만 가져 오도록 제안 기능을 변경하는 것입니다. 시도해보고 결과의 동작이 어떻게 바뀌는 지 봅시다.

np.random.seed(123)
sampler = GenerativeSampler(model=RFC, X=X, y=y, 
                            target_class=2, 
                            prior=None, 
                            class_err_prob=0.05, 
                            verbose=True, 
                            use_empirical=True) # <-- magic happening under the hood
samples, _ = sampler.run_chain(n=5000)

X_s = pca.transform(samples[burn::thin,:])

# Constrain attention to just the target class this time
i=2
plt.scatter(*X_r[y==i,:].T, c='k', marker='x')
plt.scatter(*X_s.T, c='g', alpha=0.3)
#plt.colorbar()
plt.show()


sns.kdeplot(X_s, cmap=sns.dark_palette('green', as_cmap=True))
plt.scatter(*X_r[y==i,:].T, c='k', marker='x')
plt.show()

여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오

엑스

(엑스)(와이|엑스)(엑스)(와이|엑스)(엑스)

베이 즈 규칙 입력

여기에서 수학에 손을 덜 대는 것으로 사냥을 한 후, 나는이 정도의 금액으로 놀았고 (따라서 GenerativeSampler물건을 짓는 것), 나는 위에 제시 한 문제에 직면했습니다. 나는 이것을 깨달았을 때 정말 멍청한 느낌이 들었지만 분명히 베이 즈 규칙의 적용을 요구하는 것이 분명하고 일찍 기각 한 것에 대해 사과드립니다.

베이 규칙에 익숙하지 않은 경우 다음과 같습니다.

(|)=(|)()()

많은 애플리케이션에서 분모는 분자가 1에 통합되도록하기 위해 스케일링 항의 역할을하는 상수입니다. 따라서 규칙은 종종 다음과 같이 다시 정의됩니다.

(|)(|)()

또는 일반 영어로 : "후부는 이전의 가능성에 비례합니다".

익숙해 보이나요? 지금은 어때:

(엑스|와이)(와이|엑스)(엑스)

예, 이것은 데이터의 관측 된 분포에 고정 된 MLE에 대한 추정치를 구성하여 이전에 정확히 수행 한 것입니다. 베이 즈 규칙에 대해 이런 식으로 생각한 적이 없지만이 새로운 관점을 발견 할 수있는 기회를 주셔서 감사합니다.

(와이)

따라서 데이터에 대한 사전 정보를 통합해야한다는 통찰력을 확보 한 후 표준 KDE를 적용하여 결과를 어떻게 변경하는지 살펴 보겠습니다.

np.random.seed(123)
sampler = GenerativeSampler(model=RFC, X=X, y=y, 
                            target_class=2, 
                            prior='kde',         # <-- the new hotness
                            class_err_prob=0.05,
                            rw_std=.05,          # <-- back to the random walk proposal
                            verbose=True, 
                            use_empirical=False)
samples, _ = sampler.run_chain(n=5000)

burn = 1000
thin = 20
X_s = pca.transform(samples[burn::thin,:])

# Plot the iris data
col=['r','b','g']
for i in range(3):
    plt.scatter(*X_r[y==i,:].T, c=col[i], marker='x')
plt.plot(*X_s.T, 'k--')
plt.scatter(*X_s.T, c=np.arange(X_s.shape[0]), alpha=0.2)
plt.colorbar()
plt.show()

여기에 이미지 설명을 입력하십시오

엑스(엑스|와이)

# MAP estimation

from sklearn.neighbors import KernelDensity
from sklearn.model_selection import GridSearchCV
from scipy.optimize import minimize

grid = GridSearchCV(KernelDensity(), {'bandwidth': np.linspace(0.1, 1.0, 30)}, cv=10, refit=True)
kde = grid.fit(samples[burn::thin,:]).best_estimator_

def map_objective(x):
    try:
        score = kde.score_samples(x)
    except ValueError:
        score = kde.score_samples(x.reshape(1,-1))
    return -score

x_map = minimize(map_objective, samples[-1,:].reshape(1,-1)).x

print(x_map)

x_map_r = pca.transform(x_map.reshape(1,-1))[0]
col=['r','b','g']
for i in range(3):
    plt.scatter(*X_r[y==i,:].T, c=col[i], marker='x')
sns.kdeplot(*X_s.T, cmap=sns.dark_palette('green', as_cmap=True))
plt.scatter(x_map_r[0], x_map_r[1], c='k', marker='x', s=150)
plt.show()

여기에 이미지 설명을 입력하십시오

큰 검은 색 'X'는 MAP 추정치입니다 (이 윤곽선은 후부의 KDE입니다).


답장을 보내 주셔서 감사합니다. 질문이 있습니다. alpha = np.min ([f (new) / f (old), 1]) ..... 여기서 f (new)는 우리가 사용하는 model.predict_proba를 사용하는 P (Y = 0 | X = new)입니다. X가 주어진 Y의 분포 ......하지만 en.wikipedia.org/wiki/Metropolis –Hastings_algorithm 에서 알파는 min (P (X = new | y = 0) / P (X = old) | y = 0), 1). 내가 잘못 이해 했습니까?
claudius

또한 TLDR 노트 "모델에서 제공하는 클래스 조건부 우도에 대해 후보 X 값을 스코어링하여 MCMC를 사용하여 p (X | Y)에서 샘플을 생성합니다." 그러나 model.predict_proba는 X가 주어진 클래스의 가능성을 제공하지 않습니다. 어떻게 model.predict_proba (X1) [0,0]> 모델 때문에 P (X1 | Y = 0)> P (X2 | Y = 0) .predict_proba (X2) [0,0]. P (Y = 0 | X1)> P (Y = 0 | X2)로 model.predict_proba의 관계를 읽었습니다. 내가 틀린 곳을 알려주세요.
claudius

또 다른 후속 질문 ... 대칭 제안 배포 기능은 무엇입니까? 도와 줘서 고마워 David!
claudius

대칭 제안은 가우스 랜덤 워크입니다. 나는 "임시적"제안 기능의 데모로 곧 이것을 업데이트 할 계획이다. MCMC 수학과 관련하여 너무 매달리지 마십시오. Y 고정을 유지하고 X 후보를 p (Y | X)에 대해 유지함으로써 MCMC는 p (Y = 0 | X)에서 X에 대한 MLE을 근사합니다. 즉, 여기서 샘플링하는 함수가 p (Y | X가 아님) ) (그렇지 않으면 일련의 클래스 레이블을 생성 할 것입니다), L (X; Y)입니다. 이것은 효과적으로 p (X | Y = 0)에 대한 분포를 제공합니다. 대도시 비율의 채점 함수는 p (Y | X)이지만이를 사용하는 방식은 p (X | Y)에서 샘플을 생성합니다.
David Marx

데이빗 수학을 적어 줄 수 있습니까? 나는 수학을 믿게하는 데 어려움을 겪고있다. 통계 졸업생임을 확인하기 위해 프로필을 확인했습니다. 나 같은 필사자들을 돕기 위해 당신의 요점을 자세히 설명해주세요. 특히 "Y 고정을 유지하고 p (Y | X)에 대해 X 후보를 실행함으로써 MCMC는 p (Y = 0 | X)에서 X에 대한 MLE을 근사합니다. 즉, 여기서 샘플링하는 함수는 p (Y | X) (그렇지 않으면 클래스 레이블 시퀀스를 생성 할 것임)는 L (X; Y)입니다. 이것은 p (X | Y = 0)에 대한 분포를 효과적으로 제공합니다.
claudius

0

앞으로 나아갈 수있는 한 가지 방법은 다음과 같습니다.

Y (아마도 정규화하려는 경우)에서 X를 예측하는 피드 포워드 신경망을 만듭니다. 따라서 모델 (마지막 레이어)의 출력은 각 기능에 대해 소프트 맥스 뉴런 세트가됩니다. 기능 1 (예 : 색상)에 4 개의 옵션이있는 경우 4 개의 뉴런에 대해 softmax를 적용하고 각 기능에 대해 동일한 작업을 수행합니다.

그런 다음 손실 함수는 각 기능에 대한 교차 엔트로피의 합 (또는 원하는 경우 선형 조합)이 될 수 있습니다.


답장을 보내 주셔서 감사합니다! 그러나 여러 접근법을 제안하고 각 접근법의 장단점을 언급하는 답변을 찾고 있습니다.
claudius
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.