Czy kiedykolwiek zdarzyło ci się, że oglądałeś film w kinie, na który polecił ci kolega lub trailer był fajny i po parunastu minutach (nie liczę czasu z reklamami przed filmem) okazało się, że jest to kompletny badziew. Ja wtedy siedzę spokojnie i mówię do sobie, że „już zapłaciłem i poświeciłem czas na dojazd do kino, to jeszcze tą godzinę wytrzymam”. Jeżeli miałeś taką sytuacje jak ja, to może ci pomóc mechanizmu zaimplementowany na portalu filmweb. Teraz oglądam te dobre filmy, wygenerowane z rekomendacji.
Ale jakie są dobre, a jakie słabe filmy?
Każda osoba ma swój własny gust filmów. Mechanizmem do wyliczania scoringu filmu nazywa się Gustomierz. Korzysta z wielu zmiennych, takich jak gatunek, głosy innych użytkowników czy twórcy filmu. Model do wyliczenia najlepszych filmów działa na bazie algorytmu K-najbliższych sąsiadów.
I pamiętaj. Szanuj swój czas jaki poświęcasz na oglądanie filmów.
Pokazywanie postów oznaczonych etykietą AI. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą AI. Pokaż wszystkie posty
piątek, 14 grudnia 2012
poniedziałek, 27 lutego 2012
Sieć bayesowska w .NET
Sieć bayesowska jest zaawansowaną probabilistyczną metodą odkrywania wiedzy i wnioskowania. Przedstawia ona zależności pomiędzy zdarzeniami bazując na wzorze Bayesa oraz rachunku prawdopodobieństwa. Umożliwia reprezentację probabilistycznych zależności przyczynowych między dowolnymi atrybutami (zdarzeniami). W praktyce sieć bayesowska jest reprezentowana przez skierowany graf acykliczny. Największą korzyścią sieci bayesowskiej jest czytelna i intuicyjna graficzna reprezentacja wiedzy o bezpośrednio zachodzących zależnościach.
Poniżej przedstawiony jest przykład modelu graficznego sieci. Mokra trawa(atrybut WetGrass) jest bezpośrednio uzależniona od dwóch czynników: czy został załączony zraszacz (Sprinkler) oraz od tego czy padał deszcz (Rain). Te dwa czynniki są uzależnione od pochmurności ( atrybut Cloudy). Zgodnie z relacją przechodnią, mokra trawa jest pośrednio zależna od pochmurności. Każdy z atrybutów ma dwie opcje: może zajść lub nie może zajść (T i F). Dla każdej kombinacji przedstawione jest prawdopodobieństwo wystąpienia takiego zdarzenia.
Dajmy na to, że chcemy obliczyć z jakim prawdopodobieństwem padał deszcz (Rain(R)=T) przy zaistnieniu (zaobserwowaniu) mokrej trawy (atrybut WetGrass(W)= T). Czyli mamy do czynienia z prawdopodobieństwem warunkowym P(R|W=T).
Do implementacji takiego modelu z pomocą przychodzi nam projekt o naziwe Infer.NET. Służy on m.in. do wnioskowania dla bayesowskiego modelu graficznego. Implementacja przedstawiona jest poniżej:
W 60 linijkach mamy zaimplementowany cały model graficzny oraz mechanizm wnioskujący. Dla potrzeb publikacji zamieściłem zdjęcie z okienkiem całej aplikacji oraz prawdopodobieństwa dla paru innych warunków.
Implementacja podanego przykładu można znaleźć pod adresem Bayesian Networks na Codeplex. Więcej o samej sieci bayesowskiej jest na wykładzie pt. Introduction To Bayesian Inference.
Poniżej przedstawiony jest przykład modelu graficznego sieci. Mokra trawa(atrybut WetGrass) jest bezpośrednio uzależniona od dwóch czynników: czy został załączony zraszacz (Sprinkler) oraz od tego czy padał deszcz (Rain). Te dwa czynniki są uzależnione od pochmurności ( atrybut Cloudy). Zgodnie z relacją przechodnią, mokra trawa jest pośrednio zależna od pochmurności. Każdy z atrybutów ma dwie opcje: może zajść lub nie może zajść (T i F). Dla każdej kombinacji przedstawione jest prawdopodobieństwo wystąpienia takiego zdarzenia.
Dajmy na to, że chcemy obliczyć z jakim prawdopodobieństwem padał deszcz (Rain(R)=T) przy zaistnieniu (zaobserwowaniu) mokrej trawy (atrybut WetGrass(W)= T). Czyli mamy do czynienia z prawdopodobieństwem warunkowym P(R|W=T).
Do implementacji takiego modelu z pomocą przychodzi nam projekt o naziwe Infer.NET. Służy on m.in. do wnioskowania dla bayesowskiego modelu graficznego. Implementacja przedstawiona jest poniżej:
#region implementacja modelu
//pochmurnie
Variable<bool> cloudy = Variable.Bernoulli(0.5);
// spryskiwacz
Variable<bool> sprinkler = Variable.New<bool>();
using (Variable.If(cloudy))
sprinkler.SetTo(Variable.Bernoulli(0.1));
using (Variable.IfNot(cloudy))
sprinkler.SetTo(Variable.Bernoulli(0.5));
// deszcz
Variable<bool> rain = Variable.New<bool>();
using (Variable.If(cloudy))
rain.SetTo(Variable.Bernoulli(0.8));
using (Variable.IfNot(cloudy))
rain.SetTo(Variable.Bernoulli(0.2));
// mokra trawa
Variable<bool> wetGrass = Variable.New<bool>();
using (Variable.If(sprinkler))
{
using (Variable.If(rain))
wetGrass.SetTo(Variable.Bernoulli(0.99));
using (Variable.IfNot(rain))
wetGrass.SetTo(Variable.Bernoulli(0.9));
}
using (Variable.IfNot(sprinkler))
{
using (Variable.If(rain))
wetGrass.SetTo(Variable.Bernoulli(0.9));
using (Variable.IfNot(rain))
wetGrass.SetTo(Variable.Bernoulli(0.0));
}
#endregion
#region wnioskowanie
wetGrass.ObservedValue = true; //mokra trawa
InferenceEngine ie = new InferenceEngine();
ie.ShowProgress = false;
Console.WriteLine("P(deszcz | trawa jest mokra)="
+ ie.Infer(rain));
Console.WriteLine("P(spryskiwacz | trawa jest mokra)="
+ ie.Infer(sprinkler));
cloudy.ObservedValue = false; //nie jest pochmurnie
Console.WriteLine("P(deszcz | trawa jest mokra, nie jest pochmurnie)="
+ ie.Infer(rain));
Console.WriteLine("P(spryskiwacz | trawa jest mokra, nie jest pochmurnie)="
+ ie.Infer(sprinkler));
#endregion
W 60 linijkach mamy zaimplementowany cały model graficzny oraz mechanizm wnioskujący. Dla potrzeb publikacji zamieściłem zdjęcie z okienkiem całej aplikacji oraz prawdopodobieństwa dla paru innych warunków.
Implementacja podanego przykładu można znaleźć pod adresem Bayesian Networks na Codeplex. Więcej o samej sieci bayesowskiej jest na wykładzie pt. Introduction To Bayesian Inference.
Subskrybuj:
Posty (Atom)


