如何使用 sklearn 获取无用功能列表?
Posted
技术标签:
【中文标题】如何使用 sklearn 获取无用功能列表?【英文标题】:How to get a list of useless features using sklearn? 【发布时间】:2017-02-06 13:22:07 【问题描述】:我有一个数据集来构建分类器:
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 中那样合并它。 感谢您的帮助!
【问题讨论】:
您能否提供一个示例,仅用几行代码说明X_new
和 X
的外观以及它的输出是什么?
【参考方案1】:
您可能还想看看Feature Selection。它描述了一些更系统地执行此操作的技术和工具。
【讨论】:
【参考方案2】:尝试运行此代码:
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”列显示该功能是否被选中。
【讨论】:
【参考方案3】:clf.coef_
返回一个特征权重列表(在fit()
之后应用)。按权重排序,你会发现哪些不是很有用。
【讨论】:
但如果我没记错的话,它并没有给我一个特征名称列表,只是排序了我已经通过 selectfrommodel 得到的系数 您的分类器对初始 DataFrame 中的名称一无所知,因此我建议手动构建它,例如weights = pd.DataFrame('features': df.columns, 'weights': clf.coef_)
@arsenyinfo 我认为您不需要功能名称。顺序与您的对象 (X) 中的顺序相同。以上是关于如何使用 sklearn 获取无用功能列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python 中的 sklearn 中获取 GridSearchCV 中的选定功能