sklearn 특징 선택 라 이브 러 리 사용 소결

기계 모델 을 구축 할 때 모든 속성 이 모델 에 똑 같은 기 여 를 하 는 것 이 아니 라 속성 이 많 을 수록 모델 도 좋 은 것 이 아니다. 따라서 여러 속성 중에서 모델 수출 과 예측 결과 에 기여 하 는 가장 큰 특징 변 수 를 선택해 야 한다. 이 과정 을 특징 선택 이 라 고 한다. 특징 선택의 역할 은 변 수 를 없 애고 훈련 데 이 터 를 적 게 하 며 훈련 시간 을 절약 했다.동시에 모델 의 정확 도 를 제공 하고 의합 문 제 를 완화 시 킬 수 있다.
sklearn.feature_selection 모듈 은 특징 선택 알고리즘 을 실 현 했 는데 현 재 는 단일 변수 특징 선택 과 재 귀 특징 제거 등 을 포함한다.이 모듈 의 종 류 는 주로 특징 선택 이나 샘플 집합 에서 차원 을 낮 추고 알고리즘 의 정확 도 를 높이 거나 고위 데이터 집합 에서 표현 하 는 데 사용 된다.
①sklearn.feature_selection. Variance Threshold (threshold = 0.0): 특징의 분산 을 통 해 특징 을 추출 하고 기본 분산 이 0 인 특징 은 자동 으로 삭 제 됩 니 다.
  • 기본 삭제 분산 이 0 인 특징
  • In [1]: from sklearn.feature_selection import VarianceThreshold
       ...: X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
       ...: selector = VarianceThreshold()#  threshold=0.0
       ...: selector.fit_transform(X)
       ...:
    Out[1]:
    array([[2, 0],
           [1, 4],
           [1, 1]])
  • 지 정 된 방 차 한도 값 (threshold) 매개 변수: 특징 방 차 가 한도 값 보다 큰 특징 만 추출 하 는 것 을 나타 낸다
  • In [6]: from sklearn.feature_selection import VarianceThreshold
       ...: X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 6]]
       ...: selector = VarianceThreshold(threshold=2)
       ...: selector.fit_transform(X)
       ...:
    Out[6]:
    array([[0],
           [4],
           [1]])
    
    In [7]: selector.variances_
    Out[7]: array([ 0.        ,  0.22222222,  2.88888889,  2.        ])
  • variances 통과 하기속성 보기 견본 각 특징의 분산
  • In [2]: selector.variances_
    Out[2]: array([ 0.        ,  0.22222222,  2.88888889,  0.        ])
    
  • fit (X, y = None): 특징 벡터 X 에서 방 차 를 배우 고 sklearn. feature 로 돌아 갑 니 다.selection.variance_threshold. Variance Threshold 대상, y 인 자 는 sklearn. pipeline. Pipeline
  • 을 호 환 하기 위 한 것 입 니 다.
    In [8]: from sklearn.feature_selection import VarianceThreshold
       ...: X = [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 6]]
       ...: st = VarianceThreshold(threshold=2)
       ...: st.fit(X)
       ...: print(type(st.fit(X)))
       ...: st.variances_
       ...:
    
    Out[8]: array([ 0.        ,  0.22222222,  2.88888889,  2.        ])
  • fit_transform (X, y = None, * fit params): 추출 특징 변환 후의 배열 을 되 돌려 줍 니 다
  • In [9]: selector.fit_transform(X)
    Out[9]:
    array([[0],
           [4],
           [1]])
  • get_params (deep = True): 평가 기 인 자 를 가 져 와 사전 으로 되 돌려 줍 니 다
  • In [10]: selector.get_params(deep=True)
    Out[10]: {'threshold': 2}
  • get_support (indices = False): indices 매개 변수 가 False 이면 모든 특징의 불 배열 을 되 돌려 주 고 조건 을 만족 시 키 는 특징 은 True 이 며 만족 하지 않 는 특징 은 False 입 니 다.indices 가 True 라면 조건 을 만족 시 키 는 특징 열 에 대응 하 는 정수 로 구 성 된 배열
  • In [11]: selector.get_support(False)
    Out[11]: array([False, False,  True, False], dtype=bool)
    
    In [12]: selector.get_support(True)
    Out[12]: array([2], dtype=int64)
    
  • inverse_transform (X): X 에서 제거 한 특징 열 값 을 0 으로 바 꾼 배열 로 되 돌려 줍 니 다
  • In [13]: selector.inverse_transform(selector.fit_transform(X))
    Out[13]:
    array([[0, 0, 0, 0],
           [0, 0, 4, 0],
           [0, 0, 1, 0]])
  • set_params (* * params): 측정기 파라미터 설정
  • In [14]: selector.set_params(threshold=1)
    Out[14]: VarianceThreshold(threshold=1)
    
  • transform (X): 데이터 변환
  • In [15]: X2= [[0, 2, 0, 3], [0, 1, 4, 3], [0, 1, 1, 3]]
        ...: selector.transform(X2)
        ...:
    Out[15]:
    array([[0, 3],
           [4, 3],
           [1, 3]])

    ②sklearn.feature_selection. GenericUnivariate Select (score func =, mode = 'percentile', param = 1e - 05): 서로 다른 정책 을 설정 하여 단일 변수 특징 선택 을 할 수 있 고 초 매개 변수 변조 와 함께 최 적 단일 변수 선택 전략 을 선택 할 수 있 습 니 다.
    매개 변수 설명:
    score_func: 리 셋 함수, 함 수 는 X 와 y 두 개의 배열 을 받 아들 이 고 (scores, pvalues) 모듈 을 되 돌려 줍 니 다.
    mode: 특징 선택 모드, 옵션 가능: 'percentile', 'kbest’, ‘fpr’, ‘fdr’, ‘fwe’
    In [1]: from sklearn.datasets import load_iris
       ...: from sklearn.feature_selection import chi2
       ...: from sklearn.feature_selection import GenericUnivariateSelect
       ...: iris = load_iris()
       ...: X,y = iris.data , iris.target
       ...: s = GenericUnivariateSelect(score_func =chi2, mode='k_best',param=2)
       ...: s.fit_transform(X,y)
       ...:
    Out[1]:
    array([[ 1.4,  0.2],
           [ 1.4,  0.2],
           [ 1.3,  0.2],
           [ 1.5,  0.2],
           [ 1.4,  0.2],
           [ 1.7,  0.4],
            .....       
           [ 5.4,  2.3],
           [ 5.1,  1.8]])
    scores_속성: 각 특징의 score 보기
    In [2]: s.scores_
    Out[2]: array([  10.81782088,    3.59449902,  116.16984746,   67.24482759])
    pvalues_속성: 특징 별 P 값 보기
    In [3]: s.pvalues_
    Out[3]:
    array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
             2.50017968e-15])

    ③sklearn.feature_selection. selectKfest (score func =, k = 10): scores 는 오름차 순 으로 정렬 하고 앞 에 있 는 k 명 에 대응 하 는 특징 을 선택 합 니 다.
    매개 변수 설명: k 정수 또는 all
    속성 값:
    In [1]: from sklearn.datasets import load_iris
       ...: from sklearn.feature_selection import SelectKBest,chi2
       ...: iris = load_iris()
       ...: X,y  = iris.data,iris.target
       ...: s = SelectKBest(chi2, k='all').fit(X,y)
       ...:
    
    In [2]: s.scores_
    Out[2]: array([  10.81782088,    3.59449902,  116.16984746,   67.24482759])
    
    In [3]: s.pvalues_
    Out[3]:
    array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
             2.50017968e-15])
    
    In [4]: sk =SelectKBest(chi2, k=2).fit(X,y)
    
    In [5]: sk.scores_
    Out[5]: array([  10.81782088,    3.59449902,  116.16984746,   67.24482759])
    
    In [6]: sk.pvalues_
    Out[6]:
    array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
             2.50017968e-15])
    

    방법:
  • fit_transform (X, y = None, * fit params): 훈련 및 데이터 변환
  • In [7]: sk.fit_transform(X,y)
    Out[7]:
    array([[ 1.4,  0.2],
           [ 1.4,  0.2],
           [ 1.3,  0.2],
          ...
           [ 5.2,  2. ],
           [ 5.4,  2.3],
           [ 5.1,  1.8]])
  • get_support (indices = False): indices = False 는 불 배열 로 되 돌아 갑 니 다. 선택 한 특징 은 True 이 고 선택 하지 않 은 특징 은 False 입 니 다.indices = True 선택 특징 열의 정수 인덱스 되 돌려 주기
  • In [8]: sk.get_support(indices=False)
    Out[8]: array([False, False,  True,  True], dtype=bool)
    
    In [9]: sk.get_support(indices=True)
    Out[9]: array([2, 3], dtype=int64)
  • inverse_transform (X): 원래 X 크기 와 같은 배열 을 되 돌려 줍 니 다. 선택 하지 않 은 특징 은 0 으로 교체 합 니 다
  • In [11]: sk.inverse_transform(sk.fit_transform(X,y))
    Out[11]:
    array([[ 0. ,  0. ,  1.4,  0.2],
           [ 0. ,  0. ,  1.4,  0.2],
           [ 0. ,  0. ,  1.3,  0.2],
           [ 0. ,  0. ,  1.5,  0.2],
           ....
           [ 0. ,  0. ,  5.4,  2.3],
           [ 0. ,  0. ,  5.1,  1.8]])
    
  • transform (X): X 를 되 돌려 선택 한 특징 상 배열 로 내 려 가기
  • In [3]: sk.transform(X)
    Out[3]:
    array([[ 1.4,  0.2],
           [ 1.4,  0.2],
           [ 1.3,  0.2],
           [ 1.5,  0.2],
          ...
           [ 5.4,  2.3],
           [ 5.1,  1.8]])
    ④sklearn.feature_selection. select Percentile (score func =, percentile = 10): scores 는 오름차 순 으로 정렬 하여 100% percentile 에 대응 하 는 특징 을 선택 하 십시오.
    In [1]: from sklearn.datasets import load_iris
       ...: from sklearn.feature_selection import SelectPercentile,chi2
       ...: iris = load_iris()
       ...: X, y = iris.data, iris.target
       ...: sp=SelectPercentile(chi2, percentile=33).fit(X,y)
       ...: print(sp.scores_)
       ...: X_new = sp.fit_transform(X,y)
       ...: X_new[:10]
       ...:
    [  10.81782088    3.59449902  116.16984746   67.24482759]
    Out[1]:
    array([[ 1.4],
           [ 1.4],
           [ 1.3],
           [ 1.5],
           [ 1.4],
           [ 1.7],
           [ 1.4],
           [ 1.5],
           [ 1.4],
           [ 1.5]])
    
    In [2]: from sklearn.datasets import load_iris
       ...: from sklearn.feature_selection import SelectPercentile,chi2
       ...: iris = load_iris()
       ...: X, y = iris.data, iris.target
       ...: sp=SelectPercentile(chi2, percentile=34).fit(X,y)
       ...: print(sp.scores_)
       ...: X_new = sp.fit_transform(X,y)
       ...: X_new[:10]
       ...:
    [  10.81782088    3.59449902  116.16984746   67.24482759]
    Out[2]:
    array([[ 1.4,  0.2],
           [ 1.4,  0.2],
           [ 1.3,  0.2],
           [ 1.5,  0.2],
           [ 1.4,  0.2],
           [ 1.7,  0.4],
           [ 1.4,  0.3],
           [ 1.5,  0.2],
           [ 1.4,  0.2],
           [ 1.5,  0.1]])
    
    
    상기 percentile = 33 을 이해 하지 못 했 을 때 하나의 특징 만 선택 하고 percentile = 34 시 에 두 가지 특징 을 선택 했다. 이 비례 치 는 어떻게 계산 합 니까?남 겨 진 문제
    ⑤sklearn.feature_selection. selectFpr (score func =, alpha = 0.05): alpha 의 기본 값 은 0.05 이 며, 특징의 pvalues 를 걸 러 냅 니 다.지정 한 알파 보다 높 은 특징
    In [3]: from sklearn.datasets import load_iris
       ...: from sklearn.feature_selection import SelectFpr,chi2
       ...: iris = load_iris()
       ...: X, y = iris.data, iris.target
       ...: sp=SelectFpr(chi2, alpha=0.05).fit(X,y)
       ...:
    
    In [4]: sp.pvalues_
    Out[4]:
    array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
             2.50017968e-15])
    
    In [5]: sp.get_support(indices=True)
    Out[5]: array([0, 2, 3], dtype=int64)
    
    ⑥sklearn.feature_selection. selectFdr (score func =, alpha = 0.05) 는 SelectFpr 와 유사 합 니 다.
    In [6]: from sklearn.datasets import load_iris
       ...: from sklearn.feature_selection import SelectFdr,chi2
       ...: iris = load_iris()
       ...: X, y = iris.data, iris.target
       ...: sp=SelectFdr(chi2, alpha=0.004).fit(X,y)
       ...:
    
    In [7]: sp.pvalues_
    Out[7]:
    array([  4.47651499e-03,   1.65754167e-01,   5.94344354e-26,
             2.50017968e-15])
    
    In [8]: sp.get_support(indices=True)
    Out[8]: array([2, 3], dtype=int64)
    

    좋은 웹페이지 즐겨찾기