2009-10-26 14 views
97

वहाँ सी # में किसी भी मशीन सीखने पुस्तकालयों हैं? मैं WEKA जैसे कुछ के बाद हूं। धन्यवाद।सी # में मशीन सीखने पुस्तकालयों

+71

मुझे लगता है कि इससे सहमत नहीं यह एक रचनात्मक सवाल नहीं है। मुझे लगता है कि Google खोज के स्वचालित परिणामों पर उपयोगकर्ता द्वारा क्यूरेटेड लाइब्रेरी सुझावों का एक सेट होना बहुत उपयोगी है। मुझे नहीं लगता कि क्लोज नोट्स में वर्णित अनुसार "तथ्यों, संदर्भों और विशिष्ट विशेषज्ञता" के साथ पुस्तकालय सुझावों का पालन क्यों नहीं किया जा सकता है। –

+0

@IsmailDegani क्या आप फिर से खोलने के लिए मतदान कर सकते हैं? –

+0

किसी को भी व्यवस्थाएं की तलाश: नीचे दिए गए उत्तर दिनांकित हैं क्योंकि सवाल बंद है। http://accord-framework.net/ –

उत्तर

49

एक तंत्रिका नेटवर्क AForge.net codeproject पर बुलाया पुस्तकालय नहीं है। (कोड Google code पर होस्ट) (इसके अलावा AForge homepage चेकआउट - मुखपृष्ठ के अनुसार, नया संस्करण अब आनुवंशिक एल्गोरिथम और मशीन के रूप में अच्छी तरह से सीखने का समर्थन करता है के बाद से ऐसा लगता है कि मैं पिछले इसके साथ खेला है जैसे कि यह एक बहुत प्रगति की है।)

मैं डॉन यह नहीं पता कि यह WEKA की तरह कुछ है क्योंकि मैंने कभी इसका उपयोग नहीं किया है।

(वहाँ भी एक लेख है पर यह usage है)

+0

अच्छा एक: वहाँ एक लोकप्रिय, खुला स्रोत सी # मशीन सीखने रूपरेखा Accord.NET कहा जाता है और यहाँ अपने वेब पेज है। Upvoted। –

+0

कम से कम किसी के लिए इस विषय से बहुत परिचित नहीं है, यह वास्तव में अच्छा विकल्प नहीं है। वे अपने रूपों के लिए आंशिक कक्षाओं का उपयोग नहीं करते हैं (उनके नमूने के पीछे कोड को पढ़ने में कठिनाई होती है), और मुझे इसके लिए सभ्य दस्तावेज़ीकरण नहीं मिल रहा है। – RCIX

+0

@RCIX: मैं मानता हूं कि यह बिल्कुल आसान नहीं है, आपको वास्तव में तंत्रिका नेटवर्क और उनके पीछे गणित को समझने की आवश्यकता है। यह निश्चित रूप से एनएन को पढ़ाने के लिए डिज़ाइन नहीं किया गया है बल्कि उन्हें लागू करने के लिए डिज़ाइन किया गया है जब आप जानते हैं कि आप क्या कर रहे हैं। दस्तावेज़ यहां हैं - http://www.aforgenet.com/framework/docs/, लेकिन हाँ, वे थोड़ा विचित्र दिखते हैं। निजी तौर पर, मैंने इसे कई सालों तक उपयोग नहीं किया है, और ऐसा लगता है कि यह तब से बहुत कुछ जोड़ा गया है, इसलिए यह शायद जटिलता में उगाया गया है। –

14

तुम भी use Weka with C# कर सकते हैं। सबसे अच्छा समाधान IKVM, as in this tutorial का उपयोग करना है, हालांकि आप ब्रिजिंग सॉफ्टवेयर का भी उपयोग कर सकते हैं।

+1

में विलय कर रहा है क्या आप "ब्रिजिंग सॉफ़्टवेयर" के बारे में बात कर रहे हैं? कौन सा? – lmsasu

12

मैं सी # है कि आम POCO वस्तुओं के साथ काम करने के लिए डिज़ाइन किया गया है में एक ML library बनाया है।

14

Weka सी # से इस्तेमाल किया जा सकता बहुत आसानी से के रूप में शेन ने कहा iKVM और कुछ 'गोंद कोड' का उपयोग कर। कैसे आप एक वर्गीकारक निर्माण और इसके साथ एक नया उदाहरण वर्गीकृत

[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); 
} 

पहला परीक्षण से पता चलता है,,: weka page पर ट्यूटोरियल folow Weka की 'नेट संस्करण' बनाने के लिए, तो आप निम्न परीक्षण चलाने के लिए कोशिश कर सकते हैं दूसरा दिखाता है, उदाहरण के लिए वर्गीकृत करने के लिए आप एक फ़ाइल से एक सतत वर्गीकृत का उपयोग कैसे कर सकते हैं। यदि आपको बहुत अधिक असतत विशेषताओं की आवश्यकता है, तो कुछ संशोधन आवश्यक होगा। उपरोक्त कोड 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); 
    } 
} 
2

एनकॉग नामक एक परियोजना भी है जिसमें सी # कोड है। यह जेफ हीटन द्वारा बनाए रखा गया है, जो "परिचय के लिए तंत्रिका नेटवर्क" पुस्तक के लेखक हैं, मैंने कुछ समय पहले खरीदा था। codebase Git यहाँ है: https://github.com/encog/encog-dotnet-core

2

मैं नेट के लिए मशीन सीखने पुस्तकालयों के लिए खोज कर रहा हूँ के रूप में अच्छी तरह से और nuget.org/machine-learning पर माइक्रोसॉफ्ट रिसर्च से Infer.NET पाया:

संबंधित मुद्दे