이 기사는 주로 두 부분으로 구성되어 있는데 첫 번째 부분은 특징 데이터의 변환으로 선형 모델과 같이 복잡성이 낮은 모델에 특히 유용하며 두 번째 부분은 특징 선택입니다.
기사 디렉토리
특정 애플리케이션의 경우 최상의 데이터 표현을 찾는 방법은 실제 문제를 해결하려고 할 때 데이터 과학자 및 기계 학습 실무자의 주요 작업 중 하나 인 기능 공학이라는 문제입니다.
기능 유형 | 영문 이름 | 별명 | 영문 이름 |
---|---|---|---|
수치 적 특성 | 수치 적 특징 | 연속 기능 | 연속 기능 |
분류 기능 | 범주 기능 | 이산 기능 | 이산 기능 |
데이터를 올바른 방식으로 표현하면 선택된 정확한 매개 변수보다 감독되는 모델의 성능에 더 큰 영향을 미칩니다.
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计数
- 요약하자면
-
비닝 기능은 일반적으로 트리 기반 모델에 대해 더 나은 결과를 생성하지 않습니다.이 모델은 모든 위치에서 데이터를 나누는 방법을 배울 수 있기 때문입니다. 어떤 의미에서 의사 결정 트리는 이러한 데이터를 예측하는 데 비닝이 가장 유용한 방법을 배울 수 있습니다.
-
특정 데이터 세트의 경우 선형 모델을 사용해야하는 이유가있는 경우 (예 : 데이터 세트가 크고 차원이 높지만 일부 기능과 출력 간의 관계가 비선형 인 경우) 비닝은 모델링 기능을 개선하는 좋은 방법입니다.
세 가지, 대화 형 기능 및 다항식 기능
특히 선형 모델의 경우 특징 표현을 강화하기 위해 원본 데이터의 상호 작용 특징과 다항식 특징을 추가 할 수 있습니다.
- 대화 형 기능
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 요약
-
기계 학습 알고리즘의 입력으로 사용할 기능을 언제 선택할지 확실하지 않은 경우 자동화 된 기능 선택이 특히 유용 할 수 있습니다.
-
기능 선택은 필요한 기능 수를 줄이고 예측 속도를 높이거나 더 많은 해석 가능한 모델을 허용하는 데 도움이 될 수 있습니다. 대부분의 실제 상황에서 기능 선택을 사용하면 성능이 크게 향상되지는 않지만 기능 엔지니어링 도구 상자에서 여전히 매우 중요한 도구입니다.