我有一个数据集来构建分类器:
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是一个列表,其中包含没有任何名称的特征值,所以我不能像在pandas中那样合并它。 谢谢你的帮助!
答案 0 :(得分:2)
您可能还想查看Feature Selection。它描述了一些更系统地完成这项工作的技术和工具。
答案 1 :(得分:0)
clf.coef_
会返回一系列要素权重(在fit()
之后应用)。按权重对其进行排序,您会看到哪些不是很有用。
答案 2 :(得分: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'列显示是否选择了该功能。