public static string CreateNNetworkAndLearn(List <NnRow> rows) { // Prepare data double trainingSplitRatio = 0.7; int trainCount = (int)(rows.Count * trainingSplitRatio); var trainData = new MLNetData[trainCount]; var testData = new MLNetData[rows.Count - trainCount]; MLNetData[] allData = Convert(rows); // Split into Training and Testing sets Array.Copy(allData, 0, trainData, 0, trainCount); Array.Copy(allData, trainCount, testData, 0, rows.Count - trainCount); var allCollection = CollectionDataSource.Create(allData); var trainCollection = CollectionDataSource.Create(trainData); var testCollection = CollectionDataSource.Create(testData); double acc, auc, f1; PredictionModel <MLNetData, MLNetPredict> modelAll, modelTrain, modelBest; //(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new AveragedPerceptronBinaryClassifier ()); // acc 0.83, auc 0.86, f1 0.45 //(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new FastForestBinaryClassifier ()); // acc 0.85, auc 0.89, f1 0.46 (acc, auc, f1, modelBest) = TrainAndGetMetrics(trainCollection, testCollection, new FastTreeBinaryClassifier()); // acc 0.95, auc 0.97, f1 0.85 //(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new FieldAwareFactorizationMachineBinaryClassifier()); // acc 0.85, auc 0.88, f1 0.56 //(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new GeneralizedAdditiveModelBinaryClassifier ()); // acc 0.81, auc 0.80, f1 NaN //(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new LinearSvmBinaryClassifier ()); // acc 0.82, auc 0.86, f1 0.16 //(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new LogisticRegressionBinaryClassifier ()); // acc 0.84, auc 0.86, f1 0.40 //(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new StochasticDualCoordinateAscentBinaryClassifier()); // acc 0.84, auc 0.86, f1 0.40 //(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new StochasticGradientDescentBinaryClassifier ()); // acc 0.83, auc 0.86, f1 0.29 ///(acc, auc, f1, modelAll) = TrainAndGetMetrics(allCollection, allCollection, new EnsembleBinaryClassifier ()); //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new AveragedPerceptronBinaryClassifier ()); // acc 0.82, auc 0.84, f1 0.45 //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new FastForestBinaryClassifier ()); // acc 0.82, auc 0.83, f1 0.23 //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new FastTreeBinaryClassifier ()); // acc 0.82, auc 0.84, f1 0.46 //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new FieldAwareFactorizationMachineBinaryClassifier()); // acc 0.83, auc 0.85, f1 0.37 //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new GeneralizedAdditiveModelBinaryClassifier ()); // acc 0.81, auc 0.75, f1 NaN //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new LinearSvmBinaryClassifier ()); // acc 0.81, auc 0.83, f1 0.14 //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new LogisticRegressionBinaryClassifier ()); // acc 0.83, auc 0.84, f1 0.39 //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new StochasticDualCoordinateAscentBinaryClassifier()); // acc 0.82, auc 0.84, f1 0.43 //(acc, auc, f1, modelTrain) = TrainAndGetMetrics(trainCollection, testCollection, new StochasticGradientDescentBinaryClassifier ()); // acc 0.83, auc 0.83, f1 0.34 // Evaluate a training model //Console.WriteLine($"Accuracy: {metrics.Accuracy:P2}"); //Console.WriteLine($"Auc: {metrics.Auc:P2}"); //Console.WriteLine($"F1Score: {metrics.F1Score:P2}"); //var cv = new CrossValidator(); //CrossValidationOutput<MLNetData, MLNetPredict> cvRes = cv.CrossValidate<MLNetData, MLNetPredict>(pipelineAll); //Console.WriteLine($"Rms = {metrics.Rms}"); //Console.WriteLine($"RSquared = {metrics.RSquared}"); // Train the overall model string NnModelPath = @"NnInputs\mlDotNet_Datacup.model"; modelBest.WriteAsync(NnModelPath); return(NnModelPath); }
public static MLNetData[] Convert(List <NnRow> rows) { var allData = new MLNetData[rows.Count]; for (int i = 0; i < rows.Count; i++) { allData[i] = new MLNetData(); allData[i].Features = new float[Constants.len]; var arr = Array.ConvertAll(rows[i].nbs, x => (float)x); Array.Copy(arr, 0, allData[i].Features, 0, arr.Length); allData[i].Label = rows[i].verdict /* == 0? false: true*/; } return(allData); }