9-Amaliy mashgʻulot: Perseptron modeli. Perseptron
Preseptron algoritmi ikkita (binar) sinfni klassifikasiya qiluvchi algoritmidir. Bu
model yagona neyrondan tarkib topgan bo’lib kirish
qiymatini olib qaysi sinfga
tegishli ekani bashorat qiladi. Buning uchun kirish
qiymatlarining vaznlarga
ko’paytmasi xisoblanadi. Kirish qiymatlarining vaznlarga ko’paytmasi yig’indisi
faollashtirish deyiladi.
Faollashtirish = vaznlar * kirish qiymatlari + b
Agar faollashtirish 0.0 dan yuqori bo’lsa, model 1.0 qiymatni chiqaradi; aks holda
0.0 qiymat chiqaradi.
Bashorat qilinadi 1: agar faollashtirish > 0.0
Bashorat qilinadi 0: agar
faollashtirish <= 0.0
Perseptronning sxematik chizmasidan ko’rinib turibdiki kirish x
i
qiymatlariga mos
w
i
vazn qiymatlari ko’paytirilib yig’indisi xisoblanadi.
Chiqishda faollashtirish
funksiyasi (bu yerda qadam “step” funksiya) yig’indini qiymati bo’sag’a qiymatidan
katta yoki kichikligiga qarab 1 yoki 0 qiymatni beradi.
Bo’sag’a
faollashtirish funksiyasi
Bo’sag’a faollashtirish funksiyasidan foydalanilganda
vaznlar bilan kirish
qiymatlari ko’paytmasi yig’indisi bo’sag’a qiymatidan katta bo’lsa
neyron
faollashadi aks holda neyron faollashmaydi.
f(s)
=
1:
agar s > 0.0
f(s)
=
0:
agar s <= 0.0
Yuqoridagi formuladan ko’rinib turibdiki agar yig’indi s ning qiymati musbat bo’lsa
f(s) funksiya qiymati 1 ga teng bo’ladi aks holda 0 ga teng bo’ladi. Funksiya qiymati
1 ga teng bo’lganda keyingi qatlamdagi neyron kirishiga
yoki chiqishga qiymat
beriladi.
using System;
namespace test{
class Program
{
static void Main(string[] args)
{
int[,] input = new int[,] { {1,0}, {1,1}, {0,1}, {0,0} };
int[] outputs = { 0, 1, 0, 0 };
Random r = new Random();
double[] weights = { r.NextDouble(), r.NextDouble(), r.NextDouble() };
double learningRate = 1;
double totalError = 1;
while (totalError > 0.2)
{
totalError = 0;
for (int i = 0; i < 4; i++)
{
int output = calculateOutput(input[i, 0], input[i, 1], weights);
int error = outputs[i] - output;
weights[0] += learningRate * error * input[i, 0];
weights[1] += learningRate * error * input[i, 1];
weights[2] += learningRate * error * 1;
totalError += Math.Abs(error);
}
}
Console.WriteLine("Results:");