Python Jupyter内核使用coremltools处理大型决策树

Python Jupyter内核使用coremltools处理大型决策树,python,scikit-learn,jupyter-notebook,coreml,coremltools,Python,Scikit Learn,Jupyter Notebook,Coreml,Coremltools,我已经使用scikit learn的DecisionTreeClassifier在一个数据集上训练了一个模型,该数据集具有>3000000行和15个特征(类别的二进制编码)。它运行良好,并完成了我希望它完成的任务。当我尝试将其转换为CoreML模型时,它不起作用。我得到“内核似乎已经死了。它将自动重新启动。”我降低了数据的大小,对于非常小的批处理,它可以正常工作。它似乎打破了大约500行 我对使用CoreML还不熟悉,这可能是对它工作原理的误解,但我不确定。我觉得考虑到它的用途,CoreML应该

我已经使用scikit learn的DecisionTreeClassifier在一个数据集上训练了一个模型,该数据集具有>3000000行和15个特征(类别的二进制编码)。它运行良好,并完成了我希望它完成的任务。当我尝试将其转换为CoreML模型时,它不起作用。我得到“内核似乎已经死了。它将自动重新启动。”我降低了数据的大小,对于非常小的批处理,它可以正常工作。它似乎打破了大约500行

我对使用CoreML还不熟悉,这可能是对它工作原理的误解,但我不确定。我觉得考虑到它的用途,CoreML应该能够处理具有大量类标签的大型模型(我估计大约有40000个)

你知道如何解决这个问题吗

我正在做的一个简单的想法:

import pandas as pd
import numpy as np
import sklearn
import coremltools
import random
import string
from sklearn.tree import DecisionTreeClassifier 

X = np.random.choice([0, 1], size=(15*1000,), p=[1./3, 2./3])
X = np.split(X,1000)

y = []
for i in range(0,1000):
    x = ''.join(random.choice(string.lowercase) for x in range(5))
    y.append(x)

clf = DecisionTreeClassifier()
clf.fit(X,y)

d = {'arr': X, 'str': y}
df = pd.DataFrame(data=d)

coreml_model = coremltools.converters.sklearn.convert(clf, "arr", 
    "str") ## kernel dies here for larger data
coreml_model.save('mymodel.mlmodel') 
更新:这可能是内存问题。一旦超过2MB,我就会

malloc:**对象0x7fb096a0f738的错误:已释放对象的校验和不正确-对象可能在被释放后被修改。***在malloc\u error\u break中设置断点以进行调试

调试只会带来


分段错误:11

“长度为~15的二进制数组表示类别”那么,您不是有15个特征吗?为什么要做数组列表?数组可以是二维的。当内核死机时,这是因为Python崩溃了,或者Python使用的库崩溃了。在本例中,它似乎是coremltools中的一个bug。