124 개의 기능이있는 범주 형 및 숫자 형 데이터로 구성된 데이터 집합이 있습니다. 차원을 줄이기 위해 관련없는 기능을 제거하고 싶습니다. 그러나, 피쳐 선택 알고리즘에 대한 데이터 세트를 실행하는 I 핫 같이 I 교차 검증과 재귀 기능 제거를 실행 결과 데이터 (391)RFE (Recursive Feature Elimination)에서 최적의 기능 추출
In[16]:
X_train.columns
Out[16]:
Index([u'port_7', u'port_9', u'port_13', u'port_17', u'port_19', u'port_21',
...
u'os_cpes.1_2', u'os_cpes.1_1'], dtype='object', length=391)
에 기능의 수를 증가 get_dummies, 그것을 부호화 생산
: 다음 Scikit Learn example 당
Cross Validated Score vs Features Graph
식별 기능의 최적의 수는 8 얼마나 나는 기능 이름을 식별 할 감안할 때? 분류 알고리즘에서 사용할 수 있도록 새 DataFrame으로 추출 할 수 있다고 가정합니다. 는는 는
다음 I가 this post 도움으로,이를 달성 [EDIT]
: 생성
def column_index(df, query_cols):
cols = df.columns.values
sidx = np.argsort(cols)
return sidx[np.searchsorted(cols, query_cols, sorter = sidx)]
feature_index = []
features = []
column_index(X_dev_train, X_dev_train.columns.values)
for num, i in enumerate(rfecv.get_support(), start=0):
if i == True:
feature_index.append(str(num))
for num, i in enumerate(X_dev_train.columns.values, start=0):
if str(num) in feature_index:
features.append(X_dev_train.columns.values[num])
print("Features Selected: {}\n".format(len(feature_index)))
print("Features Indexes: \n{}\n".format(feature_index))
print("Feature Names: \n{}".format(features))
:
Features Selected: 8
Features Indexes:
['5', '6', '20', '26', '27', '28', '67', '98']
Feature Names:
['port_21', 'port_22', 'port_199', 'port_512', 'port_513', 'port_514', 'port_3306', 'port_32768']
감안할 한 핫 인코딩 다중 공선 도입한다는 , 나는 목표 칼럼 선택이 이상적이라고 생각하지 않는다. 인코딩되지 않은 연속 데이터 기능이 선택되었습니다. 나는 다시 추가 대상 열 인코딩되지 않은를 시도했지만 데이터 범주이기 때문에 RFE는 다음과 같은 오류가 발생합니다 :
ValueError: could not convert string to float: Wireless Access Point
내가 그룹에 뜨거운 대상으로 행동하는 기능 열을 인코딩 여러 하나가 필요하십니까?
[EDIT 2
단순히 대상 칼럼 LabelEncode 경우 'Y'example again 참조로서 I이 타겟을 사용할 수있다. 그러나 출력은 단일 피처 (목표 C 럼) 만 최적으로 판별합니다. 이것은 하나의 핫 인코딩 때문일 것으로 생각합니다. 밀집 어레이를 제작해야합니까? 그렇다면 RFE에 대해 실행할 수 있습니까?
감사합니다,
아담