Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ml.net System.ArgumentOutOfRangeException:&x27;功能栏';功能';未找到(参数';模式';)';_Ml.net - Fatal编程技术网

Ml.net System.ArgumentOutOfRangeException:&x27;功能栏';功能';未找到(参数';模式';)';

Ml.net System.ArgumentOutOfRangeException:&x27;功能栏';功能';未找到(参数';模式';)';,ml.net,Ml.net,我在训练模特时遇到了一个问题。我有一系列HTTP请求,我希望能够确定请求是否来自机器人。为了训练这一点,我有一系列的方法: 公共类请求 { 公共字符串Url{get;set;} 公共字符串用户代理{get;set;} 公共bool IsBot{get;set;} } 还有这样一个预测类: 公共类IsBotPrediction { [ColumnName(“PredictedLabel”)] 公共布尔预测{get;set;} 公共浮动分数{get;set;} } 就本例而言,我创建了一个硬编码

我在训练模特时遇到了一个问题。我有一系列HTTP请求,我希望能够确定请求是否来自机器人。为了训练这一点,我有一系列的方法:

公共类请求
{
公共字符串Url{get;set;}
公共字符串用户代理{get;set;}
公共bool IsBot{get;set;}
}
还有这样一个预测类:

公共类IsBotPrediction
{
[ColumnName(“PredictedLabel”)]
公共布尔预测{get;set;}
公共浮动分数{get;set;}
}
就本例而言,我创建了一个硬编码数据列表:

var trainingData=新列表
{
新请求{Url=“/wp admin”,UserAgent=“a bot”,IsBot=true},
新请求{Url=“/backoffice”,UserAgent=“a bot”,IsBot=true},
新请求{Url=“/hack”,UserAgent=“a bot”,IsBot=true},
新请求{Url=“/login”,UserAgent=“a bot”,IsBot=false},
新请求{Url=“/dashboard”,UserAgent=“a bot”,IsBot=false},
新请求{Url=“/humans.txt”,UserAgent=“a bot”,IsBot=false},
新请求{Url=“/admin”,UserAgent=“a bot”,IsBot=true},
};
要训练模型,我使用以下代码:

IDataView mlData=mlContext.Data.LoadFromEnumerable(trainingData);
var dataPrepPipeline=mlContext
.变换
.文本
.FeatureText(“UrlF”、“Url”)
.Append(mlContext.Transforms.Text.featureizeText(“UserAgentF”、“UserAgent”))
.Append(mlContext.Transforms.Concatenate(“Features”、“UrlF”、“UserAgentF”))
.Append(mlContext.Transforms.NormalizeMinMax(“Features”、“Features”))
.AppendCacheCheckpoint(mlContext);
var prepPipeline=dataPrepPipeline.Fit(mlData);
var trainer=mlContext
.二进制分类
.教练
.AveragedPerceptron(labelColumnName:“IsBot”,迭代次数:10,featureColumnName:“Features”);
var prepreceddata=prepPipeline.Transform(mlData);
ITransformer trainedModel=trainer.Fit(预处理数据);
这个训练有素的模型似乎很成功。但当我尝试创建预测引擎时:

var predEngine=mlContext.Model.CreatePredictionEngine(trainedModel);
我得到以下例外情况:

System.ArgumentOutOfRangeException:'Features列'Feature'未找到(参数'schema')'


你能帮我弄清楚这意味着什么吗?

这可能是因为在数据安装到模型中之前对其进行了转换

下面的设置应该可以工作

var dataPrepPipeline = mlContext.Transforms.Text.FeaturizeText("UrlF", "Url")
     .Append(mlContext.Transforms.Text.FeaturizeText("UserAgentF", "UserAgent"))
     .Append(mlContext.Transforms.Concatenate("Features", "UrlF", "UserAgentF"))
     .Append(mlContext.Transforms.NormalizeMinMax("Features", "Features"))
     .AppendCacheCheckpoint(mlContext);

var dataPrepModel = dataPrepPipeline.Fit(mlData);
var dataPrepDataView = dataPrepModel.Transform(mlData);

var pipeline = dataPrepPipeline.Append(
            mlContext.BinaryClassification.Trainers.AveragedPerceptron(labelColumnName: "IsBot", numberOfIterations: 10, featureColumnName: "Features"));

mlContext.Model.Save(dataPrepModel, dataPrepDataView.Schema, "./dataprep.zip");

var model = pipeline.Fit(mlData);

var modelDataView = model.Transform(mlData);

mlContext.Model.Save(model, modelDataView.Schema, "./model.zip");

var predEngine = mlContext.Model.CreatePredictionEngine<Request, IsBotPrediction>(model);
var-datapreppippeline=mlContext.Transforms.Text.FeaturizeText(“UrlF”、“Url”)
.Append(mlContext.Transforms.Text.featureizeText(“UserAgentF”、“UserAgent”))
.Append(mlContext.Transforms.Concatenate(“Features”、“UrlF”、“UserAgentF”))
.Append(mlContext.Transforms.NormalizeMinMax(“Features”、“Features”))
.AppendCacheCheckpoint(mlContext);
var dataPrepModel=datapreppipline.Fit(mlData);
var dataPrepDataView=dataPrepModel.Transform(mlData);
var pipeline=dataPrepPipeline.Append(
mlContext.BinaryClassification.Trainers.AveragedPerceptron(labelColumnName:“IsBot”,迭代次数:10,featureColumnName:“Features”);
mlContext.Model.Save(dataPrepModel,dataPrepDataView.Schema,“./dataprep.zip”);
var模型=pipeline.Fit(mlData);
var modelDataView=model.Transform(mlData);
mlContext.Model.Save(Model,modelDataView.Schema,“./Model.zip”);
var predEngine=mlContext.Model.CreatePredictionEngine(模型);

这是真的,我很确定你的代码是有效的。我需要对数据进行预处理,以保存准备管道和经过训练的模型。通过使用官方文档实现这一点的方法,您可以调用Fit方法两次:我更新了答案,添加了保存数据准备和模型。希望这就是你所需要的:)这是你所能做到的!我不确定这是否会带来不同,因为它仍在使用数据准备管道。但它不会导致异常,至少:)没错;)非常感谢你的帮助。在已经构建的管道上追加是我在这里缺少的