gpt4 book ai didi

python-2.7 - 从递归特征消除 (RFE) 中提取最佳特征

转载 作者:行者123 更新时间:2023-12-02 17:13:36 26 4
gpt4 key购买 nike

我有一个数据集,其中包含具有 124 个特征的分类数据和数值数据。为了降低其维度,我想删除不相关的功能。然而,为了针对特征选择算法运行数据集,我使用 get_dummies 对其进行热编码,这将特征数量增加到 391。

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)

使用结果数据,我可以根据 Scikit Learn example 通过交叉验证运行递归特征消除:

产生:

Cross Validated Score vs Features Graph

鉴于已识别的最佳特征数为 8,我如何识别特征名称?我假设我可以将它们提取到一个新的 DataFrame 中以用于分类算法?


[编辑]

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']

鉴于一种热编码引入了多重共线性,我认为目标列选择并不理想,因为它选择的特征是非编码的连续数据特征。我尝试重新添加未编码的目标列,但 RFE 抛出以下错误,因为数据是分类数据:

ValueError: could not convert string to float: Wireless Access Point

我是否需要将多个一个热编​​码特征列组合起来作为目标?


[编辑 2]

如果我简单地对目标列进行 LabelEncode,我可以将此目标用作 'y' 参见 example again .但是,输出仅将单个特征(目标列)确定为最佳特征。我认为这可能是因为单一热编码,我是否应该考虑生成一个密集数组,如果是这样,它可以针对 RFE 运行吗?

谢谢,

亚当

最佳答案

你可以这样做:

`
from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression
model = LogisticRegression()
rfe = RFE(model, 5)
rfe = rfe.fit(X, y)
print(rfe.support_)
print(rfe.ranking_)
f = rfe.get_support(1) #the most important features
X = df[df.columns[f]] # final features`

然后你可以在你的神经网络或任何算法中使用 X 作为输入

关于python-2.7 - 从递归特征消除 (RFE) 中提取最佳特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47730328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com