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
.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";
}
}
}
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";
}
}
}
An unhandled exception of type 'System.TypeLoadException' occurred in System.Windows.Forms.dll
YanıtlaSilAdditional information: Could not load type 'weka.classifiers.lazy.IBk' from assembly 'Weka, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.