C#可以使用ML.Net来实现人工智能预测,下面是一些基本的步骤:
1.安装ML.Net。可以通过Visual Studio NuGet包管理器或者官网下载进行安装。
2.准备数据。可以使用Microsoft Excel进行数据采集和整理,将数据存储到CSV格式或者SQL Server数据库中。
3.定义数据结构。为了训练和预测模型,需要定义数据结构。例如,如果要预测一个人的年龄,可以定义一个包含Age、Gender和Salary属性的类。
4.选择算法和评估器。根据预测的问题和数据量,选择最适合的算法和评估器。
5.创建模型。通过调用MLContext对象来创建一个新的模型。
6.训练模型。使用数据来训练模型。此步骤可能需要一些时间,具体取决于算法、数据量和计算机性能。
7.评估模型。使用测试数据来评估模型的准确性,并对模型进行微调。
8.使用模型进行预测。现在模型已经训练好了,可以使用它来预测新数据的结果。
接下来,我将通过两个示例来演示如何使用ML.Net进行预测。
示例1: 预测购买电子产品的顾客
在这个示例中,我们要预测是否会购买电子产品的顾客。让我们来看看如何使用ML.Net完成这个任务。
1.定义数据结构
public class SalesData
{
[LoadColumn(0)]
public bool Bought { get; set; }
[LoadColumn(1)]
public int Age { get; set; }
[LoadColumn(2)]
public string Gender { get; set; }
[LoadColumn(3)]
public string Country { get; set; }
}
2.加载数据
var mlContext = new MLContext(seed: 1);
IDataView dataView = mlContext.Data.LoadFromTextFile<SalesData>(PATH_TO_DATA_FILE, separatorChar:',', hasHeader:true);
3.拆分数据
DataOperationsCatalog.TrainTestData splitData = mlContext.Data.TrainTestSplit(dataView, testFraction: 0.25);
IDataView trainData = splitData.TrainSet;
IDataView testData = splitData.TestSet;
4.选择算法和评估器
在这个示例中,我们选择使用二元分类算法和AUC评估器。
var pipeline = mlContext.Transforms.Conversion.MapValueToKey("Label", nameof(SalesData.Bought))
.Append(mlContext.Transforms.Concatenate("Features", nameof(SalesData.Age), nameof(SalesData.Country), nameof(SalesData.Gender)))
.Append(mlContext.Transforms.CopyColumns("Features", "NormalizedFeatures"))
.Append(mlContext.Transforms.NormalizeMinMax("NormalizedFeatures"))
.Append(mlContext.Transforms.Conversion.MapValueToKey("CountryId", nameof(SalesData.Country)))
.Append(mlContext.Transforms.Categorical.OneHotEncoding("CountryEncoded", "CountryId"))
.Append(mlContext.Transforms.Concatenate("Features", "NormalizedFeatures", "CountryEncoded"))
.Append(mlContext.Transforms.DropColumns(nameof(SalesData.Country), nameof(SalesData.CountryId), "NormalizedFeatures"))
.Append(mlContext.Transforms.NormalizeMinMax(nameof(SalesData.Age)))
.Append(mlContext.Transforms.NormalizeMinMax(nameof(SalesData.Gender)))
.Append(mlContext.Transforms.NormalizeMinMax("Features"))
.Append(mlContext.Transforms.NormalizeMinMax("Label"))
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"))
.Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabelProbability"));
var trainer = mlContext.BinaryClassification.Trainers.AveragedPerceptron();
var metrics = mlContext.BinaryClassification.CrossValidate(trainData, trainer, numberOfFolds: 5, labelColumnName: nameof(SalesData.Bought));
5.创建模型并训练
ITransformer model = pipeline.Fit(trainData);
6.评估模型
var testMetrics = mlContext.BinaryClassification.Evaluate(model.Transform(testData));
Console.WriteLine($"Accuracy {testMetrics.Accuracy:P2}");
Console.WriteLine($"AUC {testMetrics.AreaUnderRocCurve:P2}");
7.使用模型进行预测
预测单个样本:
var sample = new SalesData
{
Age = 23,
Gender = "Male",
Country = "USA",
};
var predictionEngine = mlContext.Model.CreatePredictionEngine<SalesData, SalesPrediction>(model);
var prediction = predictionEngine.Predict(sample);
Console.WriteLine($"Predicted buying: {prediction.Bought}");
预测多个样本:
var predictions = model.CreatePredictionEngine<SalesData, SalesPrediction>(mlContext)
.Predict(dataView);
foreach(var prediction in predictions)
{
Console.WriteLine($"Predicted buying: {prediction.Bought}");
}
示例2: 预测房价
这个示例中,我们要使用ML.Net来预测房价。具体如下:
1.定义数据结构
public class HouseData
{
[LoadColumn(0)]
public float Price { get; set; }
[LoadColumn(1, 3), VectorType(3)]
public float[] Features { get; set; }
}
public class HousePrediction
{
[ColumnName("Score")]
public float Price { get; set; }
}
2.加载数据
var mlContext = new MLContext(seed: 1);
IDataView dataView = mlContext.Data.LoadFromTextFile<HouseData>(PATH_TO_DATA_FILE, separatorChar:',', hasHeader:true);
3.拆分数据
DataOperationsCatalog.TrainTestData splitData = mlContext.Data.TrainTestSplit(dataView, testFraction: 0.25);
IDataView trainData = splitData.TrainSet;
IDataView testData = splitData.TestSet;
4.选择算法和评估器
在这个示例中,我们选择使用回归算法和均方误差评估器。
var pipeline = mlContext.Transforms.Concatenate("Features", "Features")
.Append(mlContext.Transforms.NormalizeMinMax("Features"))
.Append(mlContext.Transforms.NormalizeMinMax("Price"))
.Append(mlContext.Transforms.Conversion.MapValueToKey("Label", nameof(HouseData.Price)))
.Append(mlContext.Transforms.CopyColumns("Label", "Y"));
var trainer = mlContext.Regression.Trainers.OnlineGradientDescent();
var metrics = mlContext.Regression.CrossValidate(trainData, trainer, numberOfFolds: 5, labelColumnName: nameof(HouseData.Price));
5.创建模型并训练
ITransformer model = pipeline.Fit(trainData);
6.评估模型
var testMetrics = mlContext.Regression.Evaluate(model.Transform(testData));
Console.WriteLine($"RSquared {testMetrics.RSquared:0.##}");
Console.WriteLine($"RMS {testMetrics.RootMeanSquaredError:0.##}");
7.使用模型进行预测
预测单个样本:
var sample = new HouseData
{
Features = new float[] { 10.2f, 3.14f, 2.1f },
};
var predictionEngine = mlContext.Model.CreatePredictionEngine<HouseData, HousePrediction>(model);
var prediction = predictionEngine.Predict(sample);
Console.WriteLine($"Predicted price: {prediction.Price}");
预测多个样本:
var predictions = model.CreatePredictionEngine<HouseData, HousePrediction>(mlContext)
.Predict(dataView);
foreach(var prediction in predictions)
{
Console.WriteLine($"Predicted price: {prediction.Price}");
}
至此,使用ML.Net完成人工智能预测的攻略和两个示例讲解完毕。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#使用ML.Net完成人工智能预测 - Python技术站