Machine learning Ml.NET-基于某些属性的预测部门
我试图预测当客户写支持单时,哪个部门应该收到新的通知单。支持票证将始终包括:Machine learning Ml.NET-基于某些属性的预测部门,machine-learning,.net-core,ml.net,Machine Learning,.net Core,Ml.net,我试图预测当客户写支持单时,哪个部门应该收到新的通知单。支持票证将始终包括: 消息:票据的实际消息 主题:票据的主题 标题:和可选标题,用于进一步描述问题 到目前为止,票证的分配是手动的,但我正在尝试创建一个模型,可以预测该票证应分配给的部门。我的培训数据包含这三个变量以及部门名称 支持 开发 … 我的训练数据由169k行组成,训练模型根本没有问题。我得到了一些很好的指标。当我试图从某种票证预测时,问题就来了。我得到的不是部门名称,而是十进制(2.5xx)。我不确定这是哪里出了问题。我从
:票据的实际消息消息
:票据的主题主题
:和可选标题,用于进一步描述问题标题
支持
开发
…
2.5xx
)。我不确定这是哪里出了问题。我从以下Microsoft指南中获得了灵感:
加载训练数据
var dataView = mlContext.Data.LoadFromTextFile<Message>(dataPath, hasHeader: true, allowQuoting: true);
预测部门名称
var predictionEngine = mlContext.Model.CreatePredictionEngine<Message, PredictedDepartment>(model);
var message = new Message()
{
Message = @"...", // removed for brevity
Subject = "Other questions",
Header = "Internet connection"
};
var prediction = predictionEngine.Predict(message);
Console.WriteLine($"Prediction result: {prediction.Name}"); // Department name
有人能解释一下发生了什么,为什么我没有得到一些字符串值,而是得到一些十进制数?我发现了我的问题
这和我的管道或者我训练模型的方式无关。我的管道中的MapKeyToValue
方法也没有问题。我只是对我的数据集有一个问题
我的CSV是逗号分隔的,并用于字符串的引号,因为我的Message
属性是多行的。我没有尝试支持这一点,而是将数据的导出更改为删除换行符,而不是引号字符串。我还改为制表符分隔符,而不是逗号分隔符
该模型现在似乎可以工作了,我得到了一个很好的预测。您是否必须执行此处所做的操作,并将其反特征化为字符串?可能是您的
MapKeyToValue
setup?@LewisTaylor,但如前所述,我使用的另一个教程没有使用您提供的示例中的方法。所以我希望我的设置也能以同样的方式工作。它也可能是MapKeyToValue
设置,但我不知道如何正确设置它。基本上我不知道为什么我会得到这样的结果,对此的任何解释都可能在某种意义上提供一个解决方案。
var predictionEngine = mlContext.Model.CreatePredictionEngine<Message, PredictedDepartment>(model);
var message = new Message()
{
Message = @"...", // removed for brevity
Subject = "Other questions",
Header = "Internet connection"
};
var prediction = predictionEngine.Predict(message);
Console.WriteLine($"Prediction result: {prediction.Name}"); // Department name
class Message
{
[LoadColumn(2)]
public string Message { get; set; }
[LoadColumn(0)]
public string Subject { get; set; }
[LoadColumn(1)]
public string Header { get; set; }
[LoadColumn(3)]
public string Name { get; set; } // Department name
}
class PredictedDepartment
{
[ColumnName("PredictedLabel")]
public string Name { get; set; } // Department name
}