You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apple Turi Create图像分类器报错:需使用dropna()处理缺失目标值

解决Turi Create图像分类器中Target列缺失值的问题

首先咱们揪出问题的核心:你新增了5个类别,但data.py里的labels列表还是原来的4个类别(['A', 'B', 'C', 'D']),这就导致新增类别的图片在调用get_label时找不到匹配标签,返回了None,最终造成label列出现缺失值,触发了这个错误。

第一步:从根源避免缺失值——修复标签生成逻辑

推荐用你注释掉的自动从路径提取标签的方法,这样不用手动维护labels列表,新增类别时也不会遗漏:
修改data.py的标签生成部分:

import turicreate as tc
import os

image_data = tc.image_analysis.load_images('images', with_path=True)

# 自动从文件夹路径提取标签,无需手动维护类别列表
image_data['label'] = image_data['path'].apply(lambda path: os.path.dirname(path).split('/')[-1])

image_data.save('boxes.sframe')
image_data.explore()

只要你的图片是按类别放在对应文件夹里,这个方法就能自动提取正确标签,从根源避免缺失值的产生。

第二步:正确使用dropna()清理残留缺失值

如果还是担心有异常图片导致的缺失值,要在分割训练测试集之前调用dropna(),并且要指定清理label列的缺失值,同时把结果赋值回原变量(因为dropna()默认返回新的SFrame,不会修改原数据):
修改train.py:

import turicreate as tc

data = tc.SFrame('boxes.sframe')
# 明确删除label列存在缺失值的行
data = data.dropna(column_names=['label'])

train_data, test_data = data.random_split(0.8)
model = tc.image_classifier.create(train_data, target='label', max_iterations=1000)

predictions = model.classify(test_data)
results = model.evaluate(test_data)
print "Accuracy : %s" % results['accuracy']
print "Confusion Matrix : \n%s" % results['confusion_matrix']
model.save('boxes.model')

你之前的data.dropna()没有赋值,等于白调用了,原data并没有被修改,这也是问题持续存在的原因之一。

关于max_iterations=1000的疑问

这个参数完全不会导致你遇到的缺失值错误,它只是控制模型训练时的迭代次数——数值越大训练时间越长,可能模型精度会更高,但和数据的缺失值问题没有任何关系。

内容的提问来源于stack exchange,提问作者Alessign

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:30:59