Apakah ada perpustakaan pembelajaran mesin di C #? Saya mencari sesuatu seperti WEKA . Terima kasih.
Apakah ada perpustakaan pembelajaran mesin di C #? Saya mencari sesuatu seperti WEKA . Terima kasih.
Jawaban:
Lihat daftar luar biasa ini di GitHub. Dari kerangka kerja yang terdaftar, Accord.NET adalah sumber terbuka dan paling populer dengan lebih dari 2.000 bintang.
Selain itu, lihat pustaka pembelajaran mesin resmi untuk .NET yang disediakan oleh Microsoft: https://github.com/dotnet/machinelearning
TUA
Ada pustaka jaringan saraf yang disebut AForge.net di codeproject . (Kode dihosting di kode Google ) (Juga periksa beranda AForge - Menurut beranda, versi baru sekarang mendukung algoritme genetika dan pembelajaran mesin juga. Sepertinya itu berkembang pesat sejak terakhir kali saya memainkannya)
Saya tidak tahu itu seperti WEKA karena saya tidak pernah menggunakannya.
(ada juga artikel tentang penggunaannya )
Anda juga dapat menggunakan Weka dengan C # . Solusi terbaik adalah menggunakan IKVM , seperti dalam tutorial ini , meskipun Anda juga dapat menggunakan perangkat lunak penghubung.
Weka dapat digunakan dari C # dengan sangat mudah seperti yang Shane katakan, menggunakan IKVM dan beberapa 'kode lem'. Ikuti tutorial di halaman weka untuk membuat '. Versi Net' dari weka, maka Anda dapat mencoba menjalankan tes berikut:
[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);
}
Tes pertama menunjukkan, bagaimana Anda membuat pengklasifikasi dan mengklasifikasikan Contoh baru dengannya, pengujian kedua menunjukkan, bagaimana Anda dapat menggunakan pengklasifikasi tetap dari file untuk mengklasifikasikan contoh. Jika Anda membutuhkan terlalu banyak dukungan atribut diskrit, beberapa modifikasi akan diperlukan. Kode di atas menggunakan 2 kelas helper:
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);
}
}
Saya telah membuat perpustakaan ML di C # yang dirancang untuk bekerja dengan objek POCO umum.
Ada juga proyek bernama Encog yang memiliki kode C #. Ini dikelola oleh Jeff Heaton, penulis buku "Pengantar Jaringan Syaraf" yang saya beli beberapa waktu lalu. Basis kode Git ada di sini: https://github.com/encog/encog-dotnet-core
Saya mencari pustaka pembelajaran mesin untuk .NET juga dan menemukan Infer.NET dari Microsoft Research di nuget.org/machine-learning :