Категориальные значения высокой мощности в ML.NET 0.11 для модели многоклассовой классификации

#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 /…