版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq870841070/article/details/80256883
ML.NET入门笔记
ML.NET机器学习框架是基于.NET core 2.x的,所以我们必须安装.net core 2.x,然后顺便安装vs2017便于开发
1.创建项目
此例我们创建一个控制台应用myApp,创建之后使用Nuget安装 Microsoft.ML
安装完成之后我们来使用ML框架来做一个小程序,通过给定一些训练样本训练之后来预测花的品种 训练样本数据格式如下:
//萼片长度,萼片宽度,花瓣长度,花瓣宽度,品种
5.1,3.5,1.4,0.2,玫瑰花
4.9,3.0,1.4,0.2,玫瑰花
6.3,3.3,6.0,2.5,向日葵
...此处省略更多的数据
由此可见,上面每一行数据都是一个样本,其中每行的数值部分叫做样本的特征,而最后一列则为此特征的实际结果,那我们所做的就是利用大量的样本学习之后,我们给出一组特征值
比如1.2,3.5,1.4,0.6 然后在通过调用预测函数得到一个结果,比如结果就是玫瑰花或者其他的品种,好了,既然过程介绍完了就开始撸代码吧
1.首先为我们的样本创建一个对应的实体类
///花的样本实体类
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;
}
///预测结果返回的实体类
public class IrisPrediction
{
[ColumnName("PredictedLabel")]
public string PredictedLabels;
}
主要的调用代码
class Program
{
static void Main(string[] args)
{
// 创建学习管道对象
var pipeline = new LearningPipeline();
// 载入样本文件,并用作,分隔符
string dataPath = "iris-data.txt";
pipeline.Add(new TextLoader<IrisData>(dataPath, separator: ","));
// 转换数据
pipeline.Add(new Dictionarizer("Label"));
// 放入特征向量
pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"));
//为管道添加分类器算法
pipeline.Add(new StochasticDualCoordinateAscentClassifier());
// 将Label转换为原始文本
pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" });
// 训练模型
var model = pipeline.Train<IrisData, IrisPrediction>();
// 使用训练好的模型来预测结果
var prediction = model.Predict(new IrisData()
{
SepalLength = 3.3f,
SepalWidth = 1.6f,
PetalLength = 0.2f,
PetalWidth = 5.1f,
});
Console.WriteLine($"这朵花是: {prediction.PredictedLabels}");
Console.ReadKey();
}
}