Vapnik-Chervonenkis(VC) 차원은 다양한 데이터 세트에 맞는 가설 세트의 용량을 측정한 것입니다. 이는 1970년대 Vladimir Vapnik과 Alexey Chervonenkis에 의해 소개되었으며 통계 학습 이론의 기본 개념이 되었습니다. VC 차원은 모델의 복잡성을 측정한 것으로, 모델이 다양한 데이터 세트에 얼마나 잘 맞는지 이해하는 데 도움이 됩니다.
SQL 데이터 유형
가설 집합 H의 VC 차원은 H에 의해 깨질 수 있는 점의 최대 수입니다. S의 점에 대한 가능한 모든 라벨링에 대해 다음과 같은 가설이 H에 존재하는 경우 가설 집합 H는 점 S의 집합을 깨뜨립니다. 포인트를 정확하게 분류합니다. 즉, 가설 세트는 해당 포인트의 가능한 라벨링에 적합할 수 있는 경우 포인트 세트를 깨뜨립니다.
VC의 경계 – 차원
VC 차원은 주어진 정확도 수준을 달성하는 데 필요한 훈련 예제 수에 대한 상한과 하한을 모두 제공합니다. 훈련 예제 수의 상한은 VC 차원에서 로그이고 하한은 선형입니다.
VC의 응용 – 디멘션
VC 차원은 다음과 같은 광범위한 응용 분야를 가지고 있습니다. 기계 학습 그리고 통계. 예를 들어 신경망, 지원 벡터 머신, 의사결정 트리의 복잡성을 분석하는 데 사용됩니다. VC 차원은 노이즈에 강하고 보이지 않는 데이터에 대해 잘 일반화할 수 있는 새로운 학습 알고리즘을 설계하는 데에도 사용할 수 있습니다.
VC 차원은 다중 클래스 분류 및 회귀와 같은 보다 복잡한 학습 시나리오로 확장될 수 있습니다. VC 차원의 개념은 계산 기하학 및 그래프 이론과 같은 컴퓨터 과학의 다른 영역에도 적용될 수 있습니다.
VC를 위한 코드 구현 – Dimension
VC 차원은 데이터에서 직접적으로 계산할 수 없는 이론적 개념입니다. 그러나 세트에 의해 깨질 수 있는 포인트 수를 계산하여 주어진 가설 세트에 대한 VC 차원을 추정할 수 있습니다. Python에서는 이 접근 방식을 사용하여 주어진 가설 집합의 VC 차원을 계산하는 함수를 구현할 수 있습니다.
이 함수는 가설 세트를 입력으로 사용하고 점과 레이블의 가능한 모든 조합을 확인하는 무차별 접근 방식을 사용하여 VC 차원을 계산합니다. itertools 모듈을 사용하여 포인트와 라벨의 가능한 모든 조합을 생성한 다음 가설 세트가 각 조합을 깨뜨릴 수 있는지 확인합니다. 이 함수는 가설 세트의 추정된 VC 차원을 반환합니다.
몇 가지 예를 통해 이 함수의 사용법을 설명해 보겠습니다.
예시 1:
f(x) = ax + b 형식의 모든 선형 함수로 구성된 가설 세트가 있다고 가정합니다. 여기서 a와 b는 실수입니다. Python에서 이 가설 세트를 다음과 같이 정의할 수 있습니다.
파이썬
자바 브레이크
import> itertools> > > def> vc_dimension(hypothesis_set):> > '''> > Estimates the VC dimension of a hypothesis set using the brute-force approach.> > '''> > n> => 4> > while> True> :> > points> => [(i, j)> for> i> in> range> (n)> for> j> in> range> (> 2> )]> > shattered_sets> => 0> > for> combination> in> itertools.combinations(points, n):> > is_shattered> => True> > for> labeling> in> itertools.product([> 0> ,> 1> ], repeat> => n):> > hypotheses> => [hypothesis_set(point)> for> point> in> combination]> > if> set> (hypotheses) !> => set> (labeling):> > is_shattered> => False> > break> > if> is_shattered:> > shattered_sets> +> => 1> > else> :> > break> > if> not> is_shattered:> > break> > n> +> => 1> > return> n> -> 1> if> shattered_sets> => => 2> *> *> n> else> n> -> 2> > > # Example 1: linear function hypothesis set> def> linear_function(point):> > x, y> => point> > return> int> (y>> => x)> > > print> (vc_dimension(linear_function))> |
>
자바의 이중
>
산출:
2>
예제 1에서 선형_함수 함수는 입력 지점의 y 좌표가 x 좌표보다 크거나 같으면 1을 반환하고 그렇지 않으면 0을 반환하는 간단한 선형 함수 가설 집합을 구현합니다. 그런 다음 vc_dimension 함수를 사용하여 이 가설 세트의 VC 차원(2)을 추정합니다.
예시 2:
f(x) = ax 형식의 모든 2차 함수로 구성된 가설 세트가 있다고 가정합니다.2+ bx + c. 여기서 a, b, c는 실수입니다. 우리는 이것을 정의할 수 있습니다 가설 Python에서 다음과 같이 설정합니다.
파이썬
자바 목록 정렬
import> itertools> > > def> vc_dimension(hypothesis_set):> > '''> > Estimates the VC dimension of a hypothesis set using the brute-force approach.> > '''> > n> => 5> > while> True> :> > points> => [(i, j)> for> i> in> range> (n)> for> j> in> range> (> 2> )]> > shattered_sets> => 0> > for> combination> in> itertools.combinations(points, n):> > is_shattered> => True> > for> labeling> in> itertools.product([> 0> ,> 1> ], repeat> => n):> > hypotheses> => [hypothesis_set(point)> for> point> in> combination]> > if> set> (hypotheses) !> => set> (labeling):> > is_shattered> => False> > break> > if> is_shattered:> > shattered_sets> +> => 1> > else> :> > break> > if> not> is_shattered:> > break> > n> +> => 1> > return> n> -> 1> if> shattered_sets> => => 2> *> *> n> else> n> -> 2> > > # Example 2: quadratic function hypothesis set> def> quadratic_function(point):> > x, y> => point> > return> int> (y>> => x> *> *> 2> )> > > print> (vc_dimension(quadratic_function))> |
>
>
산출:
영화배우 카잘
3>
예제 2에서quadratic_function 함수는 입력 지점의 y 좌표가 x 좌표의 제곱보다 크거나 같으면 1을 반환하고 그렇지 않으면 0을 반환하는 더 복잡한 2차 함수 가설 집합을 구현합니다. 그런 다음 vc_dimension 함수를 사용하여 이 가설 세트의 VC 차원인 3을 추정합니다.
결론
VC 차원은 가설 세트의 복잡성을 측정하는 통계 학습 이론의 기본 개념입니다. 이는 특정 수준의 정확도를 달성하는 데 필요한 훈련 예제 수에 대한 상한과 하한을 모두 제공합니다. Python에서는 점과 레이블의 가능한 모든 조합을 확인하는 무차별 접근 방식을 사용하여 주어진 가설 세트의 VC 차원을 추정할 수 있습니다. VC 차원은 기계 학습 및 통계 분야에서 광범위한 응용 프로그램을 갖고 있으며 보다 복잡한 학습 시나리오로 확장될 수 있습니다.