我在尝试学习 ML.NET/进入机器学习领域,但遇到一个问题卡住了。
我的目标是创建一个训练模型,用于根据输入预测城市。
这段代码:
var dataPath = "cities.csv";var mlContext = new MLContext();var loader = mlContext.Data.CreateTextLoader<CityData>(hasHeader: false, separatorChar: ',');var data = loader.Load(dataPath);string featuresColumnName = "Features";var pipeline = mlContext.Transforms.Concatenate(featuresColumnName, "PostalCode", "CityName") .Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, clustersCount: 3));var model = pipeline.Fit(data);
这段代码应该接受一个 CSV 文件作为输入(该文件包含城市列表,列0为邮政编码,列1为城市名称),然后将这些特征添加到管道中,但出现了以下错误:
Unhandled Exception: System.ArgumentOutOfRangeException: Schema mismatch for feature column 'Features': expected Vector<R4>, got Vector<Text>
错误发生在 “Fit” 函数上。
我在 GitHub 仓库中做了一些研究,但似乎找不到解决方案。我是基于 Iris 示例(https://learn.microsoft.com/en-us/dotnet/machine-learning/tutorials/iris-clustering)进行修改的。
有什么想法吗?
回答:
使用 FeaturizeText 将字符串特征转换为浮点数组特征
var pipeline = mlContext.Transforms .Text.FeaturizeText("PostalCodeF", "PostalCode") .Append(mlContext.Transforms.Text.FeaturizeText("CityNameF", "CityName")) .Append(mlContext.Transforms.Concatenate(featuresColumnName, "PostalCodeF", "CityNameF")) .Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, clustersCount: 3));var model = pipeline.Fit(data);