문제

C#에 머신 러닝 라이브러리가 있습니까? 나는 같은 것을 뒤 따른다 Weka. 고맙습니다.

도움이 되었습니까?

해결책

체크 아웃 이 멋진 목록 Github에서. 나열된 프레임 워크 중 Accord.net은 오픈 소스이며 2,000 개가 넘는 별에서 가장 인기가 있습니다.

또한 Microsoft에서 제공 한 .NET 용 공식 머신 러닝 라이브러리를 확인하십시오. https://github.com/dotnet/machinelearning


낡은

신경 네트워크 라이브러리가 있습니다 aforge.net CodeProject에서. (코드가 호스팅되었습니다 Google 코드) (체크 아웃 홈페이지 - 홈페이지에 따르면, 새 버전은 이제 유전자 알고리즘과 기계 학습도 지원합니다. 내가 마지막으로 연주 한 이후로 많이 진행된 것 같습니다)

나는 그것이 내가 그것을 사용한 적이 없기 때문에 그것이 Weka와 같은 것이라는 것을 모른다.

(그것에 관한 기사도 있습니다 용법)

다른 팁

당신은 또한 수 C#과 함께 Weka를 사용하십시오.. 가장 좋은 솔루션은 사용하는 것입니다 IKVM, 이 튜토리얼에서와 같이, 브리징 소프트웨어를 사용할 수도 있지만.

Weka는 IKVM 및 일부 '접착제 코드'를 사용하여 Shane이 언급 한대로 C#에서 매우 쉽게 사용할 수 있습니다. 튜토리얼 on Weka 페이지 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);
}

첫 번째 테스트는 분류기를 구축하고 새로운 예제를 분류하는 방법을 보여줍니다. 두 번째 테스트는 파일에서 지속 된 분류기를 사용하여 예제를 분류하는 방법을 보여줍니다. 이산 속성을 너무 지원 해야하는 경우 일부 수정은 필수입니다. 위의 코드는 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);
    }
}

나는 an을 만들었다 ML 라이브러리 C#에서는 공통 Poco 객체와 함께 작동하도록 설계되었습니다.

C# 코드가있는 Encog라는 프로젝트도 있습니다. 그것은 내가 구입 한 "신경망에 대한 소개"책의 저자 인 Jeff Heaton이 유지하고 있습니다. 코드베이스 git은 여기에 있습니다. https://github.com/encog/encog-dotnet-core

.NET 용 머신 러닝 라이브러리를 찾고 있으며 Microsoft Research에서 Found Found Found Found Found Found Found Found Found Found Found Found nuget.org/machine-learning:

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top