Esempio n. 1
0
        private static void DiamondML()
        {
            var mlContext = new MLContext();

            DataRelativePath  = $"{BaseDatasetsRelativePath}/diamond_data.csv";
            DataPath          = GetAbsolutePath(DataRelativePath);
            ModelRelativePath = $"{BaseModelsRelativePath}/whitediamondModel.zip";
            ModelPath         = GetAbsolutePath(ModelRelativePath);

            // STEP 1: Common data loading configuration
            IDataView dataView = mlContext.Data.LoadFromTextFile <DiamondData>(DataPath, separatorChar: ',', hasHeader: true);

            DataOperationsCatalog.TrainTestData trainTestSplit = mlContext.Data.TrainTestSplit(dataView, testFraction: 0.2);
            IDataView trainingData = trainTestSplit.TrainSet;
            IDataView testData     = trainTestSplit.TestSet;

            // STEP 2: Common data process configuration with pipeline data transformations
            //var dataProcessPipeline = mlContext.Transforms.CopyColumns(outputColumnName: "Features", inputColumnName: nameof(DiamondData.LumiStdHueMean));
            var dataProcessPipeline = mlContext.Transforms.Concatenate("Features", "LumiStd", "HueMean");

            // STEP 3: Set the training algorithm, then create and config the modelBuilder
            var trainer          = mlContext.BinaryClassification.Trainers.SdcaLogisticRegression(labelColumnName: "Label", featureColumnName: "Features");
            var trainingPipeline = dataProcessPipeline.Append(trainer);

            // STEP 4: Train the model fitting to the DataSet
            ITransformer trainedModel = trainingPipeline.Fit(trainingData);

            // STEP 5: Evaluate the model and show accuracy stats
            var predictions = trainedModel.Transform(testData);
            var metrics     = mlContext.BinaryClassification.Evaluate(data: predictions, labelColumnName: "Label", scoreColumnName: "Score");

            ConsoleHelper.PrintBinaryClassificationMetrics(trainer.ToString(), metrics);

            // STEP 6: Save/persist the trained model to a .ZIP file
            mlContext.Model.Save(trainedModel, trainingData.Schema, ModelPath);

            Console.WriteLine("The model is saved to {0}", ModelPath);

            // TRY IT: Make a single test prediction, loading the model from .ZIP file
            DiamondData sampleDiamond = new DiamondData {
                LumiStd = 0.1169f, HueMean = 0.13599f
            };

            // Create prediction engine related to the loaded trained model
            var predEngine = mlContext.Model.CreatePredictionEngine <DiamondData, DiamondPrediction>(trainedModel);

            // Score
            var resultprediction = predEngine.Predict(sampleDiamond);

            Console.WriteLine($"=============== Single Prediction  ===============");
            Console.WriteLine($"{sampleDiamond.LumiStd}, {sampleDiamond.HueMean} | Prediction: {(Convert.ToBoolean(resultprediction.Prediction) ? "white diamond" : "Non white diamond")} Probability of being white diamond: {resultprediction.Probability} ");
            Console.WriteLine($"================End of Process.Hit any key to exit==================================");
        }
Esempio n. 2
0
    void FillDiamond(ref Mesh diamond, ref DiamondData data)
    {
        _vertices[0].pos.x = data.pt1.x;
        _vertices[0].pos.y = data.pt1.y;
        _vertices[0].uv.x  = data.uv1.x;
        _vertices[0].uv.y  = data.uv1.y;

        _vertices[1].pos.x = data.pt2.x;
        _vertices[1].pos.y = data.pt2.y;
        _vertices[1].uv.x  = data.uv2.x;
        _vertices[1].uv.y  = data.uv2.y;

        _vertices[2].pos.x = data.pt3.x;
        _vertices[2].pos.y = data.pt3.y;
        _vertices[2].uv.x  = data.uv3.x;
        _vertices[2].uv.y  = data.uv3.y;

        _vertices[3].pos.x = data.pt4.x;
        _vertices[3].pos.y = data.pt4.y;
        _vertices[3].uv.x  = data.uv4.x;
        _vertices[3].uv.y  = data.uv4.y;

        _vertices[4].pos.x = data.pt5.x;
        _vertices[4].pos.y = data.pt5.y;
        _vertices[4].uv.x  = data.uv5.x;
        _vertices[4].uv.y  = data.uv5.y;

        MeshUpdateFlags flag = GetMeshUpdateFlags();

        const int indexCount  = 9;
        const int vertexCount = 5;

        // 設定 Mesh Topologiy
        SubMeshDescriptor desc = new SubMeshDescriptor(0, indexCount, MeshTopology.Triangles);

        diamond.SetSubMesh(0, desc, flag);

        // 宣告 index buffer 結構
        diamond.SetIndexBufferParams(indexCount, IndexFormat.UInt16);

        // 宣告 vertex buffer 結構
        diamond.SetVertexBufferParams(vertexCount, _layouts);

        diamond.SetVertexBufferData(_vertices, 0, 0, vertexCount, 0, flag);
        diamond.SetIndexBufferData(_indices, 0, 0, indexCount, flag);
    }