如何将随机森林选择的特征转换为新列表

我正在处理一个回归问题。对于我的模型,我使用随机森林分类器进行降维。输出是一个由布尔值组成的以空格分隔的字符串,这些布尔值将好的特征标记为“True”。看起来是这样的:

[ True  True  True  True  True  True  True  True  True  True  True  True  True  True  True False  True  True False  True  True  True False  True  True  True  True  True  True  True  True False  True False False  True  True False False False False False False False False False False  True False False  True False False False False False False  True False False False  True False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False  True False False  True False False False  True False  True False False False False False False False False False False False False False False False False False False False False False  True False False False False False False False False  True False False False False False False  True False False False  True  True False False False False False False False False False False False False False False False False False False False  True False False False False False False False  True False False  True False  True False  True False False  True False False False False False False False False False False False False False False  True False  True False  True False False False False False False False False False  True  True False False False False False False False False False  True False  True  True False  True False False False False False  True  True  True False False False False False False False False False False False False False False False False False False False False False False False False  True False False False False False False False False False False False False False  True False False False False  True False]

所以我做了的是将其转换为一个以逗号分隔的列表,像这样:

[True, True, True, True, True, True, True, True, True, True, True, True, True, True, True, False, True, True, False, True, True, True, False, True, True, True, True, True, True, True, True, False, True, False, False, True, True, False, False, False, False, False, False, False, False, False, False, True, False, False, True, False, False, False, False, False, False, True, False, False, False, True, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, True, False, False, False, True, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, True, False, False, False, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, True, False, False, True, False, True, False, True, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, True, False, True, False, False, False, False, False, False, False, False, False, True, True, False, False, False, False, False, False, False, False, False, True, False, True, True, False, True, False, False, False, False, False, True, True, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, False, True, False]

然后遍历每个元素并检索相应的测试列。这是整个过程的代码:

sel = SelectFromModel(RandomForestClassifier(n_estimators = 100), threshold = '1.25*mean')
sel.fit(x_train, y_train)
selected = sel.get_support()
selected_list = list(selected)
columns_list = []
for i in range(len(selected_list)):
    if(selected_list[i] == 'True'):
        columns_list.append(test[i])
print(columns_list)

但是现在我得到一个空列表,尽管我尝试将其添加到我的columns_list中。基本上,我的目标是使用降维后的列进行预测。我在这个问题上使用线性回归。

更新

当我将代码更改为下面的建议时,我得到了以下错误:

Traceback (most recent call last):
  File "/opt/anaconda/envs/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2890, in get_loc
    return self._engine.get_loc(key)
  File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 0
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/onur/Documents/Boston-Kaggle/Model.py", line 100, in <module>
    columns_list.append(test[i])
  File "/opt/anaconda/envs/lib/python3.7/site-packages/pandas/core/frame.py", line 2975, in __getitem__
    indexer = self.columns.get_loc(key)
  File "/opt/anaconda/envs/lib/python3.7/site-packages/pandas/core/indexes/base.py", line 2892, in get_loc
    return self._engine.get_loc(self._maybe_cast_indexer(key))
  File "pandas/_libs/index.pyx", line 107, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/index.pyx", line 131, in pandas._libs.index.IndexEngine.get_loc
  File "pandas/_libs/hashtable_class_helper.pxi", line 1607, in pandas._libs.hashtable.PyObjectHashTable.get_item
  File "pandas/_libs/hashtable_class_helper.pxi", line 1614, in pandas._libs.hashtable.PyObjectHashTable.get_item
KeyError: 0

回答:

你的问题在这里:

if(selected_list[i] == 'True'):
    columns_list.append(test[i])

你正在将一个布尔值与字符串值'True'进行比较,而不是True

一个紧凑且符合Python风格的解决方案是:

if selected_list[i]:
    columns_list.append(test[i])

对于你的第二个错误,那是由于你使用[]访问数据框test。你需要使用.iloc方法

至于使用方式,这取决于test包含什么内容:

test.iloc[0] # 数据框的第一行 - 注意输出是一个Series数据类型。
test.iloc[1] # 数据框的第二行
test.iloc[-1] # 数据框的最后一行
# 列:
test.iloc[:,0] # 数据框的第一列
test.iloc[:,1] # 数据框的第二列
test.iloc[:,-1] # 数据框的最后一列

编辑,一个更明确的解决方案:

columns_selected = test.iloc[:, [i for i in range(len(selected_list)) if selected_list[i]]]

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注