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