python - 删除 scikit 学习中的特定功能

标签 python scikit-learn

是否有任何方法可以从 scikit.learn 数据集中删除特定特征?例如,我知道可以使用 sklearn.feature_selection 删除功能,但这些都是删除功能的自动化程序,他们 认为这些功能是无用的。有没有什么方法可以在不进入数据的脏内部的情况下实现自定义特征删除算法?例如,假设我有一个对特征进行评分的函数,这里提供了一个玩具示例:

def score(feature_index):
    return 0 if feature_index == 1 else 1

现在假设我想删除鸢尾花数据集中得分低于 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)

但这看起来……很脏。

最佳答案

没有像 scikit-learn 数据集这样的想法。 scikit-learn 使用常见的数据结构只是 numpy 数组(或 scipy 稀疏矩阵):

>>> from sklearn.datasets import load_iris
>>> iris = load_iris
>>> type(iris.data)
<class 'numpy.ndarray'>

您可以使用常规的 numpy 数组索引来生成新版本的数据。例如,使用 bool 掩码删除第二个特征:

>>> import numpy as np
>>> X = iris.data
>>> mask = np.array([True, False, True, True])
>>> X_masked = X[:, mask]

请注意,第一个位置的 : 符号表示“所有行”。

要检查,您可以打印每个数组的前 5 行:

>>> print(X[:5])
[[ 5.1  3.5  1.4  0.2]
 [ 4.9  3.   1.4  0.2]
 [ 4.7  3.2  1.3  0.2]
 [ 4.6  3.1  1.5  0.2]
 [ 5.   3.6  1.4  0.2]]
>>> print(X_masked[:5])
[[ 5.1  1.4  0.2]
 [ 4.9  1.4  0.2]
 [ 4.7  1.3  0.2]
 [ 4.6  1.5  0.2]
 [ 5.   1.4  0.2]]

您还可以使用基于整数的奇特索引来获得相同的结果:

>>> index = np.array([0, 2, 3])
>>> X_indexed = X[:, index]
>>> print(X_indexed[:5])
[[ 5.1  1.4  0.2]
 [ 4.9  1.4  0.2]
 [ 4.7  1.3  0.2]
 [ 4.6  1.5  0.2]
 [ 5.   1.4  0.2]]

要了解有关基本 numpy 操作的更多信息,请查看教程,例如:

http://scipy-lectures.github.io/

关于python - 删除 scikit 学习中的特定功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28296670/

相关文章:

python - 如何在 scikit-learn 管道中组合数字和分类特征?

python - DecisionTreeRegressor 中的 random_state 是什么?

python - 如何正确转换 tfidf 和 "fit"文本分类器的值?

python - python 中维基百科页面的内链和外链

python - 访问 Pandas DataFrame 元素中的列表

python - Python 中列表的大小调整因子是多少

machine-learning - sklearn : Categorical Imputer?

python - Sklearn.model_selection GridsearchCV ValueError : C <= 0

python - PyCharm 内存不足

Python 字符串被多个分隔符分割