.NET Core玩转机器学习

ML.NET 专门为.NET开发者提供了一套跨平台的开源的机器学习框架。

ML.NET支持.NET开发者不需要过度专业的机器学习开发经验,就能轻松地训练自己的模型,并且嵌入到自己的应用中。一切尽在.NET之中。ML.NET早期是由Microsoft Research开发,近十年来逐步集成到一个大体系中被众多Microsoft产品使用,如大家熟知的Windows、Bing、PowerPoint、Excel之类。

ML.NET的第一个预览版提供了分类器(如文本分类、情感分析)和回归(如价格预测)等实用的机器学习模型。第一版发布后在既有功能之上又新增了关于训练模型的.NET API,使用这些模型进行预测,就像框架中算法、转换、数据结构一类核心组件一样的开发体验。

接下来用个示例,一起进入快速上手的实践中来。

  1. 安装.NET SDK 

    为了创建一个.NET应用,首先下载 .NET SDK。  

  2. 创建应用

    使用如下命令初始化项目,创建一个控制台应用程序,目标为myApp

    dotnet new console -o myAppcd myApp
  3. 安装ML.NET包

    使用如下命令安装Microsoft.ML包:

    dotnet add package Microsoft.ML
  4. 下载数据集

    假设我们使用机器学习来预测鸢尾花的类型,比如有setosa、versicolor、virginica三种,基于特征有四种:花瓣长度、花瓣宽度, 萼片长度、萼片宽度。

    去UCI Machine Learning Repository: Iris Data Set下载一个现成的数据集,复制粘贴其中的数据到任何一个文本编辑器中,然后保存命名为iris-data.txtmyApp目录中。

    粘贴完文本内容应该是如下格式,每一行表示不同鸢尾花的样本,数值的部分从左到右依次是萼片长度、萼片宽度、花瓣长度、花瓣宽度,最后是鸢尾花的类型。

    5.1,3.5,1.4,0.2,Iris-setosa
    4.9,3.0,1.4,0.2,Iris-setosa
    4.7,3.2,1.3,0.2,Iris-setosa
    ...

    如果是使用了Visual Studio,将iris-data.txt添加至项目中,需要进行如下配置确保运行时数据集文件在输出的目录中。

    640?wx_fmt=png

  1. 编写代码

    打开Program.cs文件,输入以下代码:

using Microsoft.ML;

using Microsoft.ML.Runtime.Api;

using Microsoft.ML.Trainers;

using Microsoft.ML.Transforms;

using System;


namespace myApp

{

    class Program

    {

        // STEP 1: Define your data structures


        // IrisData is used to provide training data, and as 

        // input for prediction operations

        // - First 4 properties are inputs/features used to predict the label

        // - Label is what you are predicting, and is only set when training

        public class IrisData

        {

            [Column("0")]

            public float SepalLength;


            [Column("1")]

            public float SepalWidth;


            [Column("2")]

            public float PetalLength;


            [Column("3")]

            public float PetalWidth;


            [Column("4")]

            [ColumnName("Label")]

            public string Label;

        }


        // IrisPrediction is the result returned from prediction operations

        public class IrisPrediction

        {

            [ColumnName("PredictedLabel")]

            public string PredictedLabels;

        }


        static void Main(string[] args)

        {

            // STEP 2: Create a pipeline and load your data

            var pipeline = new LearningPipeline();


            // If working in Visual Studio, make sure the 'Copy to Output Directory' 

            // property of iris-data.txt is set to 'Copy always'

            string dataPath = "iris-data.txt";

            pipeline.Add(new TextLoader<IrisData>(dataPath, separator: ","));


            // STEP 3: Transform your data

            // Assign numeric values to text in the "Label" column, because only

            // numbers can be processed during model training

            pipeline.Add(new Dictionarizer("Label"));


            // Puts all features into a vector

            pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"));


            // STEP 4: Add learner

            // Add a learning algorithm to the pipeline. 

            // This is a classification scenario (What type of iris is this?)

            pipeline.Add(new StochasticDualCoordinateAscentClassifier());


            // Convert the Label back into original text (after converting to number in step 3)

            pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" });


            // STEP 5: Train your model based on the data set

            var model = pipeline.Train<IrisData, IrisPrediction>();


            // STEP 6: Use your model to make a prediction

            // You can change these numbers to test different predictions

            var prediction = model.Predict(new IrisData()

            {

                SepalLength = 3.3f,

                SepalWidth = 1.6f,

                PetalLength = 0.2f,

                PetalWidth = 5.1f,

            });


            Console.WriteLine($"Predicted flower type is: {prediction.PredictedLabels}");

        }

    }

}

运行应用

使用如下命令行运行程序:

dotnet run

在最后一行将输出对花的预测结果,你可以修改传给Predict函数各种鸢尾花的特征值看看有什么不同的结果。

恭喜,你已经跨入使用ML.NET进行机器学习的门槛了!

原文地址: https://www.cnblogs.com/Wddpct/p/9002242.html


.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com

640?wx_fmt=jpeg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/321364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P2900-[USACO08MAR]Land AcquisitionG【斜率优化】

正题 题目链接:https://www.luogu.com.cn/problem/P2900 题目大意 nnn块hi∗wih_i*w_ihi​∗wi​的土地&#xff0c;购买一组土地需要max(h)∗max(w)max(h)*max(w)max(h)∗max(w)&#xff0c;求购买所有土地的最小费用。 解题思路 首先如果hhh和www都小于另一块土地显然是不需…

二元运算 FFT+分治

题目&#xff1a; 4836: [Lydsy2017年4月月赛]二元运算 Time Limit: 8 Sec Memory Limit: 128 MB Submit: 486 Solved: 162 [Submit][Status][Discuss] Description 定义二元运算 opt 满足 现在给定一个长为 n 的数列 a 和一个长为 m 的数列 b &#xff0c;接下来有 q 次询问。…

【记忆化搜索】【线性化DP】滑雪 (ssl 1202/luogu 1434/pku 1088)

滑雪滑雪滑雪 ssl 1202 luogu 1434 pku 1088 题目大意&#xff1a; 有一个N*M的矩阵&#xff0c;每个位置都有一个数&#xff0c;可以从大的数走向小的数&#xff0c;问可走的路最长是多少 原题 Michael喜欢滑雪百这并不奇怪&#xff0c; 因为滑雪的确很刺激。可是为了获…

POJ2942-Knights of the Round Table【tarjan】

正题 题目链接:http://poj.org/problem?id2942 题目大意 有nnn个骑士&#xff0c;有mmm组讨厌关系&#xff0c;要求讨厌的不能坐相邻&#xff0c;而且要求每次会有都有奇数个人&#xff0c;求有多少个骑士一组会议都不能参加。 解题思路 首先构一个补图&#xff0c;然后求有…

UVA4671 K-neighbor substrings FFT+字符串hash

题解&#xff1a; 将字符串A、B中的a和b分别以1和-1表示&#xff0c;对字符串B进行反转。 将A和B看成多项式&#xff0c;求卷积&#xff0c;这样的话从结果区间的[lenB−1,lenA)[lenB−1,lenA)中的每一个点的值valval&#xff0c;(lenB−val)/2(lenB−val)/2代表当前位置的字串…

微软Build 2018展示Visual Studio功能:跨系统云编程

5 月 8 日凌晨消息&#xff0c;微软 Build 2018 开发者大会在今天正式来开帷幕。很明显整场发布会被分为了上下两个部分&#xff0c;上半场如果说是聊一些技术实现和愿景&#xff0c;那下半场就应该说是实战说明了。跨平台云端编程了解下微软在现场展示了 Visual Studio&#x…

【DP】花店橱窗布置 (ssl 1626/luogu 1854)

花店橱窗布置花店橱窗布置花店橱窗布置 ssl 1626 luogu 1854 题目大意&#xff1a; 有n朵花和m个花瓶&#xff0c;每一朵花插在不同的花瓶里会有不同的美丽度&#xff0c;花瓶和花必须按原来的顺序摆放&#xff0c;求最大的美丽值 Description 假设你想以最美观的方式布置…

P4819-[中山市选]杀人游戏【tarjan】

正题 题目链接:https://www.luogu.com.cn/problem/P4819 题目大意 nnn个人&#xff0c;一个杀手&#xff0c;搜查一个平民可以知道他认识的人的身份&#xff0c;搜查杀手就会死&#xff0c;求最优情况下警察的最低死亡概率。 解题思路 先用tarjantarjantarjan搜出强连通&…

hdu4609 3idiots 三角形计数 FFT

直接上代码 #include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; double pi acos(-1.0); struct complex{double re,im;complex(double r 0.0,double i 0.0):re(r),im(i…

利用Skywalking-netcore监控你的应用性能

SkywalkingSkyWalking开源项目由吴晟于2015年创建&#xff0c;同年10月在GitHub上作为个人项目开源。SkyWalking项目的核心目标&#xff0c;是针对微服务、Cloud Native、容器化架构&#xff0c;提供应用性能监控&#xff08;APM&#xff09;和分布式调用链追踪能力。2017年11月…

【背包】逃亡的准备 (ssl 1236)

逃亡的准备逃亡的准备逃亡的准备 ssl 1236 类似一样题目&#xff08;除数组范围外&#xff09;:ssl 2289&#xff08;庆功会&#xff09; 题目大意&#xff1a; 有n个物品&#xff0c;每个物品可以选l[i]个,每个的代价为a[i],价值为b[i]&#xff0c;在代价不大于m的情况下&a…

P3648-[APIO2014]序列分割【斜率优化】

正题 题目链接:https://www.luogu.com.cn/problem/P3648 题目大意 nnn个数字的序列&#xff0c;分割kkk次&#xff0c;每次的权值是左右两块数字的乘积。求最大权值和分割方案。 解题思路 显然分割顺序不会影响结果&#xff0c;一个分割方式的答案是每一块与其他块的乘积之和…

codeforces E. Jamie and Tree LCA+dfs序+线段树

题解&#xff1a; 写起来还稍微有点麻烦。 dfs序线段树可以维护子树的整体修改和查询。 因此&#xff0c;这道题我们要往子树上靠。 我们首先从1号点进行dfs遍历&#xff0c;顺便求出点的dfs序和深度&#xff0c;然后我们采用倍增的思想&#xff0c;可以预处理出每个点的祖先…

async/await 的基本实现和 .NET Core 2.1 中相关性能提升

前言这篇文章的开头&#xff0c;笔者想多说两句&#xff0c;不过也是为了以后再也不多嘴这样的话。在日常工作中&#xff0c;笔者接触得最多的开发工作仍然是在 .NET Core 平台上&#xff0c;当然因为团队领导的开放性和团队风格的多样性&#xff08;这和 CTO 以及主管的个人能…

【DP】砝码称重 (ssl 1072)

砝码称重 ssl 1072 题目大意&#xff1a; 有6种砝码&#xff0c;每种的个数分别为a1,a2,a3,a4,a5,a6,请问可以平出多少种重量(0除外) Description 设有1g、2g、3g、5g、10g、20g的砝码各若干枚&#xff08;其总重<1000&#xff09;&#xff0c; 要求&#xff1a; 输入…

P5025-[SNOI2017]炸弹【tarjan,线段树优化建图】

正题 题目链接:https://www.luogu.com.cn/problem/P5025 题目大意 .nnn个炸弹&#xff0c;每个在xxx位置处&#xff0c;范围为rrr。定义fif_ifi​表示第iii个炸弹爆炸能连锁的炸弹数&#xff0c;要求输出∑i1nfi∗i\sum_{i1}^nf_i*ii1∑n​fi​∗i 解题思路 将每个炸弹可以炸…

使用Swashbuckle构建RESTful风格文档

本次和大家分享的是Swagger to WebApi的nuget包Swashbuckle&#xff1b;因为项目需要统一api文档的风格&#xff0c;并要支持多种开发语言&#xff08;C#&#xff0c;java&#xff0c;python&#xff09;&#xff0c;所以首先想到的是swagger来构建api文档&#xff0c;本章讲解…

【dfs】【bfs】【链表】 求连通分量 (ssl 1759)

求连通分量 ssl 1759 题目大意 由n个点组成的无向图&#xff0c;求连通在一起的点数最大是多少 原题 求一个图的连通分量 Input n 顶点数(<100) 边 Output 连通分量 Sample Input 8 6 3 1 2 2 5 5 4 4 1 8 7 0 0 Sample Output 4 方法一&#xff08;dfs …

P2472-[SCOI2007]蜥蜴【网络流】

正题 题目链接:https://www.luogu.com.cn/problem/P2472 题目大意 n∗mn*mn∗m个格子&#xff0c;每个格子的石柱高度不同&#xff0c;蜥蜴可以跳到距离不超过ddd的石柱处&#xff0c;并且先前所站的石柱高度减一&#xff0c;为0则不能站&#xff0c;然后求有多少只蜥蜴不可以…

发布 Rafy .NET Standard 版本 Nuget 包

去年年中&#xff0c;Rafy 框架的源码就已经支持了 Net Standard 2.0 版本。其开源代码也已经上传到 Github 中&#xff1a;https://github.com/zgynhqf/rafy/tree/NetStandard2.0 。但是这都只是在源码层面支持 NS2.0&#xff0c;并没有发布其正式的 Nuget 包。要使用这个版本…