Jump to content
  • entries
    55
  • comments
    2
  • views
    281

Öğrenme Sınıflandırıcı Sistemi(Learning Classifier System-LCS)


Doğuhan ELMA

60 views

Learning Classifier System (LCS), bir tür genetik algoritma tabanlı makine öğrenmesi sistemidir. İçerdikleri adaptif öğrenme ve evrimsel bilgiyi birleştirerek karmaşık sistemlerin davranışlarını modellemek veya tahmin etmek için kullanılırlar. Yani, genetik algoritmaların temel prensiplerini, örneğin seçilim, çaprazlama ve mutasyon gibi, kullanarak bir dizi kural oluştururlar ve bu kuralların kalitesini artırırlar. Bu sayede, algoritma karmaşık problemlere karşı uygun çözümler üretebilir.

Bir LCS genellikle bir dizi "kural" veya "sınıflandırıcı"dan oluşur. Her sınıflandırıcı, bir durumu bir eyleme bağlar. Örneğin, bir sınıflandırıcı "Eğer hava yağmurluysa, şemsiye al" şeklinde bir kural olabilir. Her sınıflandırıcı ayrıca bir "fitness" değerine sahiptir, bu değer o kuralın ne kadar iyi performans gösterdiğini belirler. 

LCS'lerin çalışma süreci genellikle şu adımları içerir:

1. Algılama: LCS, çevresinden bilgi alır (örneğin, bir sensör ağından veya bir veri setinden).

2. Eşleşme: Algılanan bilgilerle eşleşen sınıflandırıcılar belirlenir. Bu adımda bir sınıflandırıcı seti (match set) oluşturulur.

3. Eylem seçme: Eşleşen sınıflandırıcılar arasından bir eylem seçilir ve gerçekleştirilir. 

4. Ödül/Penalize etme: Eğer seçilen eylem başarılıysa (örneğin, doğru bir tahmin yapılırsa), eylemi seçen sınıflandırıcılar ödüllendirilir (fitness değerleri artar). Başarısız bir eylemde ise sınıflandırıcılar cezalandırılır (fitness değerleri azalır).

5. Kural seti güncelleme: Yeni sınıflandırıcılar rastgele oluşturulabilir (genetik algoritma tarafından), veya mevcut sınıflandırıcılar güncellenebilir.

6. Kural seti podalama: Düşük performanslı sınıflandırıcılar, yüksek performanslı olanlarla yer değiştirebilir.

Bu adımlar, bir dizi iterasyon boyunca tekrarlanır. Sonuçta, LCS'nin kural seti, algılanan durumlara en uygun eylemleri belirlemek için iyileştirilmiş olur.

LCS'ler, karmaşık ve dinamik ortamlarda öğrenme ve adapte olma yetenekleri sayesinde, çok çeşitli uygulamalara sahiptir. Örneğin, otomatik kontrol sistemlerinde, tahmin modellemesinde, veri madenciliğinde ve karmaşık sistemlerin analizinde kullanılabilirler.

Örnek Python Kodu:

import random

class Classifier:
    # Sınıflandırıcı sınıfını oluşturuyoruz. Her sınıflandırıcının bir durumu (condition),
    # bir eylemi (action) ve bir uygunluk (fitness) değeri vardır.
    def __init__(self, condition, action, fitness):
        self.condition = condition
        self.action = action
        self.fitness = fitness

# Rastgele bir sınıflandırıcı oluşturmak için bir fonksiyon
def generate_random_classifier():
    condition = [random.choice([0, 1]) for _ in range(10)]  # Durumu rastgele oluştururuz
    action = random.choice([0, 1])  # Eylemi rastgele oluştururuz
    fitness = random.random()  # Uygunluk değerini rastgele oluştururuz
    return Classifier(condition, action, fitness)

# Verilen duruma uyan sınıflandırıcıları bulmak için bir fonksiyon
def find_matching_classifiers(classifiers, situation):
    return [c for c in classifiers if c.condition == situation]

# Uygunluklarına göre bir sınıflandırıcı seçmek için bir fonksiyon
def select_classifier(classifiers, all_classifiers):
    total_fitness = sum(c.fitness for c in classifiers)
    if total_fitness == 0 or len(classifiers) == 0:  # Eğer toplam uygunluk 0 ise veya hiç sınıflandırıcı yok ise
        return random.choice(all_classifiers)  # Tüm sınıflandırıcılar arasından rastgele bir sınıflandırıcı seçeriz
    else:
        pick = random.uniform(0, total_fitness)
        current = 0
        for classifier in classifiers:
            current += classifier.fitness
            if current > pick:
                return classifier

# Duruma göre bir eylem belirlemek için bir fonksiyon
def determine_action(situation, classifiers):
    matching_classifiers = find_matching_classifiers(classifiers, situation)
    chosen_classifier = select_classifier(matching_classifiers, classifiers)
    return chosen_classifier.action

# Genetik algoritma için eklentiler

# İki sınıflandırıcıyı çaprazlamak için bir fonksiyon
def crossover(classifier1, classifier2):
    index = random.randint(1, len(classifier1.condition) - 1)
    new_condition = classifier1.condition[:index] + classifier2.condition[index:]
    new_action = random.choice([classifier1.action, classifier2.action])
    new_fitness = (classifier1.fitness + classifier2.fitness) / 2
    return Classifier(new_condition, new_action, new_fitness)

# Bir sınıflandırıcıyı mutasyona uğratmak için bir fonksiyon
def mutate(classifier):
    index = random.randint(0, len(classifier.condition) - 1)
    classifier.condition[index] = 1 - classifier.condition[index]  # Biti çeviririz
    classifier.action = 1 - classifier.action  # Eylemi çeviririz

# Genetik algoritmayı gerçekleştirmek için bir fonksiyon
def genetic_algorithm(classifiers):
    new_classifiers = classifiers[:]
    for _ in range(100):  # 100 iterasyon gerçekleştiririz
        parent1 = select_classifier(classifiers, classifiers)
        parent2 = select_classifier(classifiers, classifiers)
        child = crossover(parent1, parent2)
        if random.random() < 0.01:  # Mutasyon oranı
            mutate(child)
        new_classifiers.append(child)
    return new_classifiers

# Örnek kullanım:

classifiers = [generate_random_classifier() for _ in range(100)]
situation = [random.choice([0, 1]) for _ in range(10)]

print("Başlangıçtaki eylem:", determine_action(situation, classifiers))

classifiers = genetic_algorithm(classifiers)

print("Son eylem:", determine_action(situation, classifiers))

Bu kodda gerçekleşen bir genetik algoritma, bir Evrimsel Öğrenme Sınıflandırıcı Sistemi (LCS) çerçevesinde sunulmaktadır. Yani genetik algoritma, bir çözüm kümesi olan sınıflandırıcıları evrimleştirmek için kullanılır. Şimdi kodun her bir bölümünü ve çıktıları tek tek inceleyelim:

1. `Sınıflandırıcı` nesnesi oluşturma:
   İlk adımda, her sınıflandırıcı bir durum (s) ve bir eylem (a) ile birlikte oluşturulur. Durumlar ve eylemler rastgele seçilir. Her sınıflandırıcı ayrıca bir uygunluk değeri ile başlar ve bu değer, sınıflandırıcının ne kadar iyi bir çözüm olduğunu belirler.

2. `find_matching_classifiers` fonksiyonu:
   Bu fonksiyon, belirli bir durum için uygun olan sınıflandırıcıları bulur. Örneğin, durum "111" ise, bu duruma uyan ve dolayısıyla bu durumda bir eylem seçebilecek tüm sınıflandırıcılar seçilir.

3. `select_classifier` fonksiyonu:
   Bu fonksiyon, uygunluk değerlerine göre bir sınıflandırıcı seçer. Eğer toplam uygunluk 0 ise veya hiç sınıflandırıcı yok ise, tüm sınıflandırıcılar arasından rastgele bir sınıflandırıcı seçer. Bu, "Cannot choose from an empty sequence" hatasını önler.

4. `determine_action` fonksiyonu:
   Bu fonksiyon, belirli bir durum için bir eylem belirler. Bu, öncelikle durum için uygun olan sınıflandırıcıları bulmak, ardından uygunluk değerlerine göre bir sınıflandırıcı seçmek ve son olarak seçilen sınıflandırıcının eylemini döndürmek anlamına gelir.

5. `genetic_algorithm` fonksiyonu:
   Bu fonksiyon, genetik algoritmanın gerçekleştiği yerdir. İlk olarak, mevcut sınıflandırıcılar listesi kopyalanır. Daha sonra, 100 iterasyon boyunca, iki ebeveyn sınıflandırıcı uygunluk değerlerine göre seçilir ve çaprazlama yoluyla bir çocuk sınıflandırıcı oluşturulur. Çocuk sınıflandırıcı, belirli bir olasılıkla (bu örnekte %1) mutasyona uğrar ve daha sonra yeni sınıflandırıcılar listesine eklenir.

Bu kodun çıktısı, genetik algoritmanın her iterasyonunda sınıflandırıcı popülasyonunun evrimini gösterir. Her sınıflandırıcı, bir durum, bir eylem ve bir uygunluk değeri ile birlikte gösterilir. Bu kodun amacı, popülasyondaki sınıflandırıcıları, her durum için doğru eylemi belirleyebilecek bir şekilde evrimleştirmektir. Başarılı olduğunda, çıktıdaki sınıflandırıcılar genellikle belirli durumlar için belirli eylemler ile ilişkilendirilmiş olacaktır ve bu sınıflandırıcıların uygunluk değerleri, genetik algoritma tarafından geliştirilmiş olacaktır.

0 Comments


Recommended Comments

There are no comments to display.

Guest
Add a comment...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...