You may find below a working F# version of code for the ML tutorial, using Microsoft.ML 0.1.0 (might break with newer versions). Two major differences from your code that make the sample work are both within IrisData
and IrisPrediction
type definitions:
- Accurate presentation of C# POCO in F# having parameterless constructor and public access to the fields
- Correct porting of C#
float
to F#, which is float32
Here is the code
open Microsoft.ML
open Microsoft.ML.Runtime.Api
open Microsoft.ML.Trainers
open Microsoft.ML.Transforms
open System
type IrisData() =
[<Column("0")>]
[<DefaultValue>]
val mutable public SepalLength: float32
[<DefaultValue>]
[<Column("1")>]
val mutable public SepalWidth: float32
[<DefaultValue>]
[<Column("2")>]
val mutable public PetalLength:float32
[<DefaultValue>]
[<Column("3")>]
val mutable public PetalWidth:float32
[<DefaultValue>]
[<Column("4")>]
[<ColumnName("Label")>]
val mutable public Label:string
type IrisPrediction() =
[<ColumnName("PredictedLabel")>]
[<DefaultValue>]
val mutable public PredictedLabel : string
[<EntryPoint>]
let main argv =
let pipeline = new LearningPipeline()
let dataPath = "iris.data.txt"
let a = IrisPrediction()
pipeline.Add(new TextLoader<IrisData>(dataPath,separator = ","))
pipeline.Add(new Dictionarizer("Label"))
pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"))
pipeline.Add(new StochasticDualCoordinateAscentClassifier())
pipeline.Add(new PredictedLabelColumnOriginalValueConverter(PredictedLabelColumn = "PredictedLabel") )
let model = pipeline.Train<IrisData, IrisPrediction>()
let x = IrisData()
x.SepalLength <- 3.3f
x.SepalWidth <- 1.6f
x.PetalLength <- 0.2f
x.PetalWidth <- 5.1f
let prediction = model.Predict(x)
printfn "Predicted flower type is: %s" prediction.PredictedLabel
0
and the output it produces:
Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Using 4 threads to train.
Automatically choosing a check frequency of 4.
Auto-tuning parameters: maxIterations = 9996.
Auto-tuning parameters: L2 = 2.668802E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 892.
Not training a calibrator because it is not needed.
Predicted flower type is: Iris-virginica
Press any key to continue . . .
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…