sklearn의 기능 엔지니어링(필터링, 임베딩 및 래핑)

목차

편집 기능 엔지니어링의 첫 번째 단계: 비즈니스 이해

필터 방식

분산 필터링 편집

편집 - 관련성 필터링

- 카이제곱 필터링

- F 테스트

- 상호 정보 방식

임베디드 방식 편집(임베디드)

포장 방법(래퍼)

여기에 이미지 설명 삽입
기능 엔지니어링의 첫 번째 단계: 비즈니스 이해


기능이 상대적으로 작고 이해하기 쉬운 경우 이전 Titanic 데이터 세트와 같이 기능 선택을 스스로 판단할 수 있습니다. 그러나 금융, 의료 및 전자 상거래와 같은 실제 데이터 응용 분야에서 우리 데이터는 타이타닉 데이터만큼 적고 분명한 특징을 가질 수 없습니다. 그렇다면 극단적인 상황에 직면하고 비즈니스에 대한 이해를 바탕으로 기능을 선택할 수 없다면 어떻게 해야 할까요? 특징을 선택하는 데 사용할 수 있는 네 가지 방법(필터링, 포함, 래핑 및 차원 감소)이 있습니다.

 

필터 방식


필터링 방법은 종종 전처리 단계로 사용되며 기능 선택은 기계 학습 알고리즘과 완전히 독립적입니다. 다양한 통계 테스트의 점수와 다양한 상관 지표를 기반으로 기능을 선택합니다.

여기에 이미지 설명 삽입
분산 필터링


VarianceThreshold
예를 들어, 특성 자체의 분산이 매우 작다는 것은 샘플이 기본적으로 이 특성에 차이가 없다는 것을 의미합니다. 특성에 있는 대부분의 값이 동일하거나 심지어 전체 특성의 값이 동일하면 이 특성은 샘플 구별에 영향을 미치지 않습니다.
따라서 다음 기능 엔지니어링이 무엇을 하든 분산이 0인 기능을 먼저 제거해야 합니다. VarianceThreshold에는 분산의 임계값을 나타내는 중요한 매개 변수 임계값이 있으며, 이는 임계값보다 작은 분산이 있는 모든 기능을 버리는 것을 의미합니다. 채워지지 않으면 기본값은 0, 즉 동일한 레코드가 있는 모든 기능을 삭제합니다.

 

먼저 원래 함수를 가져옵니다.

import pandas as pd
data = pd.read_csv(r'F:\data\digit recognitionr.csv')

원래 함수의 모양은 (42000, 784)
이고 분산 필터링을 사용합니다.

from sklearn.feature_selection import VarianceThreshold
selector = VarianceThreshold() # 인스턴스화, 매개변수 없이 기본 분산은 0
X_var0 = selector.fit_transform(X) # 자격이 없는 기능을 삭제한 후 새 기능 매트릭스 가져오기
# Equivalent to X_var0 = selector.fit_transform( VarianceThreshold ())

분산 필터링 후 함수의 모양은 (42000, 708)입니다
. 지금까지 분산이 0인 모든 기능이 삭제되었습니다.
고유값의 절반만 유지하려면 다음을 수행할 수 있습니다.

import numpy as np
np.median(X.var().values) # 이 단계는 중앙값을 취하는 것입니다
X_fsvar = VarianceThreshold(np.median(X.var().values)).fit_transform(X)

X_fsvar 이때 .shape is (42000, 392)
물론 처음 50을 얻으려면 값을 먼저 정렬한 다음 임계값을 50의 분산으로 정의할 수 있습니다.

또한, 분산이 이진분류일 때 피처의 값은 베르누이 랜덤변수이고 이들 변수의 분산은 Var[X] = p(1-p)로 계산할 수 있으며, p는 이진분류의 클래스이다. 분류 기능 이 기능이 설명하는 확률입니다.
특정 범주가 2개 범주 기능의 80% 이상을 차지하면 해당 기능을 삭제한다고 정의할 수 있습니다.

X_bvar = VarianceThreshold(.8 * (1 - .8)).fit_transform(X)

분산 필터링이 모델에 미치는 영향 이
작업을 수행한 후 모델 효과에 어떤 영향을 줍니까? 여기에서는 분산 필터링 전과 후의 KNN과 랜덤 포레스트의 효과와 실행 시간을 비교하여 준비했습니다.

다양한 분산 필터링 효과 하에서 #KNN 대 랜덤 포레스트 비교
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.neighbors import KNeighborsClassifier as KNN
from sklearn.model_selection import cross_val_score
import numpy as np
X = data.iloc[:,1:]
y = data.iloc[:,0]
X_fsvar = VarianceThreshold(np.median(X.var().values)).fit_transform(X)
#======【시간 경고: 35분 +】==== == #
cross_val_score(KNN(),X,y,cv=5).mean()
#파이썬의 마법 명령, %%timeit을 직접 사용하여 이 셀에서 코드를 실행하는 데 필요한 시간을 계산할 수 있습니다.
#계산하기 위해 이 셀에서 코드를 여러 번(보통 7번) 실행하고 평균값을 계산해야 하므로 %%timeit을 실행하는 시간은 셀에서 코드를 단독으로 실행하는 시간보다 훨씬 길 것입니다
#
=== == =【시간 경고: 4시간】======#
%%timeit
cross_val_score(KNN(),X,y,cv=5).mean()
#======【시간 경고:20분+】======#
cross_val_score(KNN(),X_fsvar,y,cv=5).mean()
#======【시간 경고: 2시간】======#
%%timeit
cross_val_score(KNN(),X,y,cv=5).mean()
cross_val_score(RFC(n_estimators=10,random_state=0),X,y,cv= 5).mean()
차이


분산 필터링 전 KNN 결과

여기에 이미지 설명 삽입
#======【시간 경고: 20분+】======#
cross_val_score(KNN(),X_fsvar,y,cv=5).mean()
#======【시간 경고: 2시간】======#
%%timeit
cross_val_score(KNN(),X,y,cv=5).mean()

분산 필터링 후 KNN 결과

 여기에 이미지 설명 삽입

 

정확도는 약간 향상되었지만 평균 실행 시간은 10분 단축되었으며 알고리즘의 효율성은 기능 선택 후 1/3 증가했습니다.
랜덤 포레스트는 어떻습니까?
랜덤 포레스트 분산 필터링 전

여기에 이미지 설명 삽입

 

랜덤 포레스트 분산 필터링 후

여기에 이미지 설명 삽입

 

가장 먼저 관찰할 수 있는 것은 Random Forest의 정확도는 KNN보다 약간 떨어지지만 실행 시간은 KNN의 1% 미만으로 불과 10초 이상 소요된다는 것입니다. 둘째, 분산 필터링 후 랜덤 포레스트의 정확도도 약간 증가했지만 실행 시간은 거의 변하지 않았으며 여전히 11초입니다.
랜덤 포레스트가 왜 그렇게 빨리 실행됩니까? 분산 필터링이 랜덤 포레스트에 큰 영향을 미치지 않는 이유는 무엇입니까? 이는 두 알고리즘의 원리에 관련된 연산량의 차이 때문이다. Nearest Neighbor Algorithm KNN, Single Decision Tree, Support Vector Machine SVM, Neural Network, Regression Algorithm 모두 계산을 수행하기 위해 특징을 순회하거나 차원을 늘려야 하기 때문에 자체적으로 계산량이 많고 시간이 오래 걸리므로 Feature 분산 필터링과 같은 선택이 특히 중요합니다. 하지만 Random Forest와 같이 특징을 순회할 필요가 없는 알고리즘의 경우 분기할 특징을 임의로 선택하고 작업 자체가 매우 빠르기 때문에 특징 선택은 보통입니다. 이것은 실제로 이해하기 쉽습니다. 필터링 방법이 피처 수를 어떻게 줄이든지 간에 Random Forest는 모델링할 고정 수의 피처만 선택합니다. 가장 가까운 이웃 알고리즘은 다르며 피처가 적을수록 차원이 작아집니다. 거리 계산, 모델 분명히 기능이 줄어들수록 더 가벼워집니다. 따라서 필터링 방법의 주요 목적은 특징을 순회하거나 차원을 증가시켜야 하는 알고리즘이며, 필터링 방법의 주요 목적은 알고리즘이 알고리즘의 성능을 유지하면서 컴퓨팅 비용을 줄이는 데 도움이 되는 것입니다.
일반적으로
분산 필터링의 효과는 다음과 같습니다.

여기에 이미지 설명 삽입
- 관련성 필터링


분산을 선택한 후 다음 질문인 상관관계를 고려해야 합니다. 레이블과 관련이 있고 의미 있는 기능을 선택하려고 합니다. 이러한 기능은 많은 정보를 제공할 수 있기 때문입니다. 기능이 레이블과 연결되어 있지 않으면 계산 메모리가 낭비되고 모델에 노이즈가 발생할 수 있습니다. sklearn에는 기능과 레이블 간의 상관 관계를 판단하는 데 일반적으로 사용되는 세 가지 방법인 카이 제곱, F-테스트 및 상호 정보가 있습니다.

- 카이제곱 필터링


카이 제곱 필터링은 불연속 레이블(즉, 분류 문제)을 위한 특수 상관 필터입니다. 카이 제곱 검정 클래스인 feature_selection.chi2는 음수가 아닌 각 기능과 레이블 사이의 카이 제곱 통계를 계산하고 카이 제곱 통계에 따라 기능의 순위를 높음에서 낮음으로 지정합니다. 가장 높은 점수를 받은 상위 K 기능을 선택하기 위해 "점수 기준"을 입력할 수 있는 feature_selection.SelectKBest와 결합하여 레이블과 독립적일 가능성이 가장 높고 분류 목적과 관련이 없는 기능을 제거하는 데 사용할 수 있습니다.
또한 카이제곱 검정에서 특성의 모든 값이 동일하다고 감지되면 먼저 분산 필터링을 수행하기 위해 분산을 사용하라는 메시지가 표시됩니다. 또한 분산 필터링을 사용하여 기능의 절반을 필터링하면 모델의 성능이 향상되는 것을 방금 확인했습니다. 그래서 여기서는 임계치=중앙값일 때 완성된 분산 필터링된 데이터를 카이제곱 검정을 하기 위해 사용한다. ):

 

from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2 #Chi Square Test
# 여기서 300개의 기능이 필요하다는 것을 알고 있다고 가정합니다
. X_fschi = SelectKBest(chi2,k= 300 ). fit_transform(X_fsvar,Y)
cross_val_score(RFC(n_estimators=10,random_state=0),X_fschi,Y,cv=5).mean() cross_val_score(RFC(n_estimators=10,random_state=0) ,X_fsvar,Y, cv
= 5).mean()

메서드 필터링에 중앙값을 사용했을 때 교차 확인 점수가 0.9388098166696807이었으나 카이제곱 필터링 후 교차 확인 점수가 0.9333098667649198이 되어 감소했습니다!
이는 K=300 설정에 문제가 있고 K 값이 너무 작게 조정되었음을 나타냅니다.
K 값을 선택하는 방법?
우리는 학습 곡선을 가지고 실행할 수 있습니다.

%matplotlib inline
import matplotlib.pyplot as plt
score = []
for i in range(390,200,-10):
    X_fschi = SelectKBest(chi2,k=i).fit_transform(X_fsvar,Y)
    once = cross_val_score(RFC(n_estimators=10) ,random_state=0),X_fschi,Y,cv=5).mean()
    score.append(once)
plt.plot(range(390,200,-10),score)
plt.show()
여기에 이미지 설명 삽입

 

k 값을 선택하는 또 다른 방법: p 값을 보고 k 값을 선택합니다.
방법: p 값을 보고 k 값을 선택합니다.
카이 제곱 테스트의 본질은 두 데이터 그룹 간의 차이를 추론하는 것이며 테스트의 원래 가설은 "두 데이터 그룹이 서로 독립적입니다."입니다. 카이 제곱 검정은 카이 제곱 값과 P 값의 두 가지 통계를 반환하는데 그 중 카이 제곱 값은 유효 범위를 정의하기 어렵고 p 값은 일반적으로 0.01 또는 0.05를 유의 수준으로 사용합니다. , 이는 p 값 판단의 경계입니다.구체적으로는 다음과 같이 볼 수 있습니다.

Feature Engineering의 관점에서 우리는 큰 카이제곱 값과 0.05 미만의 p-value, 즉 레이블과 연관된 기능을 선택하기를 희망합니다. SelectKBest를 호출하기 전에 chi2로 인스턴스화된 모델에서 각 기능에 해당하는 카이제곱 값과 P 값을 직접 얻을 수 있습니다.

chivalue, pvalues_chi = chi2(X_fsvar,Y)
#k는 얼마를 차지합니까? 0.05 또는 0.01과 같이 설정된 값보다 큰 p-값을 가진 모든 기능을 제거하려고 합니다.
k = chivalue.shape[0] - (pvalues_chi > 0.05).sum()
 

- F 테스트


ANOVA라고도 하는 F 테스트는 각 기능과 레이블 간의 선형 관계를 캡처하는 데 사용되는 필터링 방법입니다. 회귀와 분류를 모두 수행할 수 있으므로
feature_selection.f_classif(F 테스트 분류) 및 feature_selection.f_regression(F 테스트 회귀)의 두 클래스를 포함합니다. F-테스트 분류는 레이블이 불연속 변수인 데이터에 사용되는 반면 F-테스트 회귀는 레이블이 연속 변수인 데이터에 사용됩니다.
F 테스트의 본질은 두 데이터 세트 간의 선형 관계를 찾는 것이며 귀무 가설은 "데이터에 유의미한 선형 관계가 없습니다"입니다. F값과 p값의 두 가지 통계를 반환합니다. 카이제곱 필터링과 마찬가지로 레이블과 유의미한 선형 관계가 있는 0.05 또는 0.01 미만의 p-값을 가진 기능을 선택하려고 하며 0.05 또는 0.01보다 큰 p-값을 가진 기능은 유의하지 않은 기능으로 간주됩니다. 레이블과의 선형 관계. , 제거해야 합니다. F 테스트의 분류를 예로 들어 디지털 데이터 세트에서 기능 선택을 계속 수행합니다.

from sklearn.feature_selection import f_classif
F, pvalues_f = f_classif(X_fsvar,Y)
k = F.shape[0] - (pvalues_f > 0.05).sum()
 

- 상호 정보 방식


상호 정보 방법은 각 기능과 레이블 간의 모든 관계(선형 및 비선형 관계 포함)를 캡처하는 데 사용되는 필터링 방법입니다. F 테스트와 유사하게 회귀 및 분류를 모두 수행할 수 있으며 feature_selection.mutual_info_classif(상호 정보 분류) 및
feature_selection.mutual_info_regression(상호 정보 회귀)의 두 클래스를 포함합니다. 이 두 클래스의 사용법과 매개 변수는 F 테스트와 정확히 동일하지만 상호 정보 방법은 F 테스트보다 강력하며 F 테스트는 선형 관계만 찾을 수 있지만 상호 정보 방법은 모든 관계를 찾을 수 있습니다. .

from sklearn.feature_selection import mutual_info_classif as MIC
result = MIC(X_fsvar,y)
k = result.shape[0] - sum(result <= 0)
#X_fsmic = SelectKBest(MIC, k=채우기 특정 k).fit_transform(X_fsvar , y)
#cross_val_score(RFC(n_estimators=10,random_state=0),X_fsmic,y,cv=5).mean()

제안:
분산 필터링을 먼저 사용한 다음 상호 정보 방법을 사용하여 상관 관계를 캡처합니다.

여기에 이미지 설명 삽입
임베디드


따라서 필터링 방식**에 비해 임베딩 방식의 결과가 모델 자체의 효용에 더 정확할 것이며 모델**의 효율성 향상에 더 좋은 영향을 미칠 것입니다. 또한 피처의 모델 기여도를 고려하여 관련 없는 피처(상관 필터링이 필요한 피처)와 무차별 피처(분산 필터링이 필요한 피처)는 모델에 대한 기여도가 부족하여 삭제되며, 이는 설명할 수 있습니다. 필터링으로 법의 진화.

 여기에 이미지 설명 삽입

 

필터링 없이 임베딩 방식을 직접 사용할 수 있습니다.

feature_selection.SelectFromModel

여기에 이미지 설명 삽입

 

처음 두 매개변수가 가장 중요합니다.
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier as RFC
RFC_ = RFC(n_estimators = 10,random_state = 0) # 랜덤 포레스트의 인스턴스화
X_embedded = SelectFromModel(RFC_, 임계값=0.005).fit_transform(X,Y)
X_embedded The .shape 의 결과

는 (42000, 47)
0.005의 임계값은 780개 기능의 데이터에 대해 매우 높으며 여기에서 모델의 차원이 크게 줄어듭니다.
마찬가지로 학습 곡선을 그려서 최적의 임계값을 찾을 수도 있습니다.

numpy를 np로 가져오기
matplotlib.pyplot을 plt로 가져오기
RFC_.fit(X,Y).feature_importances_

임계값 = np.linspace(0,(RFC_.fit(X,Y).feature_importances_).max(),20)


임계값에서 i에 대한 점수 = [] :
    X_embedded = SelectFromModel(RFC_,threshold=i).fit_transform(X,Y)
    once = cross_val_score(RFC_,X_embedded,Y,cv=5).mean()
    score.append(once)
plt.plot(threshold,score)
plt.show()

대기표:

여기에 이미지 설명 삽입

 

임계값이 높아질수록 모델의 효과는 점차 악화되고 점점 더 많은 기능이 삭제되며 정보 손실이 점차 증가합니다. 그러나 0.00134 이전에는 모델의 효과가 0.93 이상으로 유지될 수 있으므로 여기서 값을 선택하여 모델의 효과를 확인할 수 있습니다.

X_embedded = SelectFromModel(RFC_,threshold = 0.00067).fit_transform(X,Y)
X_embedded.shape
cross_val_score(RFC_,X_embedded,Y,cv=5).mean()

代码结果为
(42000, 324)
0.939905083368037

분산을 필터링할 때 중앙값으로 필터링한 결과의 392개 열보다 순간적으로 특징 수가 324개 이상으로 줄어드는 것을 볼 수 있으며, 교차 검증 점수 0.9399는 분산 필터 후 0.9388의 결과, 즉 임베딩 방법이 분산 필터링보다 모델의 성능에 더 구체적이기 때문에 알고리즘을 변경하고 동일한 임계값을 사용하면 효과가 그리 좋지 않을 수 있습니다.

다른 조정 매개변수와 마찬가지로 첫 번째 학습 곡선 이후 범위를 선택하고 정제된 학습 곡선을 사용하여 최상의 값을 찾을 수 있습니다.

score2 = []
for i in np.linspace(0,0.00134,20):
    X_embedded = SelectFromModel(RFC_, threshold=i).fit_transform(X,Y)
    once = cross_val_score(RFC_, X_embedded, Y, cv=5). 평균()
    score2.append(once)
plt.figure(figsize=[20,5])
plt.plot(np.linspace(0,0.00134,20),score2)
plt.xticks(np.linspace(0,0.00134, 20))
plt.쇼()
 


X_embedded = SelectFromModel(RFC_,threshold=0.000564).fit_transform(X,Y)
X_embedded.shape
cross_val_score(RFC_,X_embedded,Y,cv=10).mean()

기존 모델의 최상의 결과를 찾았을 수 있습니다.
(42000, 340)
0.9414774325210074
랜덤 포레스트의 매개 변수를 조정하면 어떻게 될까요?

cross_val_score(RFC(n_estimators=100,random_state=0),X_embedded,Y,cv=5).mean()

0.9639525817795566

얻은 특징의 수는 분산 스크리닝보다 여전히 적고 모델의 성능은 스크리닝 없이 이전보다 높으며 이는 이미 30분 동안 한 번 계산된 KNN과 비교할 수 있습니다(KNN의 정확도는 96.58%). the random forest 매개변수를 조정하면 정확도를 많이 높일 수 있을 것입니다. 임베딩 방법에서 특징 선택의 목표인 계산량을 줄이고 모델의 성능을 향상시키는 것을 쉽게 달성할 수 있음을 알 수 있습니다. 따라서 임베딩은 많은 통계에 대해 생각하는 필터링보다 더 효율적인 접근 방식일 수 있습니다. 그러나 알고리즘 자체가 매우 복잡한 경우 필터링 방법의 계산이 임베딩 방법보다 훨씬 빠르므로 대용량 데이터에서는 여전히 필터링 방법에 우선 순위를 부여합니다.

포장 방법(래퍼)

여기에 이미지 설명 삽입

 

래퍼는 초기 기능 세트에서 추정기를 훈련하고 coef_attribute 또는 feature_importances_attribute를 통해 각 기능의 중요성을 얻습니다. 그런 다음 가장 중요하지 않은 기능이 현재 기능 집합에서 제거됩니다. 이 프로세스는 원하는 기능 수에 도달할 때까지 프루닝된 세트에서 재귀적으로 반복됩니다. 필터링 방식과 임베딩 방식과 달리 일회성 훈련은 모든 문제를 해결하고, 패키징 방식은 여러 번의 훈련을 위해 특징 부분 집합을 사용해야 하므로 가장 높은 계산 비용이 필요합니다.

가장 일반적인 목적 함수는 재귀적 특징 제거 방법(Recursive Feature Elimination, 줄여서 RFE)입니다. 가장 성능이 좋은 기능 하위 집합을 찾도록 설계된 욕심 많은 최적화 알고리즘입니다. 반복적으로 모델을 구축하고 각 반복에서 최상의 특징을 유지하거나 최악의 특징을 제거하고 다음 반복에서는 이전 모델링에서 선택하지 않은 특징을 사용하여 모든 특징이 소진될 때까지 다음 모델을 구축합니다. 가능한 멀리. 그런 다음 유지되거나 삭제된 순서에 따라 기능의 순위를 매기고 마지막으로 최상의 하위 집합을 선택합니다. 패키징 방법의 효과는 모든 특징 선택 방법 중에서 모델의 성능 향상에 가장 도움이 되며 매우 적은 특징을 사용하여 우수한 결과를 얻을 수 있습니다. 또한 피처의 개수가 같은 경우에는 패킹 방식과 임베딩 방식의 효과를 비교할 수 있지만 임베딩 방식에 비해 속도가 느려 너무 큰 데이터에는 적합하지 않다. 그에 반해 래핑 방식은 모델 효과를 가장 잘 보장할 수 있는 특징 선택 방식이다.

feature_selection.RFE
클래스 sklearn.feature_selection.RFE(estimator,n_features_to_select=None,step=1,verbose=0)

여기에 이미지 설명 삽입

 

from sklearn.feature_selection import RFE
RFC_ = RFC(n_estimators=10, random_state=0) selector = RFE(RFC_, n_features_to_select=340, step=50).fit(X,Y) #340
방금 임베딩 방식으로 선택한
셀렉터. sum() #support는 부울 행렬
반환
합니다
.

다음으로 래퍼에 대한 학습 곡선을 그립니다.


점수 = 범위(1,751,50)의 i에 대한 [] :
    X_wrapper = RFE(RFC_, n_features_to_select=i, 단계=50).fit_transform(X,Y)
    한 번 = cross_val_score(RFC_, X_wrapper, Y, cv=5). mean()
    score.append(once)
plt.figure(figsize=[20,5])
plt.plot(range(1,751,50),score)
plt.xticks(range(1,751,50))
plt.show()
여기에 이미지 설명 삽입

 

패키징 방식에서는 50개의 특징을 적용했을 때 모델의 성능이 90% 이상에 도달하여 임베딩 방식과 필터링 방식보다 훨씬 효율적이라는 것을 분명히 알 수 있습니다. 이미지를 확대하고 모델이 매우 안정적인 지점을 찾아 추가 학습 곡선을 그릴 수 있습니다(임베딩에서 했던 것처럼). 현재 우리가 추구하는 것이 모델의 실행 시간을 최소화하는 것이라면 특징 수를 94%로 줄이는 것을 기준으로 특징 수를 50개까지 직접 선택할 수 있으며 모델 성능도 다음과 같이 보장할 수 있습니다. 90% 이상 기능의 조합이 비효율적이지 않습니다.

또한 기능의 수가 같을 때 래퍼가 임베딩을 능가할 수 있다고 언급했습니다. 우리도 340을 피처의 개수로 사용하는지 확인해보고 실행해보면 패키징 방식과 임베딩 방식 중 어느 것이 더 빠른지 느낄 수 있습니다. 래핑 방식의 효과는 임베딩 방식과 비슷하기 때문에 더 작은 범위의 학습 곡선을 사용하면 래핑 방식의 효과도 아주 잘 조절할 수 있으니 시도해 볼 수 있습니다.

Feature Engineering 요약
데이터의 양이 많을 때는 분산 필터링과 상호 정보 조정이 선호되며, 그 다음에는 다른 Feature 선택 방법이 있습니다.
로지스틱 회귀를 사용하는 경우 임베딩 방법이 선호됩니다.
서포트 벡터 머신을 사용할 때는 래퍼가 선호됩니다.

원본 링크: https://blog.csdn.net/xlperpetual/article/details/103402737

이 글은 참 잘 썼다고 생각하는데 조회수가 너무 적어서 더 많은 사람들이 배울 수 있도록 모두의 시야에 들여오고 싶습니다.

추천

출처blog.csdn.net/m0_63309778/article/details/130682922