Có thư viện máy học nào trong C # không? Tôi đang theo đuổi thứ gì đó như WEKA . Cảm ơn bạn.
Có thư viện máy học nào trong C # không? Tôi đang theo đuổi thứ gì đó như WEKA . Cảm ơn bạn.
Câu trả lời:
Kiểm tra danh sách tuyệt vời này trên GitHub. Trong số các khung được liệt kê, Accord.NET là mã nguồn mở và phổ biến nhất với hơn 2.000 sao.
Ngoài ra, hãy kiểm tra thư viện máy học chính thức cho .NET do Microsoft cung cấp: https://github.com/dotnet/machinelearning
CŨ
Có một thư viện mạng thần kinh được gọi là AForge.net trên bảng mã. (Mã được lưu trữ tại mã Google ) (Đồng thời kiểm tra trang chủ của AForge - Theo trang chủ, phiên bản mới hiện hỗ trợ thuật toán di truyền và học máy. Có vẻ như nó đã tiến bộ rất nhiều kể từ lần cuối tôi chơi với nó)
Tôi không biết đó là bất cứ thứ gì giống như WEKA vì tôi chưa bao giờ sử dụng nó.
(cũng có một bài viết về việc sử dụng nó )
Bạn cũng có thể sử dụng Weka với C # . Giải pháp tốt nhất là sử dụng IKVM , như trong hướng dẫn này , mặc dù bạn cũng có thể sử dụng phần mềm bắc cầu.
Weka có thể được sử dụng từ C # rất dễ dàng như Shane đã nêu, sử dụng IKVM và một số 'mã keo'. Theo hướng dẫn trên trang weka để tạo 'phiên bản .Net' của weka, sau đó bạn có thể thử chạy các thử nghiệm sau:
[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);
}
Thử nghiệm đầu tiên cho thấy, cách bạn xây dựng một trình phân loại và phân loại một Ví dụ mới với nó, lần thứ hai cho thấy, làm thế nào bạn có thể sử dụng một trình phân loại bền vững từ một tệp để phân loại một ví dụ. Nếu bạn cần quá hỗ trợ các thuộc tính rời rạc, một số sửa đổi sẽ là cần thiết. Đoạn mã trên sử dụng 2 lớp trình trợ giúp:
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);
}
}
Tôi đã tạo một thư viện ML trong C # được thiết kế để hoạt động với các đối tượng POCO phổ biến.
Ngoài ra còn có một dự án gọi là Encog có mã C #. Nó được duy trì bởi Jeff Heaton, tác giả của cuốn sách "Giới thiệu về mạng thần kinh" mà tôi đã mua cách đây một thời gian. Cơ sở mã hóa Git có tại đây: https://github.com/encog/encog-dotnet-core
Tôi cũng đang tìm kiếm các thư viện máy học cho .NET và tìm thấy Infer.NET từ Microsoft Research trên nuget.org/machine-learning :