ML.NET是否不支持Guid类型DataFrameColumns?训练时抛出异常
ML.NET Guid类型列支持问题解答
结论
ML.NET不支持直接将Guid类型作为训练数据列,这就是你训练FastTree回归模型时抛出System.NotSupportedException: 'Type is Guid'异常的原因。目前ML.NET的算法及数据处理组件仅支持有限的原生数据类型,Guid不在支持范围内。
解决办法
要处理这类Guid类型的分类列,需要先把它转换成ML.NET支持的类型,推荐两种实用方案:
1. 转字符串类型
把Guid转换成字符串,ML.NET的OneHotEncoding组件可以正常处理字符串类型的分类列:
// 将Guid列转为字符串列 var stringCategoryColumn = new PrimitiveDataFrameColumn<string>("CategoryId_String", dataFrame.Columns["CategoryId"].Cast<Guid>().Select(g => g.ToString())); dataFrame.Columns.Remove("CategoryId"); dataFrame.Columns.Add(stringCategoryColumn);
2. 转整数类型
如果你的Guid取值数量不多,可以给每个唯一Guid分配一个整数ID,这种方式训练效率更高:
// 提取唯一Guid并建立映射关系 var uniqueGuids = dataFrame.Columns["CategoryId"].Cast<Guid>().Distinct().ToList(); var intCategoryColumn = new PrimitiveDataFrameColumn<int>("CategoryId_Int", dataFrame.Columns["CategoryId"].Cast<Guid>().Select(g => uniqueGuids.IndexOf(g))); dataFrame.Columns.Remove("CategoryId"); dataFrame.Columns.Add(intCategoryColumn);
后续步骤
完成类型转换后,就可以正常用OneHotEncoding处理该列,再传入FastTree回归模型进行训练了。
内容的提问来源于stack exchange,提问作者Valuator
相关产品推荐
相关产品推荐

