C#使用Visual Studio2022自带的Machine Learning自动生成数据模型,并使用生成的模型进行结果预测

C#使用Visual Studio2022自带的Machine Learning自动生成数据模型,并使用生成的模型进行结果预测。

添加机器学习功能,右击项目->添加->Machine leaning Model

C#使用Visual Studio2022自带的Machine Learning自动生成数据模型,并使用生成的模型进行结果预测_第1张图片

 跟具自身训练数据特征选择合适模型进行训练,数据放置Excel按一步步提示导入即可生成MLModel.zip模型

C#使用Visual Studio2022自带的Machine Learning自动生成数据模型,并使用生成的模型进行结果预测_第2张图片

 通过调用该模型对新数据进行结果预测

C#使用Visual Studio2022自带的Machine Learning自动生成数据模型,并使用生成的模型进行结果预测_第3张图片

程序结构

C#使用Visual Studio2022自带的Machine Learning自动生成数据模型,并使用生成的模型进行结果预测_第4张图片

//ML定义模型输入、输出

public class ModelInput
    {
        [ColumnName("Issue"), LoadColumn(0)]
        public string Issue { get; set; }


        [ColumnName("action"), LoadColumn(1)]
        public string Action { get; set; }
    }

public class ModelOutput
    {
        [ColumnName("PredictedLabel")]
        public String Prediction { get; set; }
        public float[] Score { get; set; }
    }

 //Form1.cs 

ModelInput issue = new ModelInput()
                    {
                        Issue = "问题描述"
                    };

                    var predictionResult = ConsumeModel.Predict(issue);
                    string str = "";

                     //输出前5种可能解决方案及可能性占比
                    for(int i=0;i<5; i++)
                    {
                        str += predictionResult[i] + "\r\n";
                    }
                    txb_solution.Text += str;

//ConsumeModel.cs

public class ConsumeModel
    {
       

        public static string[] Predict(ModelInput input)
        {
            MLContext mlContext = new MLContext();

           //模型存放路径
            string modelPath = Application.StartupPath+ "\\MLModel.zip";
            ITransformer mlModel = mlContext.Model.Load(modelPath, out var modelInputSchema);
            var predEngine = mlContext.Model.CreatePredictionEngine(mlModel);

            var laberBuffer = new VBuffer>();
            predEngine.OutputSchema["Score"].Annotations.GetValue("SlotNames", ref laberBuffer);
            var labers = laberBuffer.DenseValues().Select(l => l.ToString()).ToArray();
            ModelOutput modelOutput = predEngine.Predict(input);
            //更改原先的单结果输出方式,输出前5种可能结果并按可能性大小排序
            // ModelOutput modelOutput = PredictionEngine.Value.Predict(input);
            var index = Array.IndexOf(labers, modelOutput.Prediction);
            var score = modelOutput.Score[index];

            var top10Scores = labers.ToDictionary(
                l => l,
                l => (decimal)modelOutput.Score[Array.IndexOf(labers, l)]
                )
                .OrderByDescending(kv => kv.Value)
                .Take(5)
                ;

            //var labelBuffer = new VBuffer>();
            //predictionEngine.OutputSchema["Score"].Annotations.GetValue("SlotNames", ref labelBuffer);
            //var labels = labelBuffer.DenseValues().Select(l => l.ToString()).ToArray();

            string[] str = new string[5];
            for (int i = 0; i < 5; i++)
            {
                string rate = "<1%";
                double value = Math.Round(Convert.ToDouble(top10Scores.ElementAt(i).Value) * 100, 1);
                if (value >= 1)
                {
                    rate = value + "%";
                }
                str[i] = top10Scores.ElementAt(i).Key + " : " + rate;
                //str[i]=   top10Scores.ElementAt(i).Key+ " : " +top10Scores.ElementAt(i).Value;
            }

            return str;
        }
    }

你可能感兴趣的:(c#,机器学习)