0

我有一個數據集建立一個classificator:如何使用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中的名稱一無所知,所以我建議手動構建它,類似於'權重= pd.DataFrame({'功能':df.columns,'權重':clf.coef _})' – arsenyinfo

+0

@arsenyinfo我認爲你不需要功能名稱。順序與您的對象(X)中的順序相同。 – sergzach

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」欄顯示。