【发布时间】:2018-10-04 21:31:57
【问题描述】:
有没有办法从scikit.learn 数据集中删除特定特征?例如,我知道可以使用sklearn.feature_selection 删除功能,但这些都是自动删除功能的过程,他们 认为这些功能是无用的。有什么方法可以在不进入数据内部的情况下实现自定义特征删除算法?例如,假设我有一个对特征进行评分的函数,这里提供了一个玩具示例:
def score(feature_index):
return 0 if feature_index == 1 else 1
现在假设我想删除 iris 数据集中得分低于0.5 的所有特征。我想做这样的事情:
from sklearn import datasets
iris = datasets.load_iris()
#this is the function I want:
iris.filter_features(score, threshold=0.5)
之后,我希望 iris 数据集少一个特征。现在,我可以这样做:
from sklearn import datasets
iris = datasets.load_iris()
for feature_index in range(len(iris.feature_names)):
if score(feature_index) < 0.5:
iris.feature_names.pop(feature_index)
iris.data = np.delete(iris.data, feature_index, 1)
但这看起来……很脏。
【问题讨论】:
-
查看相关:stackoverflow.com/questions/23405739/… 这使用 pandas 来存储数据但原理是一样的,您只需定义一些列表作为您的特征选择或排除,然后再次训练,没有错您目前的方法 IMO。在 pandas 中,很容易进行列选择/排除
-
@EdChum 我认为我的方法没有问题,只要小心操作,但如果有人忘记删除相应的功能名称以及
data数组的列。
标签: python scikit-learn