সি # তে মেশিন লার্নিং লাইব্রেরি [বন্ধ]


116

সি # তে কোন মেশিন লার্নিং লাইব্রেরি আছে? আমি ওয়েকের মতো কিছু পরে আছি । ধন্যবাদ.


89
আমি একমত না যে এটি কোনও গঠনমূলক প্রশ্ন নয়। আমি মনে করি স্বয়ংক্রিয় ফলাফলগুলিতে গুগল অনুসন্ধান সক্রিয় হওয়ার বিষয়ে ব্যবহারকারী-সংশোধিত লাইব্রেরি পরামর্শগুলির একটি সেট থাকা খুব দরকারী। নিকটস্থ নোটগুলিতে বর্ণিত লাইব্রেরির পরামর্শগুলির সাথে কেন "তথ্য, উল্লেখ এবং নির্দিষ্ট দক্ষতা" থাকতে পারে না তা আমি দেখতে পাচ্ছি না।
ইসমাইল দেগানী

2
@ ইসমাইলদেগনি আপনি কি আবার খুলতে ভোট দিতে পারেন?
জেমস কো

4
ফ্রেম ওয়ার্কগুলির জন্য যে কোনও একটিকে খুঁজছেন: নীচে উত্তরগুলি তারিখযুক্ত কারণ প্রশ্নটি লক হয়েছে। অ্যাকর্ড ডট নেট নামে একটি জনপ্রিয়, ওপেন সোর্স সি # মেশিন লার্নিং ফ্রেমওয়ার্ক রয়েছে এবং এটির ওয়েবপেজটি এখানে রয়েছে: অ্যাক্ট
জেমস কো

2
এমএল.এনইটি হ'ল মাইক্রোসফ্ট যেখানে প্রচুর পরিমাণে বিনিয়োগ করে। আমি এই 1 ঘন্টার ভিডিওটি তৈরি করেছি যা আপনাকে সি # youtube.com/watch?v=83LMXWmzRDM
শিবপ্রসাদ কৈরালা

1
এছাড়াও চেক আউট scisharpstack.org একটি প্রচেষ্টা পোর্টের পাইথন থেকে সবচেয়ে জনপ্রিয় মেশিন লার্নিং লাইব্রেরী সি #,
henon

উত্তর:


59

পরীক্ষা করে দেখুন এই সন্ত্রস্ত তালিকা GitHub থেকে। তালিকাভুক্ত ফ্রেমওয়ার্কগুলির মধ্যে অ্যাকর্ড ডট নেট ওপেন সোর্স এবং ২ হাজারেরও বেশি তারার সাথে সর্বাধিক জনপ্রিয়।

এছাড়াও, মাইক্রোসফ্ট দ্বারা সরবরাহিত .NET এর জন্য অফিসিয়াল মেশিন লার্নিং লাইব্রেরিটি দেখুন: https://github.com/dotnet/machinelearning


পুরোনো

কোডপ্রোজেজে আফরোজ নেট নামে একটি নিউরাল নেটওয়ার্ক লাইব্রেরি রয়েছে। ( গুগল কোডটিতে হোস্ট করা কোড ) (এছাড়াও আফগরের হোমপেজটি চেকআউট করুন - হোমপেজ অনুসারে, নতুন সংস্করণটি জেনেটিক অ্যালগরিদম এবং মেশিন লার্নিংকেও সমর্থন করে It দেখে মনে হচ্ছে এটি শেষ পর্যন্ত এটি খেলেছে বলে এটি অনেক এগিয়ে গেছে)

আমি জানি না এটি WEKA এর মতো কিছু কারণ আমি এটি কখনও ব্যবহার করি নি।

(এর ব্যবহার সম্পর্কে একটি নিবন্ধও রয়েছে )


1
খারাপ নয় যদিও কমপক্ষে কারও পক্ষে বিষয়টির সাথে খুব বেশি পরিচিত না হওয়াই সত্যই পছন্দ করা পছন্দ নয়। তারা তাদের ফর্মগুলির জন্য আংশিক ক্লাস ব্যবহার করে না (তাদের নমুনার পিছনে কোডটি পড়া কঠিন করে তোলে) এবং আমি এর জন্য উপযুক্ত দলিল খুঁজে পাই না।
আরসিআইএক্স

@ আরসিআইএক্স: আমি একমত যে এটি একেবারে সহজ নয়, আপনাকে প্রথমে স্নায়বিক নেটওয়ার্কগুলি এবং তাদের পিছনে গণিতগুলি বুঝতে হবে। এটি অবশ্যই এনএনগুলিকে শেখানোর জন্য নয় বরং যখন আপনি কী করছেন জানেন তখন সেগুলি বাস্তবায়নের জন্য ডিজাইন করা হয়নি। দস্তাবেজগুলি এখানে রয়েছে - aforgenet.com/framework/docs , তবে হ্যাঁ, তারা কিছুটা অপ্রয়োজনীয় দেখায় । ব্যক্তিগতভাবে, আমি এটি বেশ কয়েক বছর ধরে ব্যবহার করি নি, এবং দেখে মনে হচ্ছে এটি এর পরে অনেক বেশি যুক্ত হয়েছে তাই সম্ভবত এটি জটিলতায় বেড়েছে।
সাইমন পি স্টিভেন্স

1
আফরোজ এখন github.com/accord-net/framework- এ একীভূত হয়েছে
নিকোলে

15

আপনি সি # দিয়ে ওয়েকাও ব্যবহার করতে পারেন । সবচেয়ে ভাল সমাধান হ'ল এই টিউটোরিয়ালের মতো আইকেভিএম ব্যবহার করা , যদিও আপনি ব্রিজিং সফ্টওয়্যারও ব্যবহার করতে পারেন।


1
আপনি কোন "ব্রিজিং সফ্টওয়্যার" সম্পর্কে কথা বলছেন? কোনটা?
lmsasu

14

আই কেভিএম এবং কিছু 'আঠার কোড' ব্যবহার করে শেনের বক্তব্য অনুযায়ী ওয়েকা সি # থেকে খুব সহজেই ব্যবহার করা যায়। ওয়েকার '.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);
}

প্রথম পরীক্ষার শোগুলি, আপনি কীভাবে একটি শ্রেণিবদ্ধকারী তৈরি করেন এবং এটির সাথে একটি নতুন উদাহরণকে শ্রেণিবদ্ধ করেন, দ্বিতীয়টি দেখায়, উদাহরণস্বরূপ শ্রেণিবদ্ধকরণের জন্য আপনি কীভাবে একটি ফাইল থেকে অবিরাম শ্রেণিবদ্ধ ব্যবহার করতে পারেন। আপনার যদি খুব বেশি সমর্থন বিচ্ছিন্ন বৈশিষ্ট্যগুলির প্রয়োজন হয় তবে কিছু সংশোধন করা দরকার। উপরের কোডটিতে ২ জন সহায়ক ক্লাস ব্যবহার করা হয়েছে:

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

এনকোগ নামে একটি প্রকল্প রয়েছে যার সি # কোড রয়েছে। এটি রক্ষণাবেক্ষণ করেছেন জেফ হিটন, আমি কিছুক্ষণ আগে কিনেছি এমন একটি "ইন্ট্রোডাকশন টু নিউরাল নেটওয়ার্ক" বইয়ের লেখক। কোডবেস গিটটি এখানে রয়েছে: https://github.com/encog/encog-dotnet-core


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.