“차원의 저주”가 실제 데이터에 실제로 존재합니까?


17

나는 "차원의 저주"가 무엇인지 이해하고 높은 차원의 최적화 문제를 수행했으며 지수 가능성의 도전을 알고 있습니다.

그러나 "차원의 저주"가 대부분의 실제 데이터에 존재하는지 의심합니다. 이미지 나 비디오를 잠시 남겨두고 고객 인구 통계 및 구매 행동 데이터와 같은 데이터에 대해 생각하고 있습니다.

수천 개의 지형지 물로 데이터를 수집 할 수 있지만 지형지 물이 수천 차원의 공간에 완전히 퍼질 수는 없습니다. 이것이 치수 축소 기술이 인기있는 이유입니다.

즉, 데이터에 지수 수준의 정보가 포함되어 있지 않을 가능성이 높습니다. 즉, 많은 기능이 서로 관련이 있고 많은 기능이 80-20 규칙을 충족합니다 (많은 인스턴스의 값이 동일 함).

이 경우 KNN과 같은 방법이 여전히 합리적으로 작동한다고 생각합니다. (대부분의 책에서 "차원의 저주"는 차원> 10이 문제가 될 수 있다고 말합니다. 그들의 데모에서는 엔트로피가 정말로 높은 모든 차원에서 균일 한 분포를 사용합니다. 실제 세계에서는 이것이 일어날 것입니다.)

실제 데이터에 대한 개인적 경험은 "차원의 저주"가 템플릿 방법 (예 : KNN)에 너무 영향을 미치지 않으며 대부분의 경우 차원 ~ 100이 여전히 작동한다는 것입니다.

이것은 다른 사람들에게도 해당됩니까? (저는 5 년 동안 여러 산업 분야의 실제 데이터를 다루었지만이 책에서 설명한대로 "모든 거리 쌍이 비슷한 값을 가짐"을 보지 못했습니다.


1
이미지와 이미지 분석을 특별히 배제했기 때문에이 필드가 차원의 저주를 아주 정기적으로 처리한다고 말함으로써 의견에 플러그를 꽂겠습니다. 오 버핏 솔루션을 얻는 것은 매우 쉽습니다.
애쉬

7
진 / 더미 / 하나의 뜨거운 인코딩 된 범주 기능을 쉽게 거리 기반 모델을 날려 버릴 수 있습니다
shadowtalker

2
내 동료가 선글라스 판매와 협력했습니다. 상당히 많은 기능들이 가능한 많은 수의 레벨 (예를 들어, 브랜드, 안경의 다른 부분의 재료 등)로 범주 적이었습니다. 나는 CoD를 확실히 두려워했지만 특정 데이터 세트에 존재하는지 여부를 말하기는 항상 어렵습니다. 또한이 특정 분석 유형의 전문가가 아닌 많은 표준 트릭을 수행하지 않았을 것입니다.
S. Kolassa-복원 모니카

@StephanKolassa 그렇다면, 태양 유리 사용 사례에서 거리 기반 방법이 효과가 있었습니까?
Haitao Du

지나치게 좋지 않습니다. 그다지 성공적인 프로젝트는 아니 었습니다.
S. Kolassa-복원 모니카

답변:


15

이 논문 (1) 은 차원의 저주에 대한 대응책으로서 불균일성의 축복에 대해 논의 한다 . 주요 아이디어는 데이터가 피처 공간 내에 균일하게 분산되지 않으므로 데이터가 구성되는 방식을 식별하여 견인력을 얻을 수 있다는 것입니다.

(1) Pedro Domingos, "머신 러닝에 대해 알아야 할 몇 가지 유용한 정보"


7

기계 학습에서 차원의 저주는 더 많은 데이터 포인트 사이의 빈 공간을 폭발시키는 문제입니다. 매니 폴드 데이터가 낮 으면 데이터가 더 나빠질 수 있습니다. 다음은 1 개의 이웃으로 kNN을 시도하는 10000 샘플의 설정 예제입니다.

from numpy.random import normal
from sklearn.neighbors import KNeighborsClassifier
from sklearn.metrics import precision_score
import matplotlib.pyplot as plt
import numpy as np
from math import sqrt
from scipy.special import gamma

N=10000
N_broad=2
scale=20

dims=[]
precs=[]


def avg_distance(k):
    return sqrt(2)*gamma((k+1)/2)/gamma(k/2)

for dim in range(N_broad+1,30):
    clf = KNeighborsClassifier(1, n_jobs=-1)

    X_train=np.hstack([normal(size=(N,N_broad)), normal(size=(N,dim-N_broad))/avg_distance(dim-N_broad)/scale])
    y_train=(X_train[:,N_broad]>0).astype(int)
    clf.fit(X_train, y_train)

    X_test=np.hstack([normal(size=(N,N_broad)), normal(size=(N,dim-N_broad))/avg_distance(dim-N_broad)/scale])
    y_test=(X_test[:,N_broad]>0).astype(int)
    y_test_pred=clf.predict(X_test)

    prec=precision_score(y_test, y_test_pred)
    dims.append(dim)
    precs.append(prec)
    print(dim, prec)

plt.plot(dims, precs)
plt.ylim([0.5,1])
plt.xlabel("Dimension")
plt.ylabel("Precision")
plt.title("kNN(1) on {} samples".format(N))
plt.show()

완전히 균일 한 분포를 좋아하지 않았으므로 scale처음 두 좌표의 2D 평면 주위 에 더 작은 치수 (로 축소 )를 뿌린 2D 매니 폴드로 만들었습니다 . 이와 같이 작은 차원 중 하나는 예측 적입니다 (해당 차원이 양수이면 레이블이 1 임).

치수가 커질수록 정밀도가 급격히 떨어집니다.kNN 정밀도

물론 정밀도 = 0.5는 무작위 추측입니다. 비행기보다 더 복잡한 결정 표면을 가지면 훨씬 더 나빠질 것입니다.

kNN 공이 너무 희박하여 부드러운 초평면을 탐색하는 데 도움이되지 않습니다. 크기가 클수록 점점 외로워집니다.

반면에 SVM과 같은 방법은 전체적으로 볼 수 있으며 훨씬 더 좋습니다.


5

예를 들어 시계열 (및 이미지 및 오디오)을 고려하십시오 . 센서 판독 값 (Internet of Things)은 매우 일반적입니다.

차원의 저주는 생각보다 훨씬 일반적입니다. 이중화는 많지만 많은 노이즈가 있습니다.

문제는 많은 사람들이 단순히 실제 데이터의 이러한 과제를 피하고 동일한 체리 업 UCI 데이터 세트를 반복해서 사용한다는 것입니다.


(엑스)=(엑스1)=2(엑스|엑스1). Markov 속성은 차원의 저주를 정규화하고 극복하는 방법입니다. 그러나 시계열은 이미지 나 비디오와 비슷합니다.
Haitao Du

1
아마도 대부분의 실제 데이터 이미지, 비디오 및 시계열과 같은 센서에서 온 것일까 요?
익명-무스

2
@ hxd1011 markov 속성은 실제 데이터와 관련이없는 추상화입니다!
Sycorax는 Reinstate Monica

0

Breiman 의 "통계 모델링 : 두 문화" 라는 훌륭한 기사가 있습니다 . 그는 데이터를 다루는 두 그룹의 과학자들과 그들 각각이 "차원"을 보는 방법을 설명합니다. 귀하의 질문에 대한 답변은 귀하가 어느 그룹에 있는지에 따라 다릅니다. 용지를 확인하십시오.


감사합니다 @Zamir Akimbekov, 좋은 토론이있다 여기에 , 또 다른 흥미로운 종이 여기에
하이 타오 두
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.