Регрессионный анализ в Accord.NET

В настоящее время я работаю над своим проектом в школе, и у меня есть немного необычное задание. Моя работа состоит в том, чтобы очистить данные с определенной страницы на facebook, поместить их в модель обучения, где он должен иметь 1 вход как список и выход как Int32.

Во-первых, позвольте мне кратко объяснить алгоритмы, которые я уже разработал:

  1. Соскоблил данные
  2. остановил это
  3. Удалены заглавные буквы, знаки препинания, смайлики и пробелы.
  4. Объединенные слова с одним корнем
  5. Подсчитано появление слов и присвоено значение счетчика каждому слову
  6. Выполнен расчет tf-idf для извлечения веса каждого слова в каждом сообщении Теперь у меня есть Dictionary<String,List<double[],int>>, который представляет

postId:[wordWeights],amountOfLikes as

23425234_35242352:[0.027,0.031,0.009,0.01233],89

Я должен тренировать свою модель с разными постами и лайками. Для этой цели мы решили использовать библиотеку Accord.NET на C# и до сих пор анализировали свой класс простой линейной регрессии.

Во-первых, я увидел, что могу использовать OrdinaryLeastSqure и передавать ему возможные входы и выходы как

double[] input = {0.123,0.23,0.09}
double[] output = {98,0,0}
OrdinaryLeastSquares ols = new OrdinaryLeastSquares();
regression = ols.Learn(inputs, output);

Как видите, количество входов в массиве должно совпадать с количеством выходов, поэтому я заполнил его нулями. В результате я получил явно неверный вывод. Я не могу придумать правильный способ передачи моих данных в Linear Regression Class. Я знаю, что подход с заполнением массива нулями неверен, но пока это единственное решение, которое я придумал. Я был бы признателен, если бы кто-нибудь сказал мне, как я должен использовать регрессию в этом случае, и помог бы выбрать правильный алгоритм. Ваше здоровье!


person Coke    schedule 12.04.2018    source источник


Ответы (1)


Просмотрев различные алгоритмы регрессии в Accord.NET, я придумал FanChenLinSupportVectorRegression, который был частью библиотеки Accord.NET Machine Learning. Я считаю, что Фань Чен Линь был одним из основных авторов этого алгоритма, поскольку он был назван в его честь.

Алгоритм использует концепцию регрессии опорных векторов (SVM).

FanChenLinSupportVectorRegression<TKernel>, где Kernel получает или задает использование функции ядра для создания машины опорных векторов ядра. Если это свойство установлено, UseKernelEstimation будет иметь значение false.

Функция регрессии принимает первый вход в виде массива, состоящего из массивов двойников (в нашем случае весов слов в определенном посте), а второй массив двойников, состоящий из количества лайков.

ВАЖНО: подмассив весов ДОЛЖЕН соответствовать количеству отметок «Нравится» во втором входе таким образом, что first sub-array имеет свою аналогичную сумму под индексом [0] в массиве likes, а second sub-array должна иметь свою аналогичную. сумма под индексом [1] в массиве likes и т. д.

Пример:

//Suppose those are posts with tf-idf weights
double[][] inputs =
{
  new[] { 3.0, 1.0 },
  new[] { 7.0, 1.0 },
  new[] { 3.0, 1.0 },
  new[] { 3.0, 2.0 },
  new[] { 6.0, 1.0 },
};
//amount of likes each corresponding post scored
double[] outputs = {2.0, 3.0, 4.0, 11.0, 6.0};
//Using FanChenLinSupportVectorRegression<Kernel>
var model = new FanChenLinSupportVectorRegression<Gaussian>();
//Train model and feed it with tf-idf of each post and corresponding like amount
var svm = model.Learn(inputs, outputs);
//Run a sample tf-idf input to get a prediction
double result = svm.Score(new double[] { 2.0,6.0});

Я протестировал эту модель с поменявшимися местами входными данными того же значения, и результаты были довольно хорошими и точными. Модель хорошо работает и на больших входных данных, однако требует дополнительной подготовки. Надеюсь, это поможет кому-нибудь в будущем.

person Coke    schedule 12.04.2018