İçeriğe geç

OneR algoritması

Merhabalar bu yazımda diğer classification algoritmalarından OneR nedir ve Swift dili ile nasıl kullanırız örneği vereceğim.

OneR algoritması bir veri madenciliği algoritmasıdır aynı zamanda makine öğrenme içerisindede kullanılır. Zaten veri madenciliği ve makine öğrenmesi beraber çalışmaktadırlar.

ZeroR algoritmasının gelişmiş halidir diyebiliriz. Bu algoritma ZeroR algoritmasına göre daha iyi sonuçlar çıkarmaktadır. Algoritmanın mantığını açıklayacak olursam. Elimizde bulunan train verilerindeki classlardan bize en iyi ihtimalli sonucu verebilecek olanı seçmektedir.

Yani yukardaki resimdede Outlook,Temp,Humidty,Windy bizim classlarımızdır ve bir tahmin işlemi yapmak istiyorsak algoritma bu classların teker teker frekans tabloları oluşturur.

Bu tablolardan en yüksek toplamı olan en iyi predictor yani tahmini değer seti diyebiliriz. Bu tabloda predictorumuz Outlook olmuş.

Tahmin işlemi yapmak istersek eğer;

Şeklinde sonuçlar döndürürüz.

Aşağıda yazdığım örneği inceleyebilirsiniz.

Algoritmanın amacı hangi sınıfı kullanırsak daha iyi sonuç elde ederizi bulmaktır. Ve bulunan sınıfa göre sınıflama işlemi yapar.

extension Int {
    func toDouble() -> Double {
        return Double(self)
    }
}

let weatherSet:[String] = ["S","O","R","S","S","O","R","R","S","R","S","O","O","R"]
let moistureSet:[String] = ["h","l","n","n","l","l","h","h","l","n","h","h","h","h"]
let playSet:[Bool] = [false,true,true,true,true,true,false,false,true,true,false,true,true,false]

func elementCount<Arr:Sequence>(array:Arr,v:Arr.Iterator.Element) -> Int where Arr.Iterator.Element:Equatable {
    
    var count:Int = 0
    
    array.forEach { (val) in
        if v == val {
            count += 1
        }
    }
    
    return count
}


// Classes -> Weather & Moisture

func frequ(_ cls:String,_ set:[String]) -> Int {
    
    var playPack:[Bool] = []

    
    for i in 0..<set.count {
        
        if cls == set[i] {
            playPack.append(playSet[i])
        }
        
    }


    return max(elementCount(array: playPack, v: true),elementCount(array: playPack, v: false))
    
}

func oneR() -> Double {
    
    let weatherF = frequ("S",weatherSet) + frequ("O",weatherSet) + frequ("R",weatherSet) // 10
    let moistureF = frequ("h", moistureSet) + frequ("l", moistureSet) + frequ("n", moistureSet) // 12

    return max(weatherF,moistureF).toDouble() / playSet.count.toDouble()
    
}

print(oneR()) // 0.85

Yazdığım örnekte eğer moisture sınıfı ile tahminleme yaparsak sonucu %85’lik bir başarı elde etmiş oluruz. Weather seti ile yaparsakta %71’lik bir tahmin başarısı elde ederiz.

Github link.

Kategori:AlgorithmMachine Learning

Bu yazı yorumlara kapalı.

Copyright © 2022 Kenan Atmaca