Machine Learning with Swift
上QQ阅读APP看书,第一时间看更新

Importing the Core ML model into an iOS project

Create a new iOS project and drag and drop the DecisionTree.mlmodel into a project tree in Xcode. Click on it to see a machine learning model navigator screen:

Figure 2.11: Machine learning navigator screen

On this screen, you can find a familiar model description, model type (pipeline by some reason, in this case), the name of the Swift class that represents the model in the app, and lists of inputs and outputs. If you click on the small arrow next to the class name in the Model Class section, the autogenerated file DecisionTree.swift is opened. This reminds a Core Data framework, where you have autogenerated files for NSMangedObject subclasses. DecisionTree.swift contains three classes:

  • DecisionTreeInput: MLFeatureProvider, contains the input features (six of them, all Double).
  • DecisionTreeOutput: MLFeatureProvider, contains class label and class probability.
  • DecisionTree: NSObject, the class of the model itself. It contains methods for initialization and making predictions.

The method init(contentsOf: url) allows to replace the model in runtime, but only if you preserve the input and output structure. For example, this is how the model is loaded from the file in the bundle:

let bundle = Bundle.main 
let assetPath = bundle.url(forResource: "DecisionTree", withExtension:"mlmodelc") 
let sklDecisionTree = DecisionTree(contentsOf: assetPath!) 

In a same way, you can create a model with the content of a remote URL.

Drag and drop the RandomForest.ml model to the project to also compare accuracy of the models on the iOS.