Я пытаюсь использовать библиотеку Accord.net для создания метода тестирования нескольких алгоритмов машинного обучения, поддерживаемых библиотекой. .
Одна из проблем, с которыми я столкнулся, заключается в том, что когда я пытаюсь кодифицировать свои строковые данные, класс кодификации, похоже, не способен работать с какими-либо столбцами данных, которые не являются строками, несмотря на то, что в документации говорится об обратном.
Codification codebook = new Codification(fulldata, AllAttributeNames);
Я называю эту строку, где fulldata является datatable, и я попытался включить столбцы как типа Int32, так и типа Double, и класс Codification выдал ошибку, говоря, что он не может преобразовать их в тип String.
«System.InvalidCastException:« Невозможно преобразовать объект типа« System.Double »в тип« System.String »».
РЕДАКТИРОВАТЬ: Оказывается, эта ошибка связана с тем, что система кодирования может обрабатывать альтернативные типы данных только в том случае, если она кодирует всю таблицу. Я полагаю, что вижу здесь логику, хотя я бы предпочел лучшую ошибку или чтобы метод был немного умнее.
Теперь у меня возникла другая проблема, связанная с этим. После изменения моего кода на это:
Codification codebook = new Codification(fulldata);
Затем я учусь. Изучай (вводы, выводы) мой алгоритм и хочу использовать только что обученный алгоритм. Таким образом, следующим шагом будет взять набор тестовых данных, убедиться, что они соответствуют кодировке кодовых книг, и отправить их через алгоритм. К сожалению, когда я пытаюсь использовать
int[][] testinput = codebook.Transform(testData, inputColumnNameArray);
Он взрывается, утверждая, что не может найти сопоставление для преобразования. Это делается со ссылкой на столбец Integer, который кодовая книга правильно не сопоставила с новыми значениями. Итак, теперь кажется, что этот метод Transform не может обрабатывать столбцы, не являющиеся строками, и я не нашел его перегруженного варианта, хотя документация указывает, что это должно быть в состоянии справиться с этим.
Кто-нибудь знает, как обойти эту проблему, не создавая вручную весь массив int[][] testinput по одному значению за раз?