#ml.net
#ml.net
Вопрос:
Для ML.NET 0.11, у атрибута MLContext.Transforms.Categorical
, похоже, есть только OneHotEncoding
и OneHotHashEncoding
в качестве опций для преобразования категориальных значений в функции. У меня есть несколько столбцов данных с высокой мощностью, которые, возможно, было бы лучше использовать вместо числового представления. Есть ли у нас такие опции в ML.NET или мне нужно сначала предварительно обработать данные извне?
Ответ №1:
Вы можете преобразовать их в KeyType вместо числовых значений.
var rnd = new Random();
var enumerable = Enumerable.Range(1, 1000)
.Select(n => new Row { Email = "sadas" rnd.Next(1, 41) "@so.com"
Label = rnd.Next(1, 6).ToString() });
var context = new MLContext();
var data = context.Data.LoadFromEnumerable(enumerable);
var pipeline = context.Transforms.Conversion.MapValueToKey(nameof(Row.Email));
var preview = pipeline.Fit(data).Transform(data).Preview(10);
Примерный результат:
| Email | Email | Label |
|----------------|-------|-------|
| sadas25@so.com | 39 | 3 |
| sadas7@so.com | 1 | 4 |
| sadas13@so.com | 10 | 1 |
| sadas27@so.com | 33 | 4 |
| sadas5@so.com | 19 | 4 |
| sadas31@so.com | 4 | 2 |
| sadas2@so.com | 38 | 4 |
| sadas22@so.com | 25 | 2 |
| sadas37@so.com | 36 | 5 |
| sadas32@so.com | 26 | 2 |
Комментарии:
1. Еще один последующий вопрос: если бы мы изменили его на KeyType , означает ли это, что он не будет вычисляться как часть преобразования конкатенации, верно? Было бы это лучше или хуже (или зависит) по сравнению с просто большим одноразовым кодированием?
2. Вы можете объединить их с другими функциями. Один горячий должен быть лучше, когда многие строки имеют одинаковое значение. ПРОВЕРЬТЕ свои данные, возможно, вы сможете кластеризировать свои значения для уменьшения мощности.
3. Когда я попытался сделать
mlContext.Transforms.Concatenate("Features",...,"MapValueToKeyFeature",...")
, я получил ошибку приpipeline.Fit(data)
указанииSystem.InvalidOperationException: 'Column 'MapValueToKeyFeature' is key.Concatenation of keys is unsupported.'
. Я пропустил шаг, чтобы иметь возможность объединить эту функцию с остальными?4. Вы совершенно правы. Виноват! Я вывел из этого примера: github.com/dotnet/machinelearning-samples/tree/master/samples /… но конкатенации нет. Я думаю, вы можете снова преобразовать его ключ в вектор. Я жду ваших результатов.
5. И, возможно, вы можете использовать PCA. github.com/dotnet/machinelearning-samples/tree/master/samples /…