您可以通过以下方式在scikit学习中find all regressors:
from sklearn.utils.testing import all_estimators
regressors = all_estimators(type_filter='regressor')
但是,我的数据稀疏,并且我发现其中许多不支持稀疏数据。我可以蛮力评估所有这些因素,并排除那些失败的因素,但是有一种更简便的方法来提前告知哪些不支持稀疏性吗?
答案 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查找实际状态。