Есть ли в С# библиотеки для машинного обучения? Я за чем-то вроде WEKA. Спасибо.
Машинные учебные библиотеки в С#
Ответ 1
Там есть библиотека нейронной сети, называемая AForge.net в кодепроекте. (Код размещен в код Google) (Также проверьте домашнюю страницу AForge - Согласно домашней странице, новая версия теперь поддерживает генетические алгоритмы и машинное обучение. Похоже, что это сильно продвигалось с тех пор, как я играл в последний раз)
Я не знаю, что это похоже на WEKA, поскольку я никогда не использовал это.
(также есть статья об этом использование)
Ответ 2
Weka можно использовать с С# очень легко, как сказал Шейн, используя IKVM и некоторый "код клея". На странице weka page создайте ".Net версию" weka, затем вы можете попробовать выполнить следующие тесты:
[Fact]
public void BuildAndClassify()
{
  var classifier = BuildClassifier();
  AssertCanClassify(classifier);
}
[Fact]
public void DeserializeAndClassify()
{
  BuildClassifier().Serialize("test.weka");
  var classifier = Classifier.Deserialize<LinearRegression>("test.weka");
  AssertCanClassify(classifier);
}
private static void AssertCanClassify(LinearRegression classifier)
{
  var result = classifier.Classify(-402, -1);
  Assert.InRange(result, 255.8d, 255.9d);
}
private static LinearRegression BuildClassifier()
{
  var trainingSet = new TrainingSet("attribute1", "attribute2", "class")
    .AddExample(-173, 3, -31)
    .AddExample(-901, 1, 807)
    .AddExample(-901, 1, 807)
    .AddExample(-94, -2, -86);
  return Classifier.Build<LinearRegression>(trainingSet);
}
Первый тест показывает, как вы строите классификатор и классифицируете новый пример с ним, второй показывает, как вы можете использовать постоянный классификатор из файла для классификации примера. Если вам нужна поддержка дискретных атрибутов, некоторые изменения потребуются. В приведенном выше коде используются 2 вспомогательных класса:
public class TrainingSet
{
    private readonly List<string> _attributes = new List<string>();
    private readonly List<List<object>> _examples = new List<List<object>>();
    public TrainingSet(params string[] attributes)
    {
      _attributes.AddRange(attributes);
    }
    public int AttributesCount
    {
      get { return _attributes.Count; }
    }
    public int ExamplesCount
    {
      get { return _examples.Count; }
    }
    public TrainingSet AddExample(params object[] example)
    {
      if (example.Length != _attributes.Count)
      {
        throw new InvalidOperationException(
          String.Format("Invalid number of elements in example. Should be {0}, was {1}.", _attributes.Count,
            _examples.Count));
      }
      _examples.Add(new List<object>(example));
      return this;
    }
    public static implicit operator Instances(TrainingSet trainingSet)
    {
      var attributes = trainingSet._attributes.Select(x => new Attribute(x)).ToArray();
      var featureVector = new FastVector(trainingSet.AttributesCount);
      foreach (var attribute in attributes)
      {
        featureVector.addElement(attribute);
      }
      var instances = new Instances("Rel", featureVector, trainingSet.ExamplesCount);
      instances.setClassIndex(trainingSet.AttributesCount - 1);
      foreach (var example in trainingSet._examples)
      {
        var instance = new Instance(trainingSet.AttributesCount);
        for (var i = 0; i < example.Count; i++)
        {
          instance.setValue(attributes[i], Convert.ToDouble(example[i]));
        }
        instances.add(instance);
      }
      return instances;
    }
}
public static class Classifier
{
    public static TClassifier Build<TClassifier>(TrainingSet trainingSet)
      where TClassifier : weka.classifiers.Classifier, new()
    {
      var classifier = new TClassifier();
      classifier.buildClassifier(trainingSet);
      return classifier;
    }
    public static TClassifier Deserialize<TClassifier>(string filename)
    {
      return (TClassifier)SerializationHelper.read(filename);
    }
    public static void Serialize(this weka.classifiers.Classifier classifier, string filename)
    {
      SerializationHelper.write(filename, classifier);
    }
    public static double Classify(this weka.classifiers.Classifier classifier, params object[] example)
    {
      // instance lenght + 1, because class variable is not included in example
      var instance = new Instance(example.Length + 1);
      for (int i = 0; i < example.Length; i++)
      {
        instance.setValue(i, Convert.ToDouble(example[i]));
      }
      return classifier.classifyInstance(instance);
    }
}
		Ответ 3
Вы также можете использовать Weka с С#. Лучшим решением является использование IKVM, как в этом уроке, хотя вы также можете использовать мостовое программное обеспечение.
Ответ 4
Я создал библиотеку ML > на С#, предназначенную для работы с общими объектами POCO.
Ответ 5
Также существует проект под названием Encog, который имеет код С#. Это поддержал Джефф Хитон, автор книги "Введение в нейронную сеть", которую я купил некоторое время назад. Кодовая база Git находится здесь: https://github.com/encog/encog-dotnet-core
Ответ 6
Я ищу библиотеки для машинного обучения для .NET, а также нашел Infer.NET из Microsoft Research на nuget.org/машина обучения: