C机器学习库#
回答
在codeproject上有一个名为AForge.net的神经网络库。 (代码托管在Google code)(也检出AForge homepage - 根据该网页,新版本现在支持遗传算法和机器学习以及它看起来像它的进步了很多,因为我最近一起玩。)
我不我不知道它就像WEKA一样,从来没有用过。
(有也是一篇关于它的usage)
好的。 Upvoted。 – 2009-10-26 10:38:53
不错,尽管至少对于不太熟悉这个主题的人来说,这真的不是一个好的选择。他们不使用部分类的形式(使得难以阅读其样本背后的代码),并且我找不到适当的文档。 – RCIX 2009-10-26 10:58:36
@RCIX:我同意这并不简单,你首先需要了解神经网络及其背后的数学知识。这当然不是为了教导NN而设计的,而是当你知道你在做什么时实施它们。文档在这里 - http://www.aforgenet.com/framework/docs/,但是,他们看起来有点稀疏。就我个人而言,我已经有好几年没有使用过它了,看起来它自那以后增加了很多,所以它可能会变得越来越复杂。 – 2009-10-26 11:10:27
您也可以use Weka with C#。最好的解决方案是使用IKVM, as in this tutorial,但您也可以使用桥接软件。
你在谈论什么“桥接软件”?哪个? – lmsasu 2010-02-16 15:57:58
我在C#中创建了一个ML library,它被设计用于处理常见的POCO对象。
Weka可以很容易地从C#中使用,就像Shane所说的那样,使用IKVM和一些“胶水代码”。便接踵而来上weka page教程创建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);
}
}
还有一个名为Encog的项目,它具有C#代码。它由Jeff Heaton维护,他是我刚刚购买的“神经网络入门”一书的作者。该代码库的Git是在这里:https://github.com/encog/encog-dotnet-core
我在寻找的.NET机器学习库,以及发现Infer.NET从微软研究nuget.org/machine-learning:
- 1. 机器学习库OpenCV 2.1
- 2. 机器学习在Python:scikit学习/ Pybrain
- 3. 机器学习分类器AdaBoost for C#
- 4. 机器学习,Python
- 5. 使用Apache Mahout机器学习库
- 6. 适用于Android的机器学习库
- 7. 哪台机器学习库使用
- 8. 最快的通用机器学习库?
- 9. 机器学习形状和类型的机器学习
- 10. 机器学习 - 感知器
- 11. Python机器学习警告
- 12. 机器学习图像
- 13. Bot中的机器学习
- 14. 基本机器学习
- 15. 机器学习:移动Treshhold
- 16. 机器学习系统
- 17. 机器学习,决策树
- 18. Accord机器学习knn.decide indexOutOfRangeException
- 19. GATE中的机器学习
- 20. 机器学习算法
- 21. 大型机器学习
- 22. C++强化学习库
- 23. 机器学习的挑战:在Java/Groovy中(数据挖掘,机器学习)
- 24. 如何分辨机器学习模型的学习型
- 25. 什么是机器学习中的学习曲线?
- 26. python中的机器学习外部数据集学习
- 27. 如何在Azure机器学习上应用学习曲线
- 28. 用于学习字符串模式的机器学习技术
- 29. 关于机器学习,统计学习算法
- 30. 什么是学习机器学习的最佳编程语言?
我不同意这不是一个建设性的问题。我认为对谷歌搜索的自动化结果提供一套用户策划库建议是非常有用的。我不明白为什么图书馆的建议不能像近期报告中所述的“事实,参考资料和具体专业知识”。 – 2013-05-14 16:34:36
@IsmailDegani你可以投票重新开放吗? – 2018-02-24 04:35:40
任何人都在寻找框架:下面的答案是过时的,因为问题被锁定。有一个流行的开源C#机器学习框架,名为Accord.NET,这里是它的网页:http://accord-framework.net/ – 2018-02-24 04:36:55