0

У меня есть набор данных для построения Классификатора:Как получить список бесполезных функций с помощью sklearn?

dataset = pd.read_csv(sys.argv[1], decimal=",",delimiter=";", encoding='cp1251') 
X=dataset.ix[:, dataset.columns != 'class'] 
Y=dataset['class'] 

Я хочу, чтобы выбрать только важные функции, так что я:

clf=svm.SVC(probability=True, gamma=0.017, C=5, coef0=0.00001, kernel='linear', class_weight='balanced') 
model = SelectFromModel(clf, prefit=True) 
X_train, X_test, Y_train, Y_test = cross_validation.train_test_split(X, Y, test_size=0.5, random_state=5) 
y_pred=clf.fit(X_train, Y_train).predict(X_test) 
X_new = model.transform(X) 

Так X_new имеет форму 3000x72 в то время как X был 3000x130. Я хотел бы получить список функций, которые есть и не находятся в X_new. Как мне это сделать?

X - это кадр данных с заголовком, но X_new представляет собой список списков со значениями значений без какого-либо имени, поэтому я не могу объединить его, как я бы делал в пандах. Благодарим за помощь!

+0

Не могли бы вы привести пример, как только несколько строк о том, как выглядят «X_new» и «X» и какими будут результаты для него? –

ответ

0

clf.coef_ возвращает список характеристик весов (применяется после fit()). Сортируйте его по весам, и вы видите, что не очень полезно.

+0

, но если я не ошибаюсь, он не дает мне список имен функций, просто упорядоченных коэффициентов, которые у меня уже есть, selectfrommodel – Polly

+1

Ваш классификатор ничего не знает об именах в исходном DataFrame, поэтому я бы рекомендовал его вручную создать, что-то вроде 'weights = pd.DataFrame ({'features': df.columns, 'weightights': clf.coef _})' – arsenyinfo

+0

@arsenyinfo Думаю, вам не нужны имена функций. Порядок тот же, что и в ваших объектах (X). – sergzach

2

Возможно, вы также захотите взглянуть на Feature Selection. В нем описываются некоторые методы и инструменты, чтобы сделать это более систематически.

0

Попробуйте запустить этот код:

import pandas as pd 
import numpy as np 

dataset = pd.read_csv(sys.argv[1], decimal=",",delimiter=";", encoding='cp1251') 
X=dataset.ix[:, dataset.columns != 'class'].values 
Y=dataset['class'].values 
feature_names = data_churn.columns.tolist() 
feature_names.remove('class') 

from sklearn.feature_selection import SelectFromModel 
from sklearn.svm import SVC 
from sklearn.model_selection import train_test_split 
clf = SVC(probability=True, gamma=0.017, C=5, coef0=0.00001, kernel='linear', class_weight='balanced') 
model = SelectFromModel(clf, prefit=True) 
X_train, X_test, Y_train, Y_test = train_test_split(X, y, test_size=0.5, random_state=5) 
y_pred=clf.fit(X_train, Y_train).predict(X_test) 
X_new = model.transform(X) 
print pd.DataFrame(np.c_[feature_names, model.get_support(0)], 
         columns=[ 'feature_name', 'feature_selected']) 

В «» feature_selected столбцов показывает, если функция выбрана или нет.