ml.net 中的分类数据聚类
Clustering on categorical data in ml.net
我正在为 ML.NET 中的分类数据聚类而苦苦挣扎。
var predictor = mlContext.Model.CreatePredictionEngine(model) 行失败并出现异常 "System.InvalidOperationException: 'Incompatible features column type: 'Vector' vs 'Vector''"
我对 ml 很陌生,有人可以帮忙吗?
谢谢!
class Program
{
static void Main(string[] args)
{
var mlContext = new MLContext();
var samples = new[]
{
new DataPoint {Education = "0-5yrs", ZipCode = "98005"},
new DataPoint {Education = "0-5yrs", ZipCode = "98052"},
new DataPoint {Education = "6-11yrs", ZipCode = "98005"},
new DataPoint {Education = "6-11yrs", ZipCode = "98052"},
new DataPoint {Education = "11-15yrs", ZipCode = "98005"}
};
IDataView data = mlContext.Data.LoadFromEnumerable(samples);
var multiColumnKeyPipeline =
mlContext.Transforms.Categorical.OneHotEncoding(
new[]
{
new InputOutputColumnPair("Education"),
new InputOutputColumnPair("ZipCode")
});
IDataView transformedData =
multiColumnKeyPipeline.Fit(data).Transform(data);
string featuresColumnName = "Features";
var pipeline = mlContext.Transforms
.Concatenate(featuresColumnName, "Education", "ZipCode")
.Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 2));
var model = pipeline.Fit(transformedData);
var predictor = mlContext.Model.CreatePredictionEngine<TransformedData, ClusterPredictionItem>(model);
}
private class DataPoint
{
public string Education { get; set; }
public string ZipCode { get; set; }
}
private class TransformedData
{
public float Education { get; set; }
public float ZipCode { get; set; }
}
internal class ClusterPredictionItem
{
}
}
我怀疑你看到了一些问题,因为你已经划分了你的管道并将你的实际训练基于来自转换的 IDataView 而不是管道的一部分,如果你合并你的 onehotencoding 和你的培训师在一个管道中,您可以简化代码:
IDataView data = mlContext.Data.LoadFromEnumerable(samples);
string featuresColumnName = "Features";
var pipeline = mlContext.Transforms.Categorical.OneHotEncoding(
new[]
{
new InputOutputColumnPair("Education"),
new InputOutputColumnPair("ZipCode")
}).Append(mlContext.Transforms.Concatenate("Features", "Education", "ZipCode"))
.Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 2));
var model = pipeline.Fit(data);
var predictor = mlContext.Model.CreatePredictionEngine<DataPoint, ClusterPredictionItem>(model);
它应该无一例外地工作。
我正在为 ML.NET 中的分类数据聚类而苦苦挣扎。
var predictor = mlContext.Model.CreatePredictionEngine(model) 行失败并出现异常 "System.InvalidOperationException: 'Incompatible features column type: 'Vector' vs 'Vector''"
我对 ml 很陌生,有人可以帮忙吗?
谢谢!
class Program
{
static void Main(string[] args)
{
var mlContext = new MLContext();
var samples = new[]
{
new DataPoint {Education = "0-5yrs", ZipCode = "98005"},
new DataPoint {Education = "0-5yrs", ZipCode = "98052"},
new DataPoint {Education = "6-11yrs", ZipCode = "98005"},
new DataPoint {Education = "6-11yrs", ZipCode = "98052"},
new DataPoint {Education = "11-15yrs", ZipCode = "98005"}
};
IDataView data = mlContext.Data.LoadFromEnumerable(samples);
var multiColumnKeyPipeline =
mlContext.Transforms.Categorical.OneHotEncoding(
new[]
{
new InputOutputColumnPair("Education"),
new InputOutputColumnPair("ZipCode")
});
IDataView transformedData =
multiColumnKeyPipeline.Fit(data).Transform(data);
string featuresColumnName = "Features";
var pipeline = mlContext.Transforms
.Concatenate(featuresColumnName, "Education", "ZipCode")
.Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 2));
var model = pipeline.Fit(transformedData);
var predictor = mlContext.Model.CreatePredictionEngine<TransformedData, ClusterPredictionItem>(model);
}
private class DataPoint
{
public string Education { get; set; }
public string ZipCode { get; set; }
}
private class TransformedData
{
public float Education { get; set; }
public float ZipCode { get; set; }
}
internal class ClusterPredictionItem
{
}
}
我怀疑你看到了一些问题,因为你已经划分了你的管道并将你的实际训练基于来自转换的 IDataView 而不是管道的一部分,如果你合并你的 onehotencoding 和你的培训师在一个管道中,您可以简化代码:
IDataView data = mlContext.Data.LoadFromEnumerable(samples);
string featuresColumnName = "Features";
var pipeline = mlContext.Transforms.Categorical.OneHotEncoding(
new[]
{
new InputOutputColumnPair("Education"),
new InputOutputColumnPair("ZipCode")
}).Append(mlContext.Transforms.Concatenate("Features", "Education", "ZipCode"))
.Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 2));
var model = pipeline.Fit(data);
var predictor = mlContext.Model.CreatePredictionEngine<DataPoint, ClusterPredictionItem>(model);
它应该无一例外地工作。