sklearn 라이브러리의 데이터 표현 및 기능 엔지니어링

이 기사는 주로 두 부분으로 구성되어 있는데 첫 번째 부분은 특징 데이터의 변환으로 선형 모델과 같이 복잡성이 낮은 모델에 특히 유용하며 두 번째 부분은 특징 선택입니다.


특정 애플리케이션의 경우 최상의 데이터 표현을 찾는 방법은 실제 문제를 해결하려고 할 때 데이터 과학자 및 기계 학습 실무자의 주요 작업 중 하나 인 기능 공학이라는 문제입니다.

기능 유형 영문 이름 별명 영문 이름
수치 적 특성 수치 적 특징 연속 기능 연속 기능
분류 기능 범주 기능 이산 기능 이산 기능

데이터를 올바른 방식으로 표현하면 선택된 정확한 매개 변수보다 감독되는 모델의 성능에 더 큰 영향을 미칩니다.

1. 범주 형 변수

1.1 원-핫 인코딩 (더미 변수)
부호화 영문 이름 별칭 1 별칭 2
원-핫 인코딩 원-핫 인코딩 N은 하나의 인코딩을 취합니다 (one-out-of-N 인코딩). 대체 가능한 임시 변수

더미 변수의 기본 개념은 범주 형 변수를 하나 이상의 새 기능으로 바꾸는 것이며 새 기능은 0과 1의 값을 갖습니다.

1.2 숫자로 코딩 된 범주 형 변수를 다루는 방법은 무엇입니까?

pandas의 get_dummies 함수 모든 숫자를 연속으로 처리 하고 이에 대한 더미 변수를 생성하지 않습니다.

이 문제를 해결하기 위해 scikit-learn의 OneHotEncoder를 사용하여 연속적인 변수와 이산적인 변수를 지정할 수 있으며 데이터 프레임의 숫자 열을 문자열로 변환 할 수도 있습니다.

  • 방법 1 : pd.get_dummies ()를 사용 하여 인코딩 할 열 표시
demo_df = pd.DataFrame({
    
    'Integer Feature': [0, 1, 2, 1],'Categorical Feature': ['socks', 'fox', 'socks', 'box']})
demo_df['Integer Feature'] = demo_df['Integer Feature'].astype(str)
pd.get_dummies(demo_df, columns=['Integer Feature', 'Categorical Feature']) # 显示给出想要编码的列

여기에 사진 설명 삽입

  • 방법 2 : OneHotEncoder 클래스를 사용 하여 인코딩
from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=False)
encoder.fit(demo_df)
encoder.transform(demo_df)

2. 비닝 (이 분화) : 주로 선형 모델 용

기능 비닝 (이산화, 즉 이산화라고도 함)을 사용하여 여러 기능으로 나눕니다.

bins = np.linspace(-3, 3, 11)  # 生成[-3,3]的10个区间
which_bin = np.digitize(X, bins=bins)  # 返回相同形状的保存X位于区间的数组,区间从1计数 
  • 요약하자면
  1. 비닝 기능은 일반적으로 트리 기반 모델에 대해 더 나은 결과를 생성하지 않습니다.이 모델은 모든 위치에서 데이터를 나누는 방법을 배울 수 있기 때문입니다. 어떤 의미에서 의사 결정 트리는 이러한 데이터를 예측하는 데 비닝이 가장 유용한 방법을 배울 수 있습니다.

  2. 특정 데이터 세트의 경우 선형 모델을 사용해야하는 이유가있는 경우 (예 : 데이터 세트가 크고 차원이 높지만 일부 기능과 출력 간의 관계가 비선형 인 경우) 비닝은 모델링 기능을 개선하는 좋은 방법입니다.


세 가지, 대화 형 기능 및 다항식 기능

특히 선형 모델의 경우 특징 표현을 강화하기 위해 원본 데이터의 상호 작용 특징과 다항식 특징을 추가 할 수 있습니다.

  • 대화 형 기능
X_combined = np.hstack([X, X_binned])  # 将原特征和分箱编码后的特征作为输入特征,横向拼接
X_product = np.hstack([X_binned, X * X_binned])
  • 다항식 기능 : 전처리 모듈의 PolynomialFeatures 에서 구현 됨
from sklearn.preprocessing import PolynomialFeatures
# 默认的"include_bias=True"添加恒等于1的常数特征
# degree是针对所有特征
poly = PolynomialFeatures(degree=10, include_bias=False)
X = np.array([1,2]).reshape(-1,1)
poly.fit(X)
X_poly = poly.transform(X)

기능의 의미는 get_feature_names 메소드 를 호출하여 얻을 수 있으며 각 기능의 색인을 제공 할 수 있습니다.

poly.get_feature_names()

여기에 사진 설명 삽입


네, 일 변량 비선형 변환

대부분의 모델은 각 기능 (회귀 문제의 대상 값 포함)이 대략 가우스 분포를 따를 때 가장 잘 수행됩니다.

트리 기반 모델은 특성의 순서에만 초점을 맞추지 만 선형 모델과 신경망은 각 특성의 규모와 분포에 의존합니다.

회귀 문제의 경우. log 및 exp 함수는 데이터의 상대적 비율을 조정하여 선형 모델 또는 신경망의 학습 효과를 개선하는 데 도움이 될 수 있습니다.

sin 및 cos 함수는주기적인 패턴을 가진 데이터를 다룰 때 매우 유용합니다.
여기에 사진 설명 삽입
위 그림에서 이러한 유형의 값 분포 (많은 작은 값과 매우 큰 값)는 실제로 매우 일반적입니다. 일반적으로 데이터 세트는 다음과 같이 변환됩니다.

X_train_log = np.log(X_train + 1)
X_test_log = np.log(X_test + 1)

변환 후에는 데이터 분포의 비대칭이 작아지고 더 이상 큰 이상 값이 없습니다.


1 부 요약

  • 비닝, 다항식 및 상호 작용 항은 모두 주어진 데이터 세트, 특히 선형 모델 및 나이브 베이 즈 모델과 같이 복잡성이 낮은 모델의 모델 성능에 큰 영향을 미칩니다.

  • 트리 기반 모델은 일반적으로 중요한 상호 작용 용어를 스스로 발견 할 수 있으며 대부분의 경우 데이터를 명시 적으로 변환 할 필요가 없습니다.

  • SVM, 최근 접 이웃 및 신경망과 같은 다른 모델은 때때로 비닝, 상호 작용 항 또는 다항식을 사용하여 이점을 얻을 수 있지만 그 효과는 일반적으로 선형 모델만큼 분명하지 않습니다.


5. 자동 기능 선택 (주로 sklearn.feature_selection 사용)

새로운 기능을 추가하거나 일반적인 고차원 데이터 세트를 처리 할 때 가장 유용한 기능 만 포함하도록 기능 수를 줄이고 나머지 기능은 삭제하는 것이 가장 좋습니다. 이것은 더 나은 일반화 기능을 가진 더 단순한 모델을 만들 것입니다.

기본 전략 영문 이름
일 변량 통계 일 변량 통계
모델 기반 선택 모델 기반 선택
반복 선택 반복 선택

마스크를 시각화하는 함수 (기능 선택 결과) : plt.matshow (mask.reshape (1, -1), cmap = 'gray_r')


5.1 일 변량 통계

일 변량 통계에서는 각 특성과 목표 값 간의 관계가 통계적으로 유의한지 여부를 계산 한 다음 신뢰도가 가장 높은 특성을 선택합니다.

분류 문제의 경우 분산 분석 (ANOVA)이라고도합니다. 이러한 테스트의 주요 속성은 일 변량이라는 것입니다. 즉, 각 기능을 개별적으로 만 고려합니다.

임계 값 계산 방법 :

방법 사용 지침
SelectKBest 고정 된 수의 k 개 기능 선택
SelectPercentile 고정 된 비율의 기능 선택
  • 기능 선택 가져 오기 및 인스턴스화
from sklearn.feature_selection import SelectPercentile
select = SelectPercentile(percentile=50)
select.fit(X_train, y_train)

5.2 모델 기반 기능 선택

모델 기반 기능 선택은지도 머신 러닝 모델을 사용하여 각 기능의 중요성을 결정하고 가장 중요한 기능 만 유지합니다.

기능 선택에 사용되는 감독 모델은 최종 감독 모델링에 사용 된 모델과 동일 할 필요가 없습니다.

기능 선택 모델은이 지표를 사용하여 기능의 순위를 매기려면 각 기능에 대한 특정 중요도 지표를 제공해야합니다.

  • 기능 선택 가져 오기 및 인스턴스화
from sklearn.feature_selection import SelectFromModel
from sklearn.ensemble import RandomForestClassifier
select = SelectFromModel(RandomForestClassifier(n_estimators=100, random_state=42), threshold="median")  # 用包含 100 棵树的随机森林分类器来计算特征重要性,参数 threshold 指定阈值

5.3 반복 기능 선택

반복적 인 기능 선택에서는 일련의 모델이 구성되며 각 모델은 서로 다른 수의 기능을 사용합니다. 두 가지 기본 방법이 있습니다.

  • 처음에는 기능이 없으며 특정 종료 조건이 충족 될 때까지 기능을 하나씩 추가하십시오.

  • 모든 기능으로 시작한 다음 특정 종료 조건이 충족 될 때까지 기능을 하나씩 삭제합니다.

방법 : 재귀 적 기능 제거 (재귀 적 기능 제거, RFE)

사용 방법 : 모델을 구축하는 모든 기능으로 시작하여 모델에 따라 가장 덜 중요한 기능을 폐기 한 다음 폐기 된 기능을 제외한 모든 기능을 사용하여 새 모델을 구축하는 방식으로 미리 설정된 기능 수만 남을 때까지 계속합니다. .

  • 기능 선택 가져 오기 및 인스턴스화
from sklearn.feature_selection import RFE
select = RFE(RandomForestClassifier(n_estimators=100, random_state=42), n_features_to_select=40)

파트 2 요약

  1. 기계 학습 알고리즘의 입력으로 사용할 기능을 언제 선택할지 확실하지 않은 경우 자동화 된 기능 선택이 특히 유용 할 수 있습니다.

  2. 기능 선택은 필요한 기능 수를 줄이고 예측 속도를 높이거나 더 많은 해석 가능한 모델을 허용하는 데 도움이 될 수 있습니다. 대부분의 실제 상황에서 기능 선택을 사용하면 성능이 크게 향상되지는 않지만 기능 엔지니어링 도구 상자에서 여전히 매우 중요한 도구입니다.

추천

출처blog.csdn.net/xylbill97/article/details/105947877