Czy istnieją biblioteki uczenia maszynowego w języku C#? Mam coś takiego jak WEKA. Dziękuję.biblioteki uczenia maszynowego w języku C#
Odpowiedz
Istnieje biblioteka sieci neuronowych o nazwie AForge.net na codeproject. (Kod hostowane na Google code) (Również wyewidencjonowania AForge homepage - Według głównej, nowa wersja obsługuje algorytmy genetyczne i Uczenia Maszynowego jak dobrze to wygląda to postępuje dużo odkąd ostatnio grał z nim.)
I don Wiem, że to jest coś takiego jak WEKA, ponieważ nigdy tego nie używałem.
(tam również artykuł o to usage)
Nice. Rewizja. –
Nieźle, przynajmniej dla kogoś, kto nie bardzo zna ten temat, tak naprawdę nie jest to dobry wybór. Nie używają klas częściowych do swoich formularzy (utrudnia odczytanie kodu za ich próbkami) i nie mogę znaleźć dla nich przyzwoitej dokumentacji. – RCIX
@RCIX: Zgadzam się, że to nie jest takie proste, naprawdę musisz najpierw zrozumieć sieci neuronowe i matematykę. Z pewnością nie jest przeznaczony do nauczania NN, ale raczej do ich realizacji, gdy wiesz, co robisz. Dokumenty są tutaj - http://www.aforgenet.com/framework/docs/, ale tak, wyglądają nieco skromnie. Osobiście nie korzystałem z niego od kilku lat i wygląda na to, że od tego czasu jest dużo dodawane, więc prawdopodobnie rośnie w złożoności. –
Można również use Weka with C#. Najlepszym rozwiązaniem jest użycie IKVM, as in this tutorial, chociaż można również użyć oprogramowania pomostowego.
O czym mówi "oprogramowanie pomostowe"? które? – lmsasu
Utworzono ML library w języku C#, który jest przeznaczony do pracy z typowymi obiektami POCO.
Weka może być używany z C# bardzo łatwo, jak powiedział Shane, używając IKVM i jakiegoś "kodu kleju". Folow tutorial na weka page stworzyć „wersję .NET” o WEKA, to można spróbować uruchomić następujące testy:
[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);
}
pierwszy test pokazuje, w jaki sposób zbudować klasyfikator i sklasyfikować nowy Przykład z niego, drugi pokazuje, jak można wykorzystać trwały klasyfikator z pliku, aby sklasyfikować przykład. Jeśli potrzebujesz również obsługiwać dyskretne atrybuty, konieczne będą pewne modyfikacje. Powyższy kod używa dwóch klas pomocniczych:
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);
}
}
Istnieje również projekt o nazwie Encog, który ma kod C#. Prowadzi je Jeff Heaton, autor książki "Wprowadzenie do sieci neuronowej", którą kupiłem jakiś czas temu. Kodzie Git jest tutaj: https://github.com/encog/encog-dotnet-core
Szukam bibliotek uczenia maszynowego dla .NET, jak również i znaleźć Infer.NET z Microsoft Research na nuget.org/machine-learning:
nie zgadzam się, że to nie jest konstruktywne pytanie. Wydaje mi się, że bardzo użyteczne jest posiadanie zestawu sugestii biblioteki wybieranych przez użytkowników w porównaniu z automatycznymi wynikami wyszukiwania w wyszukiwarce Google. Nie rozumiem, dlaczego sugestiom bibliotecznym nie mogą towarzyszyć "fakty, referencje i określona wiedza specjalistyczna", jak to opisano w uwagach zamykających. –
@IsmailDegani Czy możesz głosować na ponowne otwarcie? –
KAŻDEGO PRZYGOTOWYWANIE DO PROGRAMÓW: Poniższe odpowiedzi są opatrzone datą, ponieważ pytanie jest zablokowane. Istnieje popularna platforma do uczenia maszynowego C# o nazwie Open Accord.NET, a tutaj jest jej strona internetowa: http://accord-framework.net/ –