【问题标题】:CoreML: why is the predictions an array?CoreML:为什么预测是一个数组?
【发布时间】:2019-06-21 11:26:18
【问题描述】:

考虑一个像这样的csv 文件:

number,weigth,length,depth,diameter
1,100,202,314,455
2,1040,2062,3314,4585
3,1200,2502,3134,4557
4,1500,2052,3143,4655
...

还有这样的代码

let csvFile = Bundle.main.url(forResource: "myData", withExtension: "csv")!
let  dataTable = try! MLDataTable(contentsOf: csvFile)

//打印(数据表)

let regressorColumns = ["weigth", "length", "depth", "diameter"]
let regressorTable = dataTable[regressorColumns]

let (regressorEvaluationTable, regressorTrainingTable) = regressorTable.randomSplit(by: 0.20, seed: 5)

let regressor = try! MLLinearRegressor(trainingData: regressorTrainingTable,
                                      targetColumn: "weigth")

let prediction = try! regressor.predictions(from: dataTable)
print (prediction)

prediction 是一个浮点数组,具有与csv 文件本身相同数量的元素。

四个问题:

  1. 为什么是数组?
  2. 为什么会浮动?
  3. 为什么数组的元素数量与输入 csv 相同?
  4. 这个数组到底代表什么?

【问题讨论】:

  • 对不起,那是我检查它上面的项目数量。我不应该在这里复制它。我已经修复了代码。
  • 线性回归的主要目标不是绘制一条适合您的数据的线吗?你希望prediction 是什么?
  • 其实不是数组,而是数据值的同构集合,类似于数组(见docs
  • 这个数据是什么意思?
  • 我远非该领域的专家,但在您的示例中,我希望预测是每一行的“重量”(原文如此)值(通过使用 3 个特征训练的模型:长度、深度和直径)。

标签: swift macos coreml createml


【解决方案1】:

您发布的代码的作用是在一些输入数据 (regressorTrainingTable) 上训练机器学习模型(特别是线性回归模型),目标是能够预测一些权重值(“依赖”或“目标”值)基于长度、深度和直径(“独立”或“特征”值)。 那么这个模型实际上是用来为dataTable中存储的每一行数据(长度、深度和直径)计算一个权重值。

所以prediction 是根据存储在dataTable 中的每行的长度、深度和直径值预测权重值的集合。希望这能回答问题 1、3 和 4。

至于第二个问题,它只是与构建模型的线性回归方法如何在幕后工作有关。在构建(训练)模型时,它会将所有输入(依赖和独立)值视为连续数字(即浮点数),即使它们在数据文件中表示为整数。

【讨论】:

    猜你喜欢
    • 2021-08-18
    • 2018-08-24
    • 1970-01-01
    • 2022-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    相关资源
    最近更新 更多