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

使用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中创建了一个多类分类项目。该项目可以对…

发表回复

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