VisualStudio2019机器学习Machine Learning
在Visual studio 2019 新建.net core 控制台项目MachineLearningDemo。
点击 工具--->NuGet包管理器--->程序包管理器控制台
输入命令 Install-Package Microsoft.ML
等待安装完成即可。
机器学习整体逻辑如下:
1.加入训练模型种子,一般为集合,集合越大,预测结果更接近实际结果。
2.估计预测:比如使用特征Features,输入参数,输出参数的指定
3.训练模型:比如这里使用线性回归,Fit()函数:训练并返回一个转换
4.根据输入参数,来预测返回结果,Predict()函数:预测结果。
因是预测,每次获得的结果不是固定的,即结果在某个范围内波动
一、在控制台程序中,输入代码,如下:
using System;
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Trainers;
namespace MachineLearningDemo
{
class Program
{
static void Main(string[] args)
{
/*
* https://docs.microsoft.com/zh-cn/dotnet/machine-learning/
* 机器学习Demo : ML.NET 文档
* 本文引用 https://docs.microsoft.com/zh-cn/dotnet/machine-learning/how-does-mldotnet-work
*/
MLContext mlContext = new MLContext();//机器学习上下文
//1.Import or create training data 导入或创建一个训练数据
//定义一个房屋元组:第一个代表房屋大小,对应字段:Item1(Size)。第二个代表房屋价格,对应字段:Item2(Price)
Tuple<float, float>[] houseData = new Tuple<float, float>[]
{
Tuple.Create(1.1F, 1.2F),
Tuple.Create(1.9f, 2.3f),
Tuple.Create(2.8f, 3.0f),
Tuple.Create(3.4f, 3.7f),
Tuple.Create(0.7f, 0.765f),
};
IDataView trainingData = mlContext.Data.LoadFromEnumerable(houseData);
// 2. Specify data preparation and model training pipeline 指定数据准备和模型培训管道
//特征Features:输入房屋大小【Item1(Size)】,输出房屋价格【Item2(Price)】
//估计链条<回归预测变换<线性回归模型参数>> Concatenate;连接
//线性回归关系:Item2 = Item1 * 1.09 注意:Item1,Item2是元组类Tuple<float, float>的属性(成员变量)
EstimatorChain<RegressionPredictionTransformer<LinearRegressionModelParameters>>
pipeline = mlContext.Transforms.Concatenate("Features", new[] { "Item1" })
.Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Item2", maximumNumberOfIterations: 100));
// 3. Train model 训练模型
//转换链<回归预测变换<线性回归模型参数>> Fit函数:训练并返回一个转换
TransformerChain<RegressionPredictionTransformer<LinearRegressionModelParameters>> model = pipeline.Fit(trainingData);
// 4. Make a prediction 做一个预测: 输入参数:房屋大小为3.5
Tuple<float, float> size = new Tuple<float, float>(3.5F, 0);
//创建预测
PredictionPrice price = mlContext.Model.CreatePredictionEngine<Tuple<float, float>, PredictionPrice>(model).Predict(size);
//注意:每次运行结果结果一般不是固定的数 在某个数值内(3.82)波动
Console.WriteLine($"Predicted price for size: {size.Item1 * 1000} sq ft= {price.Price * 100:C}k");
Console.ReadLine();
}
}
/// <summary>
/// 预测价格类
/// </summary>
public class PredictionPrice
{
[ColumnName("Score")]
public float Price { get; set; }
}
}
程序运行结果【因为是预测结果,所以每次运行的结果都不是固定值,在某个范围内波动】如图: