私は、124の特徴を持つカテゴリと数値のデータからなるデータセットを持っています。その次元を減らすために、私は無関係の特徴を取り除きたい。しかし、私は1つのホットとして、私はクロスバリデーションと再帰的な特徴の排除を実行することができ、結果のデータでは391再帰的特徴除去(RFE)から最適な特徴を抽出する
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、とそれをコードする特徴選択アルゴリズムに対してデータセットを実行します生成
Cross Validated Score vs Features Graph
は、識別された特徴の最適な数は、8だったどのように私は機能名を特定しないことを考えると?私は分類アルゴリズムで使用するためにそれらを新しいDataFrameに抽出できると仮定していますか?[EDIT]
次のように私はthis postからの助けを借りて、これを達成した:
生成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']
を1つのホットエンコードは多重共を紹介することを考えると、私はターゲット列の選択が理想的ではないと思います非符号化連続データ機能が選択されています。私は、エンコードされていない再追加するターゲット列を試してみましたが、データがカテゴリであるため、RFEは、次のエラーがスローされます。
ValueError: could not convert string to float: Wireless Access Point
私は1つのホットエンコードされた機能の列がターゲットとして機能するグループの複数のする必要がありますか?
[EDIT 2]
Iは、単にターゲット列をLabelEncode場合は 'Y' example againを参照として、私はこのターゲットを使用することができます。ただし、出力は単一のフィーチャ(ターゲット列)のみを最適と判断します。私はこれが1つのホットエンコーディングのためかもしれないと思っています。密な配列を作りたいのであれば、それはRFEに対して実行できますか?
おかげで、自分の質問に答える
アダム