EN YAKIN K-KOMŞU ALGORİTMASI ve AĞIRLIKLI OYLAMA
ÖRNEĞİ
Bu yöntem, sınıfları belli olan bir örnek kümesindeki gözlem değerlerinden yararlanarak, örneğe katılacak yeni bir gözlemin hangi sınıfa ait olduğunu belirlemek amacıyla kullanılır.
Öncelikle yanda ki arayüzü tasarlayalım.
Tasarım işlemi bittikten sonra kullanacağımız değişkenleri tanımlayalım sonra da OK butonunun Click olayına aşağıdaki kodu yazalım.
//1 pozitif,0 negatif
int[,] dizi = new int[4, 4];
int x1;
int x2;
int x3;
double[,] oklid = new double[4, 2];
int n = 0;
int m = 0;
double temp = 0.0;
double[] kare = new double[3];
double g = 0.0;
double f = 0.0;
private void button1_Click(object sender, EventArgs e)
{
listBox1.Items.Clear();
x1 = Int32.Parse(textBox1.Text.ToString());
x2 = Int32.Parse(textBox2.Text.ToString());
x3 = Int32.Parse(textBox3.Text.ToString());
dizi[0, 0] = 0;
dizi[0, 1] = 8;
dizi[0, 2] = 2;
dizi[0, 3] = 1;
dizi[1, 0] = 2;
dizi[1, 1] = 6;
dizi[1, 2] = 8;
dizi[1, 3] = 1;
dizi[2, 0] = 2;
dizi[2, 1] = 8;
dizi[2, 2] = 10;
dizi[2, 3] = 0;
dizi[3, 0] = 7;
dizi[3, 1] = 7;
dizi[3, 2] = 1;
dizi[3, 3] = 1;
oklid[0, 0] = Math.Sqrt(Math.Pow((dizi[0, 0] - x1), 2) + Math.Pow((dizi[0, 1] - x2), 2) + Math.Pow((dizi[0, 2] - x3), 2));
oklid[1, 0] = Math.Sqrt(Math.Pow((dizi[1, 0] - x1), 2) + Math.Pow((dizi[1, 1] - x2), 2) + Math.Pow((dizi[1, 2] - x3), 2));
oklid[2, 0] = Math.Sqrt(Math.Pow((dizi[2, 0] - x1), 2) + Math.Pow((dizi[2, 1] - x2), 2) + Math.Pow((dizi[2, 2] - x3), 2));
oklid[3, 0] = Math.Sqrt(Math.Pow((dizi[3, 0] - x1), 2) + Math.Pow((dizi[3, 1] - x2), 2) + Math.Pow((dizi[3, 2] - x3), 2));
for (int k = 0; k < 4; k++)
{
for (int j = 0; j < 3; j++)
{
if (oklid[j, 0] > oklid[j + 1, 0])
{
temp = oklid[j, 0];
oklid[j, 0] = oklid[j + 1, 0];
oklid[j + 1, 0] = temp;
oklid[j, 1] = dizi[j, 3];
}
}
}
for (int j = 0; j < 3; j++)
{
listBox1.Items.Add("Uzaklk="+oklid[j, 0]);
kare[j] = 1 / Math.Pow(oklid[j, 0], 2);
listBox1.Items.Add("Karar="+oklid[j,1]);
listBox1.Items.Add("A§rlkl Oylama="+kare[j]);
if (oklid[j, 1] % 2 == 0)
{
g += kare[j];
n++;
}
else if (oklid[j, 1] % 2 == 1)
{
f += kare[j];
m++;
}
}
//A§rlkl Oylama
if (g > f)
// MessageBox.Show("Karar=negatif","A§rlkl Oylama");
textBox4.Text = "Sonuc= negatif";
else
// MessageBox.Show("Karar=pozitif", "A§rlkl Oylama");
textBox4.Text = "Sonuc= pozitif";
//en yakn K komŸusu algoritmas
if(n>m)
// MessageBox.Show("Karar=negatif","En yakn k KomŸusu Algoritmas");
textBox5.Text="Sonu‡ = negatif";
else
// MessageBox.Show("Karar=pozitif","En yakn k KomŸusu Algoritmas");
textBox5.Text = "Sonu‡ = pozitif";
}
Çıkış için kullandığımız button 2 nin click olayına da aşağıdaki kodu yazalım.
Application.Exit();
Eğer istersek x1 , x2 ve x3 değerlerine program her çalıştığında başlangıç değeri verebiliriz.
Ben 0 vereceğim.Bunu da kodun Form1_Load ına yazmalıyım.
private void Form1_Load(object sender, EventArgs e)
{
textBox1.Text = "0";
textBox2.Text = "0";
textBox3.Text = "0";
}
Hiç yorum yok:
Yorum Gönder