VS Code + ML.NET 玩转交互式机器学习

上一篇文章中,我们介绍了 .NET Interactive Notbook,可以进行代码实时运行和交互式展示。

这对于ML.NET来说非常棒,可以运用到许多场景,比如数据探索、绘制数据图表、编制教学课件等。

下面,我们就用出租车费预测(https://github.com/feiyun0112/machinelearning-samples.zh-cn/tree/master/samples/csharp/getting-started/Regression_TaxiFarePrediction)来进行演示。

1.创建Notebook

首先,VS Code需要安装“.NET Interactive Notebooks”扩展。

新建文件,编程语言选择“.NET Interactive”,保存文件名后缀为“.ipynb”。

添加Markdown标记,说明一下这个机器学习任务要解决的问题场景。

完成编辑后,可以自动显示Markdown标记结果:

2.安装Nuget包

引用后面需要使用的NuGet包,这里,我们将使用ML.NET进行机器学习和XPlot绘制图表。

运行代码,下载和安装NuGet包。

可以看到,安装时间还是比较长的,所以可以放在单独的代码块提前运行。

3.定义DataStructures

定义加载数据以及训练或预测时,需要使用输入类和预测类,代码如下:

 public class TaxiTrip
{
    [LoadColumn(0)]
    public string VendorId;

    [LoadColumn(1)]
    public string RateCode;

    [LoadColumn(2)]
    public float PassengerCount;

    [LoadColumn(3)]
    public float TripTime;

    [LoadColumn(4)]
    public float TripDistance;

    [LoadColumn(5)]
    public string PaymentType;

    [LoadColumn(6)]
    public float FareAmount;
}

4.加载数据

加载训练和测试数据集,文件放在Notebook同一目录下

MLContext mlContext = new MLContext(seed: 0);

string TrainDataPath = "./taxi-fare-train.csv";
string TestDataPath = "./taxi-fare-test.csv";
IDataView baseTrainingDataView = mlContext.Data.LoadFromTextFile<TaxiTrip>(TrainDataPath, hasHeader: true, separatorChar: ',');
IDataView testDataView = mlContext.Data.LoadFromTextFile<TaxiTrip>(TestDataPath, hasHeader: true, separatorChar: ',');

IDataView trainingDataView = mlContext.Data.FilterRowsByColumn(baseTrainingDataView, nameof(TaxiTrip.FareAmount), lowerBound: 1, upperBound: 150);
display(h4("展示训练数据:"));
var someRows = mlContext.Data
    .CreateEnumerable<TaxiTrip>(trainingDataView, reuseRowObject: false)
    .Take(4).ToArray();
display(someRows);

我们筛选了出租车票金额在1-150之间的数据作为训练数据,并用内置函数display展示4行训练数据内容: 

5.图形化展示数据

图形方式能让我们更好地理解数据,选取100条训练数据,看看费用的分布情况:

var faresHistogram = Chart.Plot(new Histogram() { x = trainingDataView.GetColumn<float>("FareAmount").Take(100).ToArray(), autobinx = false, nbinsx = 20 });
var layout = new Layout.Layout() { title = "出租车费分布" };
faresHistogram.WithLayout(layout);
faresHistogram.WithXTitle("费用范围");
faresHistogram.WithYTitle("出行数");

display(faresHistogram)

可以看到费用大多数在5-10之间, 

6.训练模型

现在,让我们真正开始执行机器学习。我们将首先处理数据转换,然后添加训练器/算法,最后训练模型。

在执行窗口底部可以看到,训练速度还是比较快的,在我的机器上只需要1.7秒。

7.评估模型

我们需要这一步来总结我们的模型对新数据的准确性。为此,上一步中的模型针对另一个未在训练中使用的数据集运行(taxi-fare-test.csv)。此数据集也包含已知的费用。Regression.Evaluate()计算已知费用和模型预测的费用之间差异的各种指标。

IDataView predictions = trainedModel.Transform(testDataView);
var metrics = mlContext.Regression.Evaluate(predictions, labelColumnName: "Label", scoreColumnName: "Score");display(metrics)

6.绘制对比图

最后,我们绘制预测与实际值的对比图。如果回归模型工作得很好,那么这些点大部分应该是围绕着一条直线的,这条直线就是回归线。

回归线越接近“完美”(预测值等于测试数据集中的实际值),模型的质量就越好。

结论

后面的保存和使用模型,我们就不再演示了,请大家自行探索。

通过上面的示例,可以看到非常棒的交互体验。欢迎大家继续挖掘.NET Interactive的潜力,玩转交互式机器学习!!!

欢迎关注我的个人公众号”My IO“

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于C#+asp.net+sqlserver的商店积分管理系统的设计与实现的详细步骤: 1. 确定需求:商店积分管理系统需要实现积分的增加、减少、查询等功能,需要有管理员和用户两种角色,管理员可以对用户进行管理和积分操作,用户可以查询和使用自己的积分。 2. 数据库设计:根据需求设计数据库表,包括用户表、管理员表和积分记录表。其中用户表包含用户ID、用户名、密码、手机号码等信息;管理员表包含管理员ID、管理员名、密码等信息;积分记录表包含用户ID、积分变化、变化时间等信息。 3. 创建项目:使用Visual Studio创建ASP.NET Web Application项目,并选择MVC模板。 4. 创建模型:在Models文件夹下创建模型类,包括用户类、管理员类和积分记录类,每个类对应一个数据库表。 5. 创建控制器:在Controllers文件夹下创建控制器类,包括用户控制器和管理员控制器。控制器类中包含各种方法,用于处理用户请求并返回相应的视图。 6. 创建视图:在Views文件夹下创建各种视图,包括登录视图、注册视图、积分查询视图、积分变更视图等。视图中包含HTML和Razor语法,用于展示数据和接收用户输入。 7. 编写业务逻辑:在App_Code文件夹下创建业务逻辑类,包括用户管理类和积分管理类。业务逻辑类中实现各种数据操作方法,包括用户注册、登录、查询积分、增加积分、减少积分等。 8. 配置数据库连接:在Web.config文件中配置数据库连接字符串,以便应用程序能够连接到数据库。 9. 运行程序:在Visual Studio中按下F5键运行程序,测试各种功能是否正常。 10. 部署程序:将程序部署到服务器上,让用户可以通过浏览器访问。部署时需要将Web.config中的数据库连接字符串修改为服务器的数据库连接字符串。 以上是基于C#+asp.net+sqlserver的商店积分管理系统的设计与实现的详细步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值