확률 밀도 추정에 대한 간단한 소개

트윗 공유 점유율

최종 업데이트 : 2020 년 7 월 24 일

확률 밀도는 관측치와 관측치 간의 관계입니다. 확률.

무작위 변수의 일부 결과는 확률 밀도가 낮고 다른 결과는 확률 밀도가 높습니다.

확률 밀도의 전체 모양을 확률이라고합니다. 확률 밀도 함수 (줄여서 PDF)로 랜덤 변수의 특정 결과에 대한 확률 계산을 수행합니다.

데이터 샘플에 대한 확률 밀도 함수를 순서대로 아는 것이 유용합니다. 주어진 관찰이 가능성이 없는지 또는 이상치 또는 이상으로 간주 될 가능성이 없는지 여부와 제거해야하는지 여부를 파악합니다. 입력 데이터가 특정 확률 분포를 갖도록 요구하는 적절한 학습 방법을 선택하는데도 도움이됩니다.

데이터의 무작위 표본에 대한 확률 밀도 함수를 알 가능성은 거의 없습니다. 따라서 확률 밀도는 확률 밀도 추정이라는 프로세스를 사용하여 근사화해야합니다.

이 자습서에서는 확률 밀도 추정에 대한 간단한 소개를 발견하게됩니다.

이 작업을 완료 한 후 자습서에서 알 수 있습니다.

  • 히스토그램 플롯은 데이터 샘플의 확률 밀도를 시각화하는 빠르고 안정적인 방법을 제공합니다.
  • 파라 메트릭 확률 밀도 추정에는 공통 분포 선택이 포함됩니다. 데이터 샘플에서 밀도 함수에 대한 매개 변수를 추정합니다.
  • 비모수 확률 밀도 추정에는 커널 밀도 추정과 같은 데이터의 임의 분포에 모델을 맞추는 기술을 사용하는 것이 포함됩니다.

단계별 자습서와 모든 예제에 대한 Python 소스 코드 파일이 포함 된 새 책 Probability for Machine Learning으로 프로젝트를 시작하십시오.

시작하겠습니다.

p>

간단한 소개 n to Probability Density Estimation
Photo by Alistair Paterson, some rights reserved.

튜토리얼 개요

이 튜토리얼은 네 부분으로 나뉩니다.

  1. 확률 밀도
  2. 히스토그램으로 밀도 요약
  3. 파라 메트릭 밀도 추정
  4. 비모수 밀도 추정

확률 밀도

무작위 변수 x는 확률 분포 p (x)를 갖습니다.

무작위 변수의 결과와 확률 간의 관계는 다음과 같습니다. 확률 밀도 또는 간단히 “밀도”라고합니다.

무작위 변수가 연속적이면 확률 밀도 함수 또는 간단히 PDF를 통해 확률을 계산할 수 있습니다. 확률 밀도의 모양 랜덤 변수에 대한 도메인 전체의 함수를 확률 분포라고하며 공통 확률 분포에는 uniform, normal, exponential 등과 같은 이름이 있습니다.

무작위 변수가 주어지면 우리는 관심이 있습니다. 확률의 밀도.

예를 들어, 임의의 변수 샘플이 주어지면 확률 분포의 모양과 같은 것을 알고 싶을 수 있습니다. bution, 가장 가능성이 높은 값, 값의 산포 및 기타 속성.

무작위 변수에 대한 확률 분포를 아는 것은 평균 및 분산과 같은 분포의 모멘트를 계산하는 데 도움이 될 수 있지만 관측치의 가능성이 낮거나 가능성이 거의없고 이상치 또는 이상일 수 있는지 여부를 결정하는 것과 같은 다른 일반적인 고려 사항에 유용합니다.

문제는 무작위 변수의 확률 분포를 알 수 없다는 것입니다. 확률 변수에 대해 가능한 모든 결과에 액세스 할 수 없기 때문에 분포를 거의 알지 못합니다. 사실, 우리가 접근 할 수있는 것은 관찰 샘플뿐입니다. 따라서 확률 분포를 선택해야합니다.

이 문제는 확률 밀도 추정 또는 단순히 “밀도 추정”이라고합니다. 무작위 표본의 관측치를 사용하여 일반 밀도를 추정하기 때문입니다. 사용 가능한 데이터 샘플을 넘어선 확률입니다.

무작위 변수에 대한 밀도 추정 프로세스에는 몇 단계가 있습니다.

첫 번째 단계는 밀도를 검토하는 것입니다. 간단한 히스토그램으로 무작위 표본의 관측치입니다. 히스토그램에서 정규 분포와 같이 사용할 수있는 일반적이고 잘 이해 된 확률 분포를 식별 할 수 있습니다. 그렇지 않은 경우 모델을 다음에 적합해야 할 수 있습니다. 분포를 추정합니다.

다음 섹션에서는 이러한 각 단계를 차례로 자세히 살펴볼 것입니다.

일 변량 데이터 (예 : 하나의 임의 변수, 이 단계는 다변량 데이터에 적용 할 수 있지만 더 어려울 수 있습니다. 변수 수가 증가함에 따라 ng.

머신 러닝에 대한 확률을 배우고 싶습니다

지금 무료 7 일 이메일 집중 강좌 수강 (샘플 코드 포함).

등록을 클릭하고 과정의 무료 PDF Ebook 버전을 받으세요.

무료 미니 과정 다운로드

히스토그램으로 밀도 요약

밀도 추정의 첫 번째 단계는 무작위 표본의 관측치에 대한 히스토그램을 만드는 것입니다.

히스토그램은 먼저 관측치를 빈으로 그룹화하고 각 빈에 속하는 이벤트 수를 세는 플롯입니다. 그런 다음 각 빈의 개수 또는 관측 빈도가 x 축에 빈이 있고 y 축에 빈도가있는 막대 그래프로 표시됩니다.

빈 수의 선택은 다음과 같습니다. 분포의 거칠기 (막대 수)와 관측치의 밀도가 얼마나 잘 표시되는지를 제어하므로 중요합니다. 동일한 데이터에 대한 여러 관점이나보기를 얻으려면 주어진 데이터 샘플에 대해 서로 다른 빈 크기를 실험하는 것이 좋습니다.

Histogram은 Matplotlib 라이브러리와 hist () 함수를 사용하여 만들 수 있습니다. 데이터는 첫 번째 인수로 제공되며 빈의 수는 “bins”인수를 통해 정수 (예 : 10) 또는 각 빈의 경계 시퀀스 (예 :)로 지정됩니다.

아래 스 니펫은 데이터 샘플에 대해 10 개의 빈이있는 히스토그램을 생성합니다.

1
2
3
4

# 샘플의 히스토그램 플로팅
pyplot.hist (sample, bins = 10)
pyplot.show ()

정규 분포와 p에서 추출한 무작위 표본을 만들 수 있습니다. 우리가 분포를 모른다고 보복하고 데이터의 히스토그램을 만듭니다. normal () NumPy 함수가이를 달성하고 평균이 0이고 표준 편차가 1 인 1,000 개의 샘플을 생성합니다. 표준 가우스입니다.

전체 예는 아래에 나열되어 있습니다.

1
2
3
4
5
6
7
8

# 무작위 샘플의 히스토그램 플로팅 예제
from matplotlib import pyplot
from numpy.random import normal
# generate a sample
sample = normal (size = 1000)
# 샘플의 히스토그램 플로팅
pyplot.hist (sample, bins = 10)
pyplot.show ()

예제에서는 임의의 관측 값 샘플을 그리고 10 개의 빈이있는 히스토그램을 생성합니다. 정규 분포의 모양을 명확하게 볼 수 있습니다.

데이터 샘플의 무작위 특성을 고려할 때 결과가 다를 수 있습니다. 예제를 몇 번 실행 해보십시오.

10 개의 빈 데이터 샘플이있는 히스토그램 플롯

빈을 3으로 설정하여 예제를 실행하면 정규 분포가 덜 명확 해집니다.

무작위 데이터 샘플의 3 개 Bin이있는 히스토그램 플롯

다른 수의 Bin이있는 데이터 샘플의 히스토그램을 검토하면 밀도가 보이는지 여부를 식별하는 데 도움이됩니다. 일반적인 확률 분포와 같거나 그렇지 않습니다.

대부분의 경우 익숙한 종 모양의 정상, 평평한 모양의 유니폼, 하강 또는 오름차순 모양과 같은 단봉 분포를 볼 수 있습니다. 지수 또는 파레토 분포.

바이 모달 분포라고하는 다른 수의 빈으로 사라지지 않는 여러 피크 또는 a라고하는 여러 피크와 같은 복잡한 분포를 볼 수도 있습니다. 다중 모드 분포. 또한 특정 값에 대해 밀도가 크게 급등하거나 특이 치를 나타내는 작은 범위의 값을 볼 수도 있습니다. 종종 나머지 밀도에서 멀리 떨어진 분포의 꼬리에서 발생합니다.

파라 메트릭 밀도 추정

파라 메트릭 밀도 추정 h2>

대부분의 랜덤 샘플의 히스토그램 모양은 잘 알려진 확률 분포와 일치합니다.

공통 분포는 서로 다르고 때로는 예상치 못한 도메인에서 반복해서 발생하기 때문에 일반적입니다.

공통 확률 분포에 익숙해지면 주어진 분포를 식별하는 데 도움이됩니다. 히스토그램.

확인되면 선택한 확률 분포를 사용하여 랜덤 변수의 밀도를 추정 할 수 있습니다. 이는 무작위 데이터 샘플에서 분포의 매개 변수를 추정하여 얻을 수 있습니다.

예를 들어 정규 분포에는 평균과 표준 편차라는 두 가지 매개 변수가 있습니다. 이 두 매개 변수가 주어지면 이제 확률 분포 함수를 알 수 있습니다. 이러한 매개 변수는 표본 평균과 표본 표준 편차를 계산하여 데이터에서 추정 할 수 있습니다.

이 프로세스를 매개 변수 밀도 추정이라고합니다.

그 이유는 사전 정의 된 함수를 사용하기 때문입니다. 매개 변수를 사용하여 제어하거나 구성 할 수있는 관측치와 확률 간의 관계를 요약합니다. 따라서 “모수 적”입니다.

밀도를 추정 한 후에는 이것이 적합한 지 확인할 수 있습니다. 이는 다음과 같은 다양한 방법으로 수행 할 수 있습니다.

  • 밀도 함수를 플로팅하고 모양을 히스토그램과 비교
  • 밀도 함수를 샘플링하고 생성 된 샘플을 실제 샘플.
  • 통계 테스트를 사용하여 데이터가 분포에 맞는지 확인합니다.

예를 들어이를 입증 할 수 있습니다.

우리는 평균이 50이고 표준 편차가 5 인 정규 분포에서 1,000 개의 관측치에 대한 무작위 표본을 생성 할 수 있습니다.

1
2
3

# 샘플 생성
샘플 = normal (loc = 50, scale = 5, size = 1000)

그러면 확률 분포를 모르는 척하고 히스토그램을보고 그것이 정상이라고 추측 할 수 있습니다. 정상이라고 가정하면 분포의 매개 변수, 특히 평균과 표준 편차를 계산할 수 있습니다.

작은 표본 크기를 고려할 때 평균과 표준 편차가 정확히 50과 5가 될 것으로 예상하지 않습니다.

그런 다음 데이터 샘플의 매개 변수 밀도 추정이라고하는 이러한 매개 변수로 분포를 피팅합니다.

이 경우 norm ( ) SciPy 기능.

1
2
3

# 분포 정의
dist = norm (sample_mean, sam ple_std)

그런 다음이 분포에서 확률을 샘플링 할 수 있습니다. 도메인의 값 범위 (이 경우 30에서 70 사이)에 대해.

마지막으로 데이터 샘플의 히스토그램을 플로팅하고 다음 값의 범위에 대해 계산 된 확률의 선 플롯을 오버레이 할 수 있습니다. PDF.

중요하게는 히스토그램의 각 빈에있는 개수 또는 빈도를 정규화 된 확률로 변환하여 히스토그램의 y 축이 선 그림의 y 축과 일치하도록 할 수 있습니다. hist () 호출에서 “density”인수를 “True”로 설정하면됩니다.

1
2
3
4

# 히스토그램 및 pdf 플로팅
pyplot.hist (sample, bins = 10, density = True)
pyplot.plot (values, probabilities)

이 스 니펫을 함께 묶으면 파라 메트릭 밀도 추정의 전체 예제가 아래에 나열되어 있습니다.

이 예제를 먼저 실행하면 데이터 샘플이 생성됩니다. , 그런 다음 정규 확률의 모수를 추정합니다. 배포.

데이터 샘플의 무작위 특성에 따라 결과가 다를 수 있습니다. 예제를 몇 번 실행 해보십시오.

이 경우 평균 및 표준 편차에 약간의 잡음이 있고 각각 50 및 5의 예상 값과 약간 다른 것을 확인할 수 있습니다. 소음이 적으며 분포가 여전히 잘 맞을 것으로 예상됩니다.

1

Mean = 49.852 , 표준 편차 = 5.023

다음으로 PDF가 적합합니다. 추정 된 매개 변수와 10 개의 빈이있는 데이터의 히스토그램을 사용하여 PDF에서 샘플링 된 값 범위에 대한 확률과 비교됩니다.

PDF가 데이터와 잘 일치 함을 알 수 있습니다.

p>

정규 분포에 대한 확률 밀도 함수 오버레이가있는 데이터 샘플 히스토그램

데이터가 공통 확률 분포와 일치하지만 모수 밀도 추정 전에 변환이 필요할 수 있습니다.

예를 들어, 멀리 떨어진 이상 값이있을 수 있습니다. 분포의 평균 또는 질량 중심. 이는 분포 모수의 부정확 한 추정치를 제공하고 결과적으로 데이터에 적합하지 않은 결과를 초래할 수 있습니다. 분포 매개 변수를 추정하기 전에 이러한 이상 값을 제거해야합니다.

다른 예는 데이터가 왜곡되거나 왼쪽 또는 오른쪽으로 이동할 수 있다는 것입니다. 이 경우 로그 또는 제곱근을 취하거나보다 일반적으로 Box-Cox 변환과 같은 거듭 제곱 변환을 사용하여 매개 변수를 추정하기 전에 데이터를 변환해야 할 수 있습니다.

이러한 유형 데이터 수정이 명확하지 않을 수 있으며 효과적인 매개 변수 밀도 추정에는 다음과 같은 반복적 인 프로세스가 필요할 수 있습니다.

  • 데이터에 대한 분포가 충분할 때까지 루프 :
    • 1. 분포 매개 변수 추정
    • 2. 결과 PDF를 데이터와 비교
    • 3. 분포에 더 잘 맞도록 데이터 변환

비모수 밀도 추정

경우에 따라 데이터 샘플이 일반적인 확률과 유사하지 않을 수 있습니다. 분포 또는 분포에 맞게 쉽게 만들 수 없습니다.

데이터에 두 개의 피크 (이중 모드 분포) 또는 여러 피크 (다중 모드 분포)가있는 경우가 종종 발생합니다.

여기서는 경우 모수 밀도 추정이 가능하지 않으며 공통 분포를 사용하지 않는 대체 방법을 사용할 수 있습니다. 대신 비모수 방법이라고하는 사전 정의 된 분포없이 데이터의 확률 분포를 근사화하는 데 알고리즘이 사용됩니다.

분포는 여전히 모수를 가지지 만 동일한 방식으로 직접 제어 할 수는 없습니다. 단순한 확률 분포로. 예를 들어, 비모수 적 방법은 무작위 표본의 모든 관측치를 사용하여 밀도를 추정 할 수 있으며, 사실상 표본 “모수”의 모든 관측치를 만듭니다.

아마도 확률 밀도 함수를 추정하기위한 가장 일반적인 비모수 적 접근법 일 것입니다. 연속 랜덤 변수를 커널 평활화 또는 커널 밀도 추정, 줄여서 KDE라고합니다.

  • 커널 밀도 추정 : 데이터 세트를 사용하여 새 포인트에 대한 확률을 추정하는 비모수 적 방법입니다.

이 경우 커널은 임의 변수의 주어진 값에 대한 확률을 반환하는 수학 함수입니다. 커널은 확률 변수에 대한 결과 범위에서 확률을 효과적으로 평활화하거나 보간하여 합계가 확률의 수는 1과 같으며, 이는 잘 행동하는 확률의 요구 사항입니다.

커널 함수는 데이터 샘플에서 주어진 쿼리 샘플과의 관계 또는 거리를 기반으로 관측치의 기여도에 가중치를 부여합니다. 확률이 요청됩니다.

평활화 매개 변수 또는 대역폭이라고하는 매개 변수는 주어진 샘플에 대한 확률을 추정하는 데 기여하는 데이터 샘플에서 관측 범위 또는 관측 창을 제어합니다. 따라서 커널 밀도 추정은 메서드 개발자 이후에 Parzen-Rosenblatt 창 또는 단순히 Parzen 창이라고도합니다.

  • Smoothing Parameter (bandwidth) : 새 포인트에 대한 확률을 추정하는 데 사용되는 샘플 수 또는 샘플 창

큰 창은 세부 사항이 거의없는 조잡한 밀도를 생성 할 수있는 반면 작은 창은 너무 많은 세부 정보를 가질 수 있습니다. 새롭거나 보이지 않는 예를 올바르게 다룰 수있을만큼 부드럽거나 일반적이지 않습니다.창 내 샘플의 기여도는 다른 기능 (예 : 기본 기능이라고도 함)을 사용하여 형성 할 수 있습니다. 결과 밀도 함수의 부드러움에 다른 영향을 미치는 균일 한 법선 등입니다.

  • 기저 함수 (커널) : 데이터 세트에서 샘플의 추정 기여도를 제어하는 데 사용되는 함수입니다. 새로운 지점의 확률.

따라서 다양한 창 크기와 다양한 기여 함수를 실험하고 데이터의 히스토그램에 대한 결과를 평가하는 것이 유용 할 수 있습니다.

예를 들어이를 입증 할 수 있습니다.

먼저, 두 가지 다른 정규 분포의 샘플을 결합하여 바이 모달 분포를 구성 할 수 있습니다. 구체적으로 말하면, 평균이 20이고 표준 편차가 5 (작은 피크) 인 300 개의 예와 평균이 40이고 표준 편차가 5 (더 큰 피크) 인 700 개의 예가 있습니다. 평균은 결합 된 표본에서 분포가 겹치는 것을 보장하기 위해 서로 가깝게 선택되었습니다.

바이 모달 확률 분포로이 표본을 만들고 히스토그램을 그리는 완전한 예가 아래에 나열되어 있습니다.

예제를 실행하면 데이터 샘플이 생성되고 히스토그램이 표시됩니다.

데이터 샘플의 무작위 특성에 따라 결과가 달라집니다. 예제를 몇 번 실행 해보세요.

평균이 40 인 샘플보다 평균이 20 인 샘플이 적습니다. 히스토그램에 반영된 샘플 밀도가 약 40 개 정도 인 것을 볼 수 있습니다. 20.

이 분포를 가진 데이터는 설계 상 공통 확률 분포에 잘 맞지 않습니다. 비모수 적 커널 밀도 추정 방법을 사용하는 좋은 사례입니다.

데이터 샘플의 히스토그램 플롯 Bimodal Probability Distribution 사용

scikit-learn 기계 학습 라이브러리는 커널 밀도 추정을 구현하는 KernelDensity 클래스를 제공합니다.

첫 번째로 클래스는 원하는 대역폭으로 구성됩니다. (창 크기) 및 커널 (기본 함수) 인수. 데이터에 대해 다른 구성을 테스트하는 것이 좋습니다. 이 경우 대역폭 2와 가우스 커널을 시도합니다.

그런 다음 클래스는 fit () 함수를 통해 데이터 샘플에 적합합니다. 이 함수는 데이터가 형식의 2D 형태를 가질 것으로 예상하므로 1,000 개의 행과 1 개의 열을 갖도록 데이터 샘플의 형태를 변경할 수 있습니다.

1
2
3
4
5

# 적합 밀도
모델 = KernelDensity (bandwidth = 2, kernel = “gaussian”)
sample = sample.reshape ((len (sample), 1))
model.fit (샘플)

그런 다음 obs 범위에 대한 확률을 계산하여 밀도 추정치가 데이터와 얼마나 잘 일치하는지 평가할 수 있습니다. 이전 섹션에서 파라 메트릭 사례에 대해했던 것처럼 ervations 및 모양을 히스토그램과 비교합니다.

KernelDensity의 score_samples () 함수는 샘플 배열에 대한 로그 확률을 계산합니다. 도메인 범위에 대해 1에서 60까지의 샘플 범위를 만들고 로그 확률을 계산 한 다음 지수 또는 exp ()를 계산하여 로그 연산을 반전하여 값을 정상 확률에 대해 0-1 범위로 반환 할 수 있습니다. .

마지막으로 정규화 된 주파수와 추정 확률에 대한 값의 오버레이 라인 플롯으로 히스토그램을 생성 할 수 있습니다.

1
2
3
4
5

# 히스토그램과 pdf 플롯
pyplot.hist (sample, bins = 50, density = True)
pyplot.plot (values, 확률)
pyplot.show ()

이를 함께 연결하면 바이 모달 데이터 샘플에 대한 커널 밀도 추정의 전체 예가 아래에 나열되어 있습니다.

예제를 실행하면 데이터 분포가 생성되고 커널 밀도 추정 모델에 맞는 다음 히스토그램이 표시됩니다. KDE 모델의 데이터 샘플 및 PDF.

데이터 샘플의 무작위 특성에 따라 결과가 다를 수 있습니다. 예제를 몇 번 실행 해보십시오.

이 경우 PDF가 히스토그램에 적합하다는 것을 알 수 있습니다. 매우 부드럽 지 않으며 “bandwidth”인수를 3 개 이상의 샘플로 설정하여 더 만들 수 있습니다. 대역폭과 커널 함수의 다른 값으로 실험 해보세요.

바이 모달 데이터 샘플에 대한 커널 밀도 추정을 통해 추정 된 히스토그램 및 확률 밀도 함수 플롯

KernelDensity 클래스는 강력하고 다차원 데이터에 대한 PDF 추정을 지원합니다.

추가 자료

이 섹션에서는 더 자세히 알고 싶은 경우 주제에 대한 더 많은 리소스를 제공합니다.

  • 패턴 인식 및 기계 학습, 2006.
  • 기계 학습 : 확률 적 관점, 2012.
  • 통계 학습의 요소 : 데이터 마이닝, 추론 , 및 Prediction, 2009.

API

  • scipy.stats.gaussian_kde API.
  • 비모수 메서드 비모수, Statsmodels API.
  • 커널 밀도 추정 Statsmodels Exa 충분합니다.
  • 밀도 추정, Scikit-Learn API.

기사

  • 밀도 추정, Wikipedia.
  • 히스토그램, Wikipedia.
  • 커널 밀도 추정, Wikipedia.
  • 다변량 커널 밀도 추정, Wikipedia.
  • Parzen-Rosenblatt 창 방법을 통한 커널 밀도 추정, 2014.
  • 심층 분석 : 커널 밀도 추정.

요약

이 자습서에서 확률 밀도 추정에 대한 간단한 소개를 발견했습니다.

특히 배웠습니다.

  • 히스토그램 플롯은 데이터 샘플의 확률 밀도를 시각화하는 빠르고 안정적인 방법을 제공합니다.
  • 파라 메트릭 확률 밀도 추정에는 공통 분포를 선택하고 데이터 샘플에서 밀도 함수에 대한 매개 변수를 추정하는 것이 포함됩니다.
  • 비모수 확률 밀도 추정에는 커널 밀도 추정과 같은 데이터의 임의 분포에 모델을 맞추는 기술을 사용하는 것이 포함됩니다. on.

궁금한 점이 있으신가요?
아래 댓글로 질문하시면 최선을 다해 답변 드리겠습니다.

머신 러닝 확률을 파악하세요!

확률에 대한 이해 개발

… 단지 몇 줄의 Python 코드로

새로운 Ebook에서 방법 알아보기 :
Probability for Machine Learning

자습을 제공합니다. 튜토리얼 및 엔드 투 엔드 프로젝트 :
Bayes 정리, 베이지안 최적화, 분포, 최대 가능성, 교차 엔트로피, 모델 보정
그리고 훨씬 더 …

프로젝트

학문을 건너 뛰십시오. 결과 만. 내부 내용보기

트윗 공유 공유

Leave a Reply

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다