python - 类中用于特征选择的函数的解释
问题描述
我遇到了一个功能如下:
def indices_of_top_k(arr, k):
return np.sort(np.argpartition(np.array(arr), -k)[-k:])
我无法理解它的作用或每个组件的工作原理。有人可以解释一下它的作用吗?
对于上下文,它在下面给出的类中用于特征选择:
class TopFeatureSelector(BaseEstimator, TransformerMixin):
def __init__(self, feature_importances, k):
self.feature_importances = feature_importances
self.k = k
def fit(self, X, y=None):
self.feature_indices_ = indices_of_top_k(self.feature_importances, self.k)
return self
def transform(self, X):
return X[:, self.feature_indices_]
谢谢,
解决方案
partition
可能比排序更难理解。将其视为不完整的排序。
In [152]: x=np.random.randint(0,50,12)
In [153]: x
Out[153]: array([16, 16, 4, 33, 39, 43, 28, 47, 2, 23, 25, 11])
要获得最大的 5 个元素,我们可以排序和切片:
In [154]: np.sort(x)[-5:]
Out[154]: array([28, 33, 39, 43, 47])
partition
获得相同的值,但顺序有点不同:
In [155]: np.partition(x,-5)[-5:]
Out[155]: array([28, 33, 39, 47, 43])
对应的指标:
In [156]: np.argpartition(x,-5)[-5:]
Out[156]: array([6, 3, 4, 7, 5])
对这些索引进行排序:
In [157]: np.sort(np.argpartition(x,-5)[-5:])
Out[157]: array([3, 4, 5, 6, 7])
使用 argsort 代替做同样的事情,但据说argpartition
比argsort
:
In [158]: np.sort(np.argsort(x)[-5:])
Out[158]: array([3, 4, 5, 6, 7])
从中我们可以得到 5 个最大值,但是按照它们的原始顺序,而不是 [154] 中的排序顺序:
In [159]: x[_]
Out[159]: array([33, 39, 43, 28, 47])
推荐阅读
- kotlin - 未解决的参考:Exposed 中的新内容
- libgit2 - 如何使用 libgit2 运行“git log 文件名”?
- ios - 在 Swift 4 UITableView 中的选定行上添加/删除多个复选标记
- php - 如何在 Symfony 3.4 中找到当前的路由模式?
- javascript - 无法将 ws 响应分配给 $scope 变量
- java - 以只有一个订阅者会使用它的方式将 java 9 Flow 上的数据发布给订阅者
- tensorflow - 使用 LSTM logits 进行值预测
- ios - 使用您的代码发送短信无限加载屏幕帐户套件IOS
- css - 如何设置 Angular 材质选项卡的 mat-ink-bar 取选项卡标题文本宽度的宽度
- javascript - 如何将 updateend 事件侦听器添加到两个对象?