情况
我有一个sklearn.ensemble.RandomForestRegressor
模型,希望找到最重要的特性。
米维
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
import pandas as pd
df = pd.DataFrame({
"ColA":[1,2,3,4,5,6,7,8,9,10],
"ColB":["CharA","CharB","CharC","CharD","CharE","CharF","CharG","CharH","CharI","CharJ"],
"ColC":[132,1000,5,20,165,852,403,680,481,6],
"ColD":[1,2,3,4,5,6,7,1,2,3],
"ColE":[2,26,5,7,1,2,3,12,65,12]
})
num_attribs=["ColA", "ColC"]
cat_attribs=["ColB", "ColD", "ColE"]
full_pipeline = ColumnTransformer([
("num", MinMaxScaler(), num_attribs),
("cat", OneHotEncoder(), cat_attribs)
])
prep_df = full_pipeline.fit_transform(df)
prep_df.toarray()[0]
输出:
array([0. , 0.12763819, 1. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 1. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
1. , 0. , 0. , 0. , 0. ,
0. , 0. ])
请注意:这只是演示代码,我知道如果我省略了toarray
,这将很容易,但在我的实际数据(~1兆行,~70 70cols)它的结果是这种格式。
问题
我想追溯到最初的专栏,但我在ColumnTransformer
中使用了ColumnTransformer
。所以没有inverse_transform
函数,而且我比编码前有更多的列。
问题
如果model.feature_importances_.argmax()
说-> 15
,我如何才能找出哪个源列是?
发布于 2022-01-30 20:50:32
您可以在列转换器的转换器上使用get_feature_names_out()
并将其索引到该数组中。对于你的例子来说,这读起来就像
idx = model.feature_importances_.argmax()
cols = [col for t in full_pipeline.transformers_ for col in t[1].get_feature_names_out()]
name = col[idx]
请注意,对于一个热门列,您将得到像columnname_categoryname这样的名称,这可能比列名本身更有趣。
https://stackoverflow.com/questions/70917884
复制相似问题