Я использовал L1-функцию, показанную здесь, чтобы выбрать подходящие столбцы из pandas DataFrame X
from sklearn.svm import LinearSVC
from sklearn.datasets import load_iris
from sklearn.feature_selection import SelectFromModel
iris = load_iris()
X, y = iris.data, iris.target
lsvc = LinearSVC(C=0.01, penalty="l1", dual=False).fit(X, y)
model = SelectFromModel(lsvc, prefit=True)
X_new = model.transform(X)
Однако мне непонятно, как я могу получить имена столбцов. Поскольку X_new
является массивом numpy
, я пробовал это:
X_new.dtype.names
Но он ничего не возвращает. Итак, как я могу понять, какие столбцы были выбраны?
После преобразования данных в файл csv вы захотите использовать pd.read_csv
чтобы получить этот файл в dataframe.
Затем вы можете использовать атрибут columns
для доступа к столбцам.
Кроме того, вы можете использовать атрибут to_list
для получения столбцов в виде списка.
В качестве альтернативы вы можете использовать метод Ahmad:
import re
f = open('f.csv','r')
alllines = f.readlines()
columns = re.sub(' +',' ',alllines[0]) #delete extra space in one line
columns = columns.strip().split(',') #split using space
print(columns)
EDIT: вопрос был решен OP с помощью model.get_support
вместо SelectFromModel.get_support
X_selected_df = pd.DataFrame(X_new, columns=[X.columns[i] for i in range(len(X.columns)) if feature_selector.get_support()[i]])