【问题标题】:Clustering on categorical data in ml.net在 ml.net 中对分类数据进行聚类
【发布时间】:2019-07-18 05:30:51
【问题描述】:

我正在为 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
    {
    }
}

【问题讨论】:

    标签: c# machine-learning ml.net


    【解决方案1】:

    如果您将 onehotencoding 和您的培训师合并为一个,我怀疑您会看到一些问题,因为您划分管道的方式并将您的实际训练基于从转换中产生的 IDataView 而不是管道的一部分管道,您可以简化代码:

     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);
    

    它应该毫无例外地工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-07-20
      • 2016-04-04
      • 1970-01-01
      • 2016-07-14
      • 2018-01-12
      • 2013-08-10
      • 2020-11-17
      • 2018-12-26
      相关资源
      最近更新 更多