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

使用Turi创建字符与数字字符串分类模型的技术咨询

嘿,刚上手Turi就尝试文本分类,这个入门方向选得很实在!我来帮你把没写完的脚本补全,再梳理一遍完整的流程,确保你能顺利训练出区分纯字符和纯数字字符串的分类模型。

完整实现流程

1. 加载数据并确认格式

首先确保你已经安装了GraphLab Create(现在官方更名为Turi Create,但导入时仍可使用graphlab)。先把CSV数据加载进来,注意如果你的CSV没有表头,要手动指定列名,避免后续出错:

import graphlab as gl

# 加载CSV,假设你的CSV有表头:比如第一列是字符串,第二列叫`isNumber`(0=纯字符,1=纯数字)
# 如果没有表头,用这行:data = gl.SFrame.read_csv('data.csv', header=False, column_names=['input_string', 'isNumber'])
data = gl.SFrame('data.csv')

# 先打印前几行确认数据加载正确
print(data.head())

2. 可选:验证数据质量

因为是入门练习,数据质量直接影响模型效果,你可以加个小验证步骤,检查有没有标记错误的样本(比如标记为1但字符串含字母的情况):

def check_validity(row):
    # 标记为1的字符串必须全是数字,标记为0的必须全是字符
    if row['isNumber'] == 1:
        return row['input_string'].isdigit()
    else:
        return not row['input_string'].isdigit()

# 筛选出无效样本
invalid_samples = data[data.apply(check_validity) == False]
if len(invalid_samples) > 0:
    print("⚠️ 发现标记错误的样本:")
    print(invalid_samples)
else:
    print("✅ 所有样本验证通过!")

3. 拆分训练集与测试集

训练模型前一定要拆分数据,这样才能客观评估模型的泛化能力,通常按8:2的比例拆分:

# seed参数保证每次拆分结果一致,方便调试
train_data, test_data = data.random_split(0.8, seed=42)

4. 训练分类模型

现在补全你没写完的classifier.create代码,这里要明确指定特征列(你的字符串列)和目标列(标记列):

# 训练逻辑回归分类器(也可以指定model='svm'或留空让Turi自动选择)
model = gl.classifier.create(
    train_data,
    target='isNumber',  # 替换成你实际的标记列名,比如你写的`isNumb`
    features=['input_string'],  # 替换成你实际的字符串列名
    model='logistic_classifier'
)

5. 评估模型效果

用测试集评估模型的准确率和混淆矩阵,看看模型在 unseen 数据上的表现:

evaluation_results = model.evaluate(test_data)

print(f"模型准确率:{evaluation_results['accuracy']:.2f}")
print("\n混淆矩阵:")
print(evaluation_results['confusion_matrix'])

6. 用模型做预测

训练好后,就可以给新字符串做预测了,还能输出预测的概率:

# 创建待预测的新数据
new_strings = gl.SFrame({'input_string': ['qwerty', '123456', 'abc123', '789xyz']})

# 预测类别(0或1)
predictions = model.predict(new_strings)
# 预测属于类别1的概率
pred_probs = model.predict(new_strings, output_type='probability')

# 合并结果并打印
new_strings['predicted_isNumber'] = predictions
new_strings['probability_of_number'] = pred_probs

print(new_strings)

小提示

  • 如果你的标记列实际叫isNumb(你脚本里写的isNumb...),记得把代码里的target='isNumber'改成对应的列名,否则会报错。
  • 其实用原生Python的str.isdigit()就能直接区分纯数字字符串,但用Turi训练模型是很好的入门练习,能帮你熟悉机器学习分类的完整流程。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:48:53