sklearn: 如何从原始数据框中获取被model.transform删除的列索引

我正在尝试应用特征选择。问题是使用整个数据框会导致内存错误。因此,我决定裁剪我的数据框,以便能够应用接下来的特征选择:

# 这是原始数据框
X_full = df_train[df_train.columns[0:size]] # 76000(rows)*300(cols)
y_full = df_train[[len(df_train.columns)-1]] # 76000(rows)*1(col)

y_full包含0和1,且1的数量少于5%。所有其他列只包含数字,但我们不知道这些数字的含义。

# 这是我减少行数到10%的方法
test_frac = 0.10
count = len(X_full)
X = X_full.iloc[-int(count*test_frac):]
y = y_full.iloc[-int(count*test_frac):]
# 然后我使用L1范数惩罚的线性模型来降低数据的维度
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)
print "X_new.shape", X_new.shape
print X_new

问题是我需要获取被删除的列列表,以便从原始数据框中删除它们。我该怎么做呢?


回答:

听起来你是在寻找SelectFromModel.get_support()。根据文档,它可以返回以下两种形式之一:(1) 一个布尔数组,其长度等于所有特征的数量;(2) 包含特征的整数索引:

一个从特征向量中选择保留特征的索引。如果indices为False,这是一个形状为[#输入特征]的布尔数组,其中一个元素为True当且仅当其对应的特征被选择保留。如果indices为True,这是一个形状为[#输出特征]的整数数组,其值是输入特征向量的索引。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

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