我已经使用scikit-learn的DecisionTreeClassifier在一个拥有> 3,000,000行和15个特征(类别的二进制编码)的数据集上训练了一个模型 . 它可以很好地运行并完成我想要它做的事情 . 当我尝试将其转换为CoreML模型时,它不起作用 . 我得到“内核似乎已经死了 . 它会自动重启 . ”我减少了数据的大小,对于非常小的批次,它工作正常 . 它似乎突破了大约500行 .

我是使用CoreML的新手,这可能是对它如何工作的误解,但我不确定 . 我觉得有其目的,CoreML应该能够处理具有大量类标签的更大模型(我看着大约40,000个 . )

关于如何解决这个问题或解决它的任何想法?

简化了我正在做的事情:

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')

Update: 这是一个记忆问题(可能 . )一旦我超过2 mb,我就会得到

malloc: *** error for object 0x7fb096a0f738: incorrect checksum for freed object - object was probably modified after being freed. *** set a breakpoint in malloc_error_break to debug

调试只是给出

Segmentation fault: 11