수색…


낮은 분산 기능 제거

이것은 매우 기본적인 기능 선택 기술입니다.

그 기본 아이디어는 어떤 특징이 일정하다면 (즉, 0의 분산을 가짐), 흥미로운 패턴을 찾는 데 사용될 수없고, 데이터 세트에서 제거 될 수 있다는 것입니다.

결과적으로, 형상 제거에 대한 휴리스틱 접근법은 먼저 분산이 약간 (낮은) 임계 값 이하인 모든 피쳐를 제거하는 것입니다.

문서 에서 예제를 빌드하고, 다음과 같이 시작한다고 가정 해 보겠습니다.

X = [[0, 0, 1], [0, 1, 0], [1, 0, 0], [0, 1, 1], [0, 1, 0], [0, 1, 1]]

여기에는 각각 6 개의 인스턴스가있는 3 개의 부울 기능이 있습니다. 인스턴스의 80 % 이상에서 상수 인 인스턴스를 제거하려고한다고 가정합니다. 일부 확률 계산은 이러한 기능이 0.8 * (1 - 0.8) 보다 낮은 분산을 가져야 함을 나타 냅니다. 따라서 우리는

from sklearn.feature_selection import VarianceThreshold
sel = VarianceThreshold(threshold=(.8 * (1 - .8)))    
sel.fit_transform(X)
# Output: array([[0, 1],
                 [1, 0],
                 [0, 0],
                 [1, 1],
                 [1, 0],
                 [1, 1]])

첫 번째 기능이 제거 된 방법에 유의하십시오.

이 방법은 낮은 분산이 반드시 기능이 "흥미롭지 않음"을 의미하지는 않으므로주의해서 사용해야합니다. 3 개의 피처를 포함하는 데이터 세트를 구성하는 다음 예제를 고려하십시오. 첫 번째 두 개는 무작위로 분산 된 변수로 구성되고 세 번째는 균일 분포 된 변수로 구성됩니다.

from sklearn.feature_selection import VarianceThreshold
import numpy as np

# generate dataset
np.random.seed(0)

feat1 = np.random.normal(loc=0, scale=.1, size=100) # normal dist. with mean=0 and std=.1
feat2 = np.random.normal(loc=0, scale=10, size=100) # normal dist. with mean=0 and std=10
feat3 = np.random.uniform(low=0, high=10, size=100) # uniform dist. in the interval [0,10)
data = np.column_stack((feat1,feat2,feat3))

data[:5]
# Output:
# array([[  0.17640523,  18.83150697,   9.61936379],
#        [  0.04001572, -13.47759061,   2.92147527],
#        [  0.0978738 , -12.70484998,   2.4082878 ],
#        [  0.22408932,   9.69396708,   1.00293942],
#        [  0.1867558 , -11.73123405,   0.1642963 ]]) 

np.var(data, axis=0)
# Output: array([  1.01582662e-02,   1.07053580e+02,   9.07187722e+00])

sel = VarianceThreshold(threshold=0.1)
sel.fit_transform(data)[:5]
# Output:
# array([[ 18.83150697,   9.61936379],
#        [-13.47759061,   2.92147527],
#        [-12.70484998,   2.4082878 ],
#        [  9.69396708,   1.00293942],
#        [-11.73123405,   0.1642963 ]])

이제 첫 번째 기능은 분산이 낮기 때문에 제거되었으며 세 번째 기능 (가장 흥미롭지는 않음)은 유지되었습니다. 이 경우 스케일링과 독립적이기 때문에 변동 계수 를 고려하는 것이 더 적절했을 것입니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow