C#には機械学習ライブラリはありますか?私はWEKAのようなものの後です。 ありがとうございます。C#の機械学習ライブラリ
答えて
codeprojectにAForge.netというニューラルネットワークライブラリがあります。 (コードがGoogle codeでホスト)(またAForge homepageをチェックアウト - 。ホームページによると、新バージョンでは、今だけでなく、遺伝的アルゴリズムと機械学習をサポートし、私は最後のそれと遊んだので、それは多くのことを進んだように見えます)
Iドン私がそれを使ったことがないのでWEKAのようなものだと分かっています。
いいです。 Upvoted。 –
少なくとも、トピックに精通していない人にとっては、それは本当に良い選択ではありません。フォームの部分クラスを使用しない(サンプルの背後にあるコードを読むのが難しくなる)、それについてはまともなドキュメントが見つからない。 – RCIX
@RCIX:それはまったくシンプルではないことに同意します。まず、ニューラルネットワークとそれらの背後にある数学を理解する必要があります。確かにNNを教えるのではなく、あなたが何をしているのかを知っているときにNNを実装するように設計されています。ドキュメントはここにあります - http://www.aforgenet.com/framework/docs/しかし、はい、彼らは少し疎そうです。個人的には、私は数年間それを使用していないし、それはそれ以来、多く追加されたように見えるので、おそらく複雑になりました。 –
することもできますuse Weka with C#
は、(それがusageだ上でも記事があります)。最適な解決方法はIKVM, as in this tutorialですが、ブリッジソフトウェアを使用することもできます。
「ブリッジソフトウェア」とは何ですか?どれ? – lmsasu
共通のPOCOオブジェクトで動作するように設計されたC#でML libraryを作成しました。
Weaneは、Shaneが述べているように、IKVMといくつかの 'glue code'を使ってC#から非常に簡単に使用できます。 WEKAの「.NETバージョン」を作成するために、weka page上のチュートリアルをFolow、あなたは以下のテストを実行しようとすることができます:あなたが分類器を構築し、それを新しい例を分類する方法、
[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つ目は、ファイルから永続化された分類子を使って例を分類する方法です。あまりにも個別の属性をサポートする必要がある場合は、いくつかの変更が必要になります。上記のコードでは、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);
}
}
また、C#コードを持つEncogというプロジェクトもあります。これは、以前買った「ニューラルネットワークの紹介」の著者Jeff Heatonによって維持されています。コードベースGitはここにある:https://github.com/encog/encog-dotnet-core
私も、.NETのための機械学習ライブラリを検索し、nuget.org/machine-learningにMicrosoft ResearchからInfer.NETを見つけましたよ:
- 1. 機械学習のJavaライブラリ
- 2. クラスタリングのためのC/C++機械学習ライブラリ
- 3. 機械学習、Python
- 4. 機械学習システム
- 5. 機械学習udacity
- 6. Python - 機械学習
- 7. 機械学習モデルテスト
- 8. 深い学習と機械学習
- 9. 機械学習のヌルクラス
- 10. ロボットでの機械学習
- 11. 機械学習データのフォーマット
- 12. GATEの機械学習
- 13. 機械学習の提案
- 14. Azureの機械学習 - データセット
- 15. 機械学習 - 分類アルゴリズム
- 16. Coursera機械学習:グラデーションデサントベクトル化
- 17. 機械学習Webサービス
- 18. aws機械学習エンドポイント
- 19. 機械学習分類アンサンブル
- 20. 反復機械学習アルゴリズム
- 21. 機械学習用レンタルサーバー
- 22. AWS機械学習エラーS3
- 23. R機械学習モデル - ブラインドテスト
- 24. テキストマイニングと機械学習
- 25. 機械学習分類データセット
- 26. Sparking WaterのH20マシンのメリット利点機械学習ライブラリ
- 27. 機械学習 - SVM機能融合テクニック
- 28. ガウスNB機械学習 - 機能解析
- 29. 機械学習ライブラリはs +(またはR)ですか?
- 30. 機械学習のためのPythonインポート
私がいることを同意しますこれは建設的な質問ではありません。私は、Google検索が自動化された結果を上回る、ユーザーが選んだライブラリの提案をすることは非常に便利だと思います。クローズノートに書かれているように、図書館の提案に「事実、参考資料、特定の専門技術」を付けることができない理由はわかりません。 –
@IsmailDeganiあなたは今すぐ再開することができますか? –
フレームワークを探している人:質問がロックされているため、以下の回答に日付があります。 Accord.NETと呼ばれる一般的なオープンソースのC#マシン学習フレームワークがあり、そのWebページは次のとおりです。http://accord-framework.net/ –