以前写的scikit-learn项目,需要使用coremltools导出Core ML模型在iOS App用,最近换了台电脑跑,出现了警告提示:

WARNING:root:scikit-learn version 1.0.2 is not supported. Minimum required version: 0.17. Maximum required version: 0.19.2. Disabling scikit-learn conversion API.

最后跑出来的模型也没有成功导出Core ML模型,提示的错误是:

1
2
3
4
5
6
7
8
coreml_model = coremltools.converters.sklearn.convert(model, 'message', 'predict')
File "/Users/plusye/.local/lib/python3.9/site-packages/coremltools/converters/sklearn/_converter.py", line 148, in convert
from ._converter_internal import _convert_sklearn_model
File "/Users/plusye/.local/lib/python3.9/site-packages/coremltools/converters/sklearn/_converter_internal.py", line 35, in <module>
from . import _decision_tree_classifier
File "/Users/plusye/.local/lib/python3.9/site-packages/coremltools/converters/sklearn/_decision_tree_classifier.py", line 16, in <module>
sklearn_class = _tree.DecisionTreeClassifier
NameError: name '_tree' is not defined

这是因为coremltools不支持高版本的scikit-learn造成的,默认安装的scikit-learn是1.0.2版本,coremltools并不支持导出。重新安装低版本的scikit-learn就行了:

1
pip install 'scikit-learn==0.19.2'

安装scikit-learn的0.17到0.19.2的版本应该都可以。建议安装最高的支持版本0.19.2。

因为我用的是M1版的Mac Mini,scikit-learn 0.19.2版本并不支持M1芯片,要使用Rosetta2转译也很麻烦,懒得折腾,我就直接拿去服务器跑了。换个思路海阔天空,没必要花太多的时间在研究怎么适配一些开发环境的兼容性问题上,特别是独立开发者,时间应该花在更重要的事情上。当然,如果时间特别多,或者没有可以其他可以用的设备,就必须花时间解决了。