如何在scikit-learn中找到所有稀疏数据回归器?

时间:2018-12-12 22:14:29

标签: python machine-learning scikit-learn

您可以通过以下方式在scikit学习中find all regressors

from sklearn.utils.testing import all_estimators
regressors = all_estimators(type_filter='regressor')

但是,我的数据稀疏,并且我发现其中许多不支持稀疏数据。我可以蛮力评估所有这些因素,并排除那些失败的因素,但是有一种更简便的方法来提前告知哪些不支持稀疏性吗?

1 个答案:

答案 0 :(得分:1)

没有简单的方法可以做到这一点。您最好按照此问题中的说明检查fit()的文档:

,否则使用try catch block来处理。

大多数估计器(回归器或分类器)将通过使用适当的参数调用check_X_y来检查输入是否有效。我们感兴趣的参数是**'accept_sparse'**,默认情况下为False。因此,如果估算器调用此方法而没有为'accept_sparse'提供任何值,则可以安全地假定它不支持稀疏矩阵。

对于部分问题,可以使用以下代码。

import inspect 
from sklearn.utils.testing import all_estimators 
regressors = all_estimators(type_filter='regressor')

for regressor in regressors:
    print(regressor[0], end=" - ")
    ff = getattr(regressor[1], 'fit')
    if 'accept_sparse' in inspect.getsource(ff):
        print('Accepts Sparse')
    else:
        print("Does not")
  • 如果输出具有“ 接受稀疏”,则可以确保它可以处理稀疏数据。
  • 但是,如果输出中包含“ 没有”,则仅表示fit()的源代码:-

    • 不包含check_X_y:这并不意味着不支持稀疏数据。也许当前的估算者正在调用具有该检查的另一个父类的fit()。某些结尾为CV的估算器是交叉验证器,它们再次将数据传递给基本估算器,因此可能不执行检查。
    • 它可能未明确包含参数“ accept_sparse”:源代码可能包含类似check_X_y(X, y, ['csr', 'csc', 'coo'], ...)的内容。根据{{​​1}}可能接受的值,可能很难找到它。

    因此,在这种情况下,您可以使用try-catch查找实际状态。