当前位置:  开发笔记 > 编程语言 > 正文

C#中的机器学习库

如何解决《C#中的机器学习库》经验,为你挑选了4个好方法。

C#中是否有任何机器学习库?我喜欢像WEKA这样的东西.谢谢.



1> Simon P Stev..:

在GitHub上查看这个很棒的列表.在列出的框架中,Accord.NET是开源的,最受欢迎的是2000多颗星.

另外,请查看Microsoft提供的.NET官方机器学习库:https://github.com/dotnet/machinelearning


代码项目中有一个名为AForge.net的神经网络库.(代码托管在谷歌代码)(另外检查AForge主页 - 根据主页,新版本现在支持遗传算法和机器学习.看起来它自从我上次玩它以来取得了很大进展)

我不知道它是什么类似于WEKA,因为我从未使用过它.

(还有一篇关于它用法的文章)



2> Shane..:

您也可以将Weka与C#一起使用.最好的解决方案是使用IKVM,如本教程中所述,尽管您也可以使用桥接软件.



3> Gregor Slave..:

正如Shane所说,Weka可以很容易地从C#中使用,使用IKVM和一些"胶水代码".在weka页面上的教程创建weka的'.Net版本',然后你可以尝试运行以下测试:

[Fact]
public void BuildAndClassify()
{
  var classifier = BuildClassifier();
  AssertCanClassify(classifier);
}

[Fact]
public void DeserializeAndClassify()
{
  BuildClassifier().Serialize("test.weka");
  var classifier = Classifier.Deserialize("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(trainingSet);
}

第一个测试显示,如何构建分类器并使用它对新示例进行分类,第二个测试显示,如何使用文件中的持久分类器对示例进行分类.如果您需要支持离散属性,则必须进行一些修改.上面的代码使用了2个辅助类:

public class TrainingSet
{
    private readonly List _attributes = new List();
    private readonly List> _examples = new List>();

    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(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(TrainingSet trainingSet)
      where TClassifier : weka.classifiers.Classifier, new()
    {
      var classifier = new TClassifier();
      classifier.buildClassifier(trainingSet);
      return classifier;
    }

    public static TClassifier Deserialize(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);
    }
}



4> Seth Juarez..:

我在C#中创建了一个ML库,用于处理常见的POCO对象.

推荐阅读
保佑欣疼你的芯疼
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有