C#使用ML.NET实现机器学习/神经网络,实现分析情绪(二元分类)问题

VS软件开发工具越来越强大,针对.NET开发2019年6月26号上线了机器学习框架ML.NET,但是只针对Visual Studio 2017 15.9.12及以后版本。所以各位要使用他要更新下自己的软件。同时,要下载ML.NET
开始正文,
注意我们要建立一个基于.NET Core2.1框架的应用,二不是. NET framework 4.6.1。不然后面在配unpnkg会出错。
在这里插入图片描述
1 我们新建一个myMLApp(Console App)项目,在解决方案管理器在工程上右键—添加---- Machine Learning。
这是弹出如下所示对话框
在这里插入图片描述
要生成您的模型,您需要选择您的机器学习场景,在这里我们Sentiment Analysis 场景,根据客户评论的内容(文本)预测用户的情绪。

2 下载数据进行分析,点击下载,将他保存成wikipedia-detox-250-line-data.csv 格式到你创建的工程中。然后,选择文件
在这里插入图片描述
在Column to Predict(Label)选择“Sentiment.”Label是你要预测的的结果,在本例中是在数据集第一列中找到的情绪。其余的列(在本例中是来自第二列评论的实际情感文本)是特性,这些特性有助于预测标签。
3 接下来开始训练你的模型,在对话框最左边选择Trian,
在这里插入图片描述
模型构建器使用不同的设置评估许多模型,以提供性能最佳的模型。注意,训练时间默认10秒。如果数据量越大,你应该设置更长的训练时间。
然后点击 Start training
Status——这显示了模型训练过程的状态;这将告诉您在培训过程中还剩多少时间,还将告诉您培训过程何时完成.
Best Accuracy—这显示了模型构建器迄今为止找到的最佳模型的精度。较高的精度意味着模型对测试数据的预测更加准确。
Best algorithm ——这将向您展示在模型构建器的探索过程中哪个算法执行得最好。
Last algorithm—这显示了Model Builder探索的最后一个算法。
4 评估你的模型
其中显示了各种输出,包括研究了多少个模型和ML任务(在本例中是二进制分类),Model Builder还显示了已探索的前5个模型,并显示了这5个前5个模型的几个评估指标,包括AUC、AUPRC和F1-score,您可以在这里了解更多信息。
在这里插入图片描述
5 创建代码
选择Add Projects.解决方案管理器中会添加机器学习模型和将定制模型应用到方案中在这里插入图片描述
myMLAppML.ConsoleApp是一个. net控制台应用程序,其中包含ModelBuilder.cs(用于构建/培训模型)和Program.cs(用于运行模型)。
myMLAppML.Model是一个. net标准类库,其中包含ModelInput.cs和ModelOutput.cs(用于模型培训和使用的输入/输出类)以及MLModel.zip(生成的序列化ML模型)。
要尝试该模型,您可以运行控制台应用程序(myMLAppML.ConsoleApp)来使用该模型预测单个语句的情绪。

6 使用模型
Model Builder已经为您生成了经过训练的模型和代码,所以您现在可以在其他.NET应用程序(例如myMLApp console应用程序)中使用该模型
<1>从您的myMLApp应用程序中,向生成的库项目(myMLAppML.Model)添加一个引用。
右键单击您的myMLApp项目并选择添加 > 引用。在引用管理器中,检查myMLAppML。建模并选择OK。
<2>在你的myMLApp,安装 ML.NET NuGet package.
注意,你可能会不断出现下面这个问题,你只需要不断下载nupkg文件就可以了。
在这里插入图片描述
<3>myMLAppML.Model中,右击选择属性,复制到输出目录改为“”始终复制“”
<4>将myMLApp中program.cs代码改为如下所示

using System;
using MyMLAppML.Model.DataModels;
using Microsoft.ML;

namespace myMLApp
{
    class Program
    {
        static void Main(string[] args)
        {
            ConsumeModel();
        }

        public static void ConsumeModel()
        {
            // Load the model
            MLContext mlContext = new MLContext();

            ITransformer mlModel = mlContext.Model.Load("MLModel.zip", out var modelInputSchema);

            var predEngine = mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel);

            // Use the code below to add input data
            var input = new ModelInput();
            input.SentimentText = "Type your sentiment";

            // Try model on sample data
            // True is toxic, false is non-toxic
            ModelOutput result = predEngine.Predict(input);

            Console.WriteLine($"Text: {input.SentimentText} | Prediction: {(Convert.ToBoolean(result.Prediction) ? "Toxic" : "Non Toxic")} sentiment");
        }
    }
}
input.SentimentText = "That is rude.";

运行,得到预测结果

  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是一个完整的C#代码例程,用于使用Emgu CV实现机器学习图像分类的训练和测试: ``` using System; using System.IO; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.ML; using Emgu.CV.ML.MlEnum; using Emgu.CV.Structure; namespace ImageClassification { class Program { static void Main(string[] args) { // 图像大小 const int imageWidth = 128; const int imageHeight = 128; // 训练集和测试集目录 var trainDir = Path.Combine(Environment.CurrentDirectory, "train"); var testDir = Path.Combine(Environment.CurrentDirectory, "test"); // 类别数量 var classCount = Directory.GetDirectories(trainDir).Length; // 创建模型 var model = new SVM(); // 创建训练数据 var trainData = new Mat(); var trainLabels = new Mat(); foreach (var classDir in Directory.GetDirectories(trainDir)) { var className = Path.GetFileName(classDir); var classLabel = int.Parse(className); foreach (var imagePath in Directory.GetFiles(classDir)) { using (var image = new Image<Bgr, byte>(imagePath)) { var resizedImage = image.Resize(imageWidth, imageHeight, Inter.Linear); var featureVector = resizedImage.Flatten().ToMat(); trainData.PushBack(featureVector); trainLabels.PushBack(new Mat(1, 1, DepthType.Cv32S, classLabel)); } } } // 训练模型 var trainParams = new SVMParams { KernelType = SVMKernelType.Linear, C = 1, Gamma = 0.1, }; model.TrainAuto(trainData, SampleTypes.RowSample, trainLabels, varIdx: null, param: trainParams); // 测试模型 var testData = new Mat(); var testLabels = new Mat(); foreach (var classDir in Directory.GetDirectories(testDir)) { var className = Path.GetFileName(classDir); var classLabel = int.Parse(className); foreach (var imagePath in Directory.GetFiles(classDir)) { using (var image = new Image<Bgr, byte>(imagePath)) { var resizedImage = image.Resize(imageWidth, imageHeight, Inter.Linear); var featureVector = resizedImage.Flatten().ToMat(); testData.PushBack(featureVector); testLabels.PushBack(new Mat(1, 1, DepthType.Cv32S, classLabel)); } } } var testResult = model.Predict(testData); var accuracy = model.Evaluate(testData, testLabels); Console.WriteLine($"Test accuracy: {accuracy}"); } } } ``` 这个例程使用SVM模型来进行图像分类。它首先将训练集和测试集中的图像转换为特征向量,并使用这些特征向量来训练模型。在测试阶段,它将测试集的特征向量输入到模型中,并计算模型的精度。 请注意,这个例程使用了Emgu CV的ML模块来训练和测试模型。如果您需要使用卷积神经网络等其他机器学习模型,可以使用Emgu CV的DNN模块。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值