Weka-C# Connection

Merhaba Arkadaşlar bu yazımla sizlere data midning de kullanılan weka ile c# ın bağlantısını göstereceğim

.net framewfork 4.5 yüklü ise nuggete Install-Package PicNetML  


.diyoruz ve kodları uygun bir şekilde yazıyoruz
Merhaba  arkadaşlar bu yazımda sizlere weka da sınıflandırma yapan elimizde bir tane veri seti olup ondan  bir son eklenen sınıfın hangi sınıfa ait olduğunu tespit eden  programı yazacağız. Onun için ilk olarak nuget manahgerdan weka yazıyoruz ve picnet diye yazan extentiali yüklüyoruz. Weka makine öğrenmesinde kullanılan java ile yazılmış pratik bir programdır. Şimdi bu kadar ön bilgiden sonra kodları açıklamaya devam ediyoru.
            weka.core.Instances insts = new weka.core.Instances(new java.io.FileReader(Path));

Bu kısımda wekaya satır satır  veri setini veriyoruz. (Path içerisinde yer alan) (instance path içinde yer alan her bir satır)
    insts.setClassIndex(insts.numAttributes() - 1);


Bu kısımda kaç tane atribute var diye bakıyoruz( , ile ayrılmış)  onu diziye atıyoruz setclass index 0 dan başladığı için -1 dedik
                weka.classifiers.Classifier cl = new weka.classifiers.lazy.IBk();
Burada ise algoritmayı seçtk bunun için internette araştırma yaparak bulabilirsiniz.
weka.filters.Filter myRandom = new weka.filters.unsupervised.instance.Randomize();
                myRandom.setInputFormat(insts);
                insts = weka.filters.Filter.useFilter(insts, myRandom);

Burada ise makine öğrenmesinde sınıflandırma mı yapacağız yoksa veri setine göre mi öğrenecek onu belirledik.

                weka.core.Instances train = new weka.core.Instances(insts, 0, trainSize);

Burada ise bizim eğitim setini veriyoruz.

                         double predictedClass = cl.classifyInstance(currentInst);
Burada ise bir tane tahmin yapıp o tahmini ise aşağıda yer almaktadır.

                         if (predictedClass == 1)
                         {
                             return "ddd";
                         }
                         else if (predictedClass == 0)
                         {
                             return "fff";
                         }


Veri setimiz 0 ve 1 diye sınıflandırma algoritmasına sahiptir. Eger 1 gelmiş ise ddd diye dönüş yapacak 0 ise fff diye dönüş yapacaktır.
if (i == insts.numInstances() - 1)


Burada ise en son kayıt olup olmadığını kontrol ediyoruz.

Kodun tamamı aşağıda vardır. 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KanGrubuProject
{
    class Siniflandirma
    {
        static weka.classifiers.Classifier cl;
        public static string cinsBelirle(string Path)
        {
            int percentSplit = 100;
            try
            {
                weka.core.Instances insts = new weka.core.Instances(new java.io.FileReader(Path));
                insts.setClassIndex(insts.numAttributes() - 1);

                weka.classifiers.Classifier cl = new weka.classifiers.lazy.IBk();
                //Knn algoritması uygulanıyor

                //randomize the order of the instances in the dataset.
                weka.filters.Filter myRandom = new weka.filters.unsupervised.instance.Randomize();
                myRandom.setInputFormat(insts);
                insts = weka.filters.Filter.useFilter(insts, myRandom);

                int trainSize = insts.numInstances() * percentSplit / 100-1;
                int testSize = insts.numInstances() - trainSize;
                weka.core.Instances train = new weka.core.Instances(insts, 0, trainSize);
                /// string[] dizi;
                cl.buildClassifier(train);
                //int numCorrect = 0;
                for (int i = trainSize; i < insts.numInstances(); i++)
                {
                    weka.core.Instance currentInst = insts.instance(i);
                    // double predictedClass = cl.classifyInstance(currentInst);
                    if (i == insts.numInstances() - 1)
                    {
                        double predictedClass = cl.classifyInstance(currentInst);
                        if (predictedClass == 1)
                        {
                            return "ddd";
                        }
                        else if (predictedClass == 0)
                        {
                            return "fff";
                        }
                    }
                }

            }
            catch (java.lang.Exception ex)
            {
                ex.printStackTrace();
            }
            return "hata";
        }

    }

}


Yorumlar

  1. An unhandled exception of type 'System.TypeLoadException' occurred in System.Windows.Forms.dll

    Additional information: Could not load type 'weka.classifiers.lazy.IBk' from assembly 'Weka, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.

    YanıtlaSil

Yorum Gönder

Bu blogdaki popüler yayınlar

Asp.Net ile Mernisten veri Çekme