Evalml: 在 Iris 数据集上运行 AutoML 失败

创建于 2020-07-23  ·  3评论  ·  资料来源: alteryx/evalml

运行 evalml 0.11.2。 看起来将数据检查设置为 False 的选项已从 AutoMLSearch 中删除,这是以前解决此问题的方法。


类型错误回溯(最近一次调用最后一次)

1 automl = AutoMLSearch(objective="log_loss_multi", max_pipelines=5, question_type="multiclass")
2
----> 3 automl.search(X, y)

~.conda\envs\evalml_test_1.0\lib\site-packages\evalml\automl\automl_search.py​​ in search(self, X, y, data_checks, feature_types, raise_errors, show_iteration_plot)
316
317 data_checks = self._validate_data_checks(data_checks)
--> 318 data_check_results = data_checks.validate(X, y)
319
320 如果 len(data_check_results) > 0:

~.conda\envs\evalml_test_1.0\lib\site-packages\evalml\data_checks\data_checks.py 在验证(自我,X,y)
33 条消息 = []
34 用于 self.data_checks 中的 data_check:
---> 35 messages_new = data_check.validate(X, y)
36 消息.extend(messages_new)
37条回信

~.conda\envs\evalml_test_1.0\lib\site-packages\evalml\data_checks\label_leakage_data_check.py 验证(self,X,y)
53 如果 len(X.columns) == 0:
54 返回 []
---> 55 corrs = {label: abs(y.corr(col)) for label, col in X.iteritems() if abs(y.corr(col)) >= self.pct_corr_threshold}
56
57 high_corr_cols = {key: value for key, value in corrs.items() if value >= self.pct_corr_threshold}

~.conda\envs\evalml_test_1.0\lib\site-packages\evalml\data_checks\label_leakage_data_check.py 中(.0)
53 如果 len(X.columns) == 0:
54 返回 []
---> 55 corrs = {label: abs(y.corr(col)) for label, col in X.iteritems() if abs(y.corr(col)) >= self.pct_corr_threshold}
56
57 high_corr_cols = {key: value for key, value in corrs.items() if value >= self.pct_corr_threshold}

~.conda\envs\evalml_test_1.0\lib\site-packages\pandas\core\series.py in corr(self, other, method, min_periods)
2252 如果 [“pearson”、“spearman”、“kendall”] 或可调用(方法)中的方法:
第2253章
-> 2254 this.values, other.values, method=method, min_periods=min_periods
第2255章
2256

~.conda\envs\evalml_test_1.0\lib\site-packages\pandas\core\nanops.py in _f( args, * kwargs)
67 尝试:
68 与 np.errstate(invalid="ignore"):
---> 69 返回 f( args, * kwargs)
70 除了 ValueError 作为 e:
71 # 我们要转换一个对象数组

~.conda\envs\evalml_test_1.0\lib\site-packages\pandas\core\nanops.py in nancorr(a, b, method, min_periods)
1238
1239 f = get_corr_func(方法)
-> 1240 返回 f(a, b)
1241
1242

~.conda\envs\evalml_test_1.0\lib\site-packages\pandas\core\nanops.py in _pearson(a, b)
1254
第 1255 章
-> 1256 返回 np.corrcoef(a, b)[0, 1]
1257
第 1258 章

<__array_function__ internals> 在 corrcoef( args, * kwargs)

~.conda\envs\evalml_test_1.0\lib\site-packages\numpy\lib\function_base.py in corrcoef(x, y, rowvar, bias, ddof)
2524 warnings.warn('bias 和 ddof 无效,不推荐使用',
2525 弃用警告,堆栈级别 = 3)
-> 2526 c = cov(x, y, rowvar)
2527 尝试:
2528 d = 诊断(c)

<__array_function__ internals> 在 cov( args, * kwargs)

~.conda\envs\evalml_test_1.0\lib\site-packages\numpy\lib\function_base.py 在 cov(m, y, rowvar, bias, ddof, fweights, aweights)
2429 w *= aweights
2430
-> 2431 平均值,w_sum = 平均值(X,轴 = 1,权重 = w,返回 = 真)
2432 w_sum = w_sum[0]
2433

<__array_function__ internals> 平均( args,* kwargs)

~.conda\envs\evalml_test_1.0\lib\site-packages\numpy\lib\function_base.py 平均(a,轴,权重,返回)
391
392 如果权重为无:
--> 393 avg = a.mean(axis)
第394话
395 其他:

~.conda\envs\evalml_test_1.0\lib\site-packages\numpy\core_methods.py in _mean(a, axis, dtype, out, keepdims)
152 如果 isinstance(ret, mu.ndarray):
第153话
--> 154 ret, rcount, out=ret, cast='unsafe', subok=False)
155 如果 is_float16_result 和 out 是 None:
第156话

类型错误:不支持 / 的操作数类型:'str' 和 'int'

运行时它会做一些稍微不同的事情 - 搜索会执行而不是因堆栈跟踪而失败,但是所有管道的所有分数都是 nan。

优化对数损失多类。
分数越低越好。

搜索多达 4 个管道。
允许的模型系列:random_forest、xgboost、linear_model、catboost

(1/4) 模式基线多类分类... Elapsed:00 :00
开始交叉验证
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“safe”将输入安全地强制转换为任何受支持的类型
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“safe”将输入安全地强制转换为任何受支持的类型
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“safe”将输入安全地强制转换为任何受支持的类型
完成交叉验证 - 平均对数损失多类:nan
(2/4) CatBoost Classifier w/ Simple Imputer Elapsed:00 :00
开始交叉验证
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“safe”将输入安全地强制转换为任何受支持的类型
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“safe”将输入安全地强制转换为任何受支持的类型
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“安全”将输入安全地强制转换为任何受支持的类型
完成交叉验证 - 平均对数损失多类:nan
(3/4) 带简单输入器的 XGBoost 分类器Elapsed:00 :02
开始交叉验证
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“安全”将输入安全地强制转换为任何受支持的类型
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“安全”将输入安全地强制转换为任何受支持的类型
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“safe”将输入安全地强制转换为任何受支持的类型
完成交叉验证 - 平均对数损失多类:nan
(4/4) 随机森林分类器,带有简单的 Im... Elapsed:00 :02
开始交叉验证
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“safe”将输入安全地强制转换为任何受支持的类型
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“safe”将输入安全地强制转换为任何受支持的类型
对目标 Log Loss Multiclass 进行评分时 PipelineBase.score 中的错误:输入类型不支持 ufunc 'isnan',并且无法根据转换规则“安全”将输入安全地强制转换为任何受支持的类型
完成交叉验证 - 平均对数损失多类:nan

搜索在 00:02 后完成
最佳管道:模式基线多类分类管道
最佳管道对数损失多类:nan
ToolId 3:AutoML 工具完成
在 14.397 秒内完成

两种环境中的 Pandas 数据类型相同。

sepal.length float64
sepal.width float64
petal.length float64
petal.width float64
类对象
数据类型:对象

Jupyter 笔记本使用 Python 3.7.3,工具是 3.6.8。

所有3条评论

@SydneyAyx :是的,我们在 0.11.2 中更改了禁用数据检查的机制:

automl.search(..., data_checks=None, ...)

请注意我们应该将其添加到用户指南部分。

请试一试,如果这仍然不能解决您的问题,让我们再谈一次。

如果这确实解决了问题,我记得之前提交了 #828 来跟踪此问题。 我们关闭了它,支持 #645 ,目前正在进行中。 但是,我不确定 #645 是否真的能解决根本问题。 所以让我们保持开放。

啊,我对时间线感到困惑:#932 上周已合并并解决了这个问题! 我刚刚运行了我在 #828 中编写的复制器来确认这一点。 下一个版本( 0.12.0 ,下周二)将包括修复。

当我们发布该版本时,我会保持打开并关闭它。

固定在刚刚出去的v0.12.0中!

此页面是否有帮助?
0 / 5 - 0 等级