CreateML初体验
2019-07-26 本文已影响0人
MariaPang
我不写代码, 我只是代码的搬运工. 公众号(曼鱼说iOS)密码忘记了, 先写在这里.
研究ML有比较长一段时间了, 之前都是看的Python的, 最近挤时间看了下CreateML , 在它出现之前, 在苹果机上只能用在其他平台已经训练好的模型,然后用CoreML 这个框架去做些预测工作. 有了CreateML 就可以在Mac上用playground 实时训练模型了.
打算用一个数据集(10000组数据), 来根据 一个人喝咖啡数,醒来时间,预估睡眠时间这三个特征来 预测实际去睡觉的时间.
步骤大概是:
下载json 格式的数据集, 放于桌面 -> 根据数据源创建表 -> 分配训练集和测试集的比例(要保证每次一样效果,用带seed参数的那个分配方法) -> 根据目标预测项创建回归器 -> 评估回归器的效果 -> 加上元数据 -> 转化为.mlmodel模型并写入本地 -> 用这个模型结合 CoreML框架做预测app(这部分下次补充).
代码:
import CreateML
import Foundation
//通过桌面的json 文件创建一个 数据表
let table = try MLDataTable(contentsOf:URL(fileURLWithPath: "/Users/maria.pang/Desktop/better-rest.json"))
// 把表数据分为训练集和测试集, 并且两者比例 为 8: 2
let (trainingData, testingData) = table.randomSplit(by: 0.8)
//根据目标项 (实际要预测的是 喝不同量的咖啡等三个特征条件下,实际开始入睡的时间)创建回归器
/* json 格式如下
{
"wake": 31500,
"estimatedSleep": 9,
"coffee": 6,
"actualSleep": 38230
}
*/
let regressor = try MLRegressor(trainingData: trainingData, targetColumn: "actualSleep")
//根据数据集 和所使用的 回归器生成 评估矩阵, 打印错误集的方差和最大值
let evaluationMetrics = regressor.evaluation(on: table)
print(evaluationMetrics.rootMeanSquaredError)
print(evaluationMetrics.maximumError)
//模型创建者,描述等生成模型所需的额外元信息
let metadata = MLModelMetadata(author: "MariaPang", shortDescription: "A model trained to predict optimum sleep times for coffee drinkers.", license: "not sure by now", version: "1.0", additional: nil)
//将训练玩的回归器 添加额外的元信息后 转化为 coreML 可以用的.mlmodel, 写入到指定路径
try regressor.write(to: URL(fileURLWithPath: "/Users/maria.pang/Desktop/SleepCalculator.mlmodel"), metadata: metadata)
image.png
未完待续.......