我正在尝试应用未来的选择。问题是使用整个数据帧会引发内存错误。所以我决定剪切我的数据帧,以便能够应用下一个未来的选择:
# this is original dataframes
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%。所有其他列都只包含数字,但我们不知道它们的意思。
#this is way, I reduce the number of rows to 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):]
#Then I use Linear models penalized with the L1 norm to reduce the dimensionality of the data
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) 所包含特征的整数索引:
从特征向量中选择保留特征的索引。如果索引为 False,则这是一个形状 [# 输入特征] 的布尔数组,其中元素为 True,如果选择其相应的特征进行保留。如果索引为 True,则这是形状 [# 输出特征] 的整数数组,其值是输入特征向量的索引。