在C#机器学习库[关闭](machine learning libraries in C# [clo

2019-09-01 05:52发布

有没有在C#中的任何机器学习库? 我喜欢的东西后很WEKA 。 谢谢。

Answer 1:

看看这真棒名单在GitHub上。 列出的框架,Accord.NET是开源和最流行的超过2000颗星。

此外,检查出官方的机器学习库,由微软提供.NET: https://github.com/dotnet/machinelearning


有一个称为神经网络库AForge.net在CodeProject上。 (代码托管在谷歌代码 )(也检出AForge主页 -根据网页,新版本现在支持遗传算法和机器学习以及它看起来像它的进步了很多,因为我最近一起玩。)

我不知道这是它像任何WEKA,因为我从来没有使用的。

(有也是在它的一篇文章使用 )



Answer 2:

您也可以使用Weka的使用C# 。 最好的解决办法是使用IKVM,在本教程中 ,虽然你也可以使用桥接软件。



Answer 3:

WEKA可以从C#非常容易地作为沙恩所述,使用IKVM和一些“胶水代码”一起使用。 便接踵而来的教程秧鸡页面创建WEKA的“.NET版本”,那么你可以尝试运行以下测试:

[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);
}

首先测试表明,你如何建立一个分类,并用它分类了新的实例,第二个显示,你如何使用一个持久分类从文件的例子分类。 如果您需要太多支持独立的属性,一些修改将是necessery。 上面的代码使用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);
    }
}


Answer 4:

我已经创建了一个ML库在设计与普通POCO对象工作C#。



Answer 5:

还有一个叫Encog项目,有C#代码。 它是由杰夫·希顿,一个“介绍神经网络”的书我买了前一阵子笔者维持。 该代码库的Git是在这里: https://github.com/encog/encog-dotnet-core



Answer 6:

我在寻找的.NET以及机器学习库,发现Infer.NET从微软研究nuget.org/machine-learning :

  • Infer.NET


文章来源: machine learning libraries in C# [closed]