====== Histogram a CF-výraz ====== Histogramem se obvykle rozumí sloupcový graf jehož sloupce odpovídají intervalům čísel a výška sloupců odpovídá počtu výskytů hodnot sledované veličiny v jednotlivých intervalech. Systém LISp-Miner pracuje s obecnějšími histogramy. Jedná se o sloupcový graf zobrazující vhodné informace pro jednotlivé kategorie daného atributu. Další zobecnění spočívá v tom, že histogram se může týkat pouze vhodné [[lm_guha_te_matice#podmatice_matice_dat|podmatice dané matice dat]]. Procedura CF-Miner systému LISp-Miner umožňuje hledat podmatice zadané matice dat na kterých histogram daného atributu splňuje danou podmínku. //Histogram atributu// **A** //na podmatici dané booleovským atributem χ// značíme **A**/χ. Fakt, že tento histogram splňuje podmínku danou symbolem ≈ zapisujeme //CF-výrazem// ≈**A**/χ. [[lm_guha_te_histogram#Příklad CF-výrazu|Příklad CF-výrazu]] je v následujícím odstavci, poté je uvedena definice [[lm_guha_te_histogram#CF-výraz|CF-výrazu]]. Symbol ≈ se zde nazývá //CF-kvantifikátor//. Určuje podmínku týkající se histogramu **A**/χ. Tato podmínka se obvykle týká tvaru histogramu **A**/χ a minimálního počtu řádků podmatice **M/χ** vyhodnocované matice **M**. Podmínka se verifikuje na základě [[lm_guha_te_histogram#CF-tabulka|CF-tabulky]], která je východiskem pro definici [[lm_guha_te_histogram#CF-kvantifikátor|CF-kvantifikátoru]]. Pokud je pro matici data **M** a booleovský atribut χ splněna podmínka daná CF-kvantifikátorem ≈, pak je [[lm_guha_te_histogram#CF-výraz je pravdivý|CF-výraz ≈A/χ pravdivý]] v matici dat M. ===== Příklad CF-výrazu ===== V následujícím obrázku je uveden histogram atributu **DHodnoceni**, který je součástí dat [[https://lispminer.vse.cz/wiki/doku.php?id=lmdata:hotel2015|Hotel]] pro podmatici **Hotel / PNoci(//3-6//) ∧ POsob(//1//)**. Atribut **DHodnoceni** se týká hodnocení pobytů v hotelu samotnými hosty a má 3 kategorie - //nespokojen//, //průměr//, //spokojen//. Výška sloupců odpovídá počtu pobytů. {{ :priklad_histogramu.png|}} Vidíme, že pro pobyty specifikované booleovským výrazem **PNoci(//3-6//) ∧ POsob(//1//)** bylo 25 hostů s pobytem nespokojeno, 30 hostů hodnotilo pobyt jako průměrný a 50 hostů bylo s pobytem spokojeno. Celkem se tedy podmatice **Hotel / PNoci(//3-6//) ∧ POsob(//1//)** týká 105 hostů. O histogramu na obrázku lze říci, že roste a že se týká podmatice se 105 řádky. Tuto charakteristiku histogramu lze formalizovat CF-kvantifikátorem [↑, ≥105]. Celé tvrzení o tom, že histogram atributu **Dhodnocení** splňuje na podmatici dané booleovským atributem **PNoci(//3-6//) ∧ POsob(//1//)** tuto charakteristiku lze vyjádřit CF-výrazem [↑, ≥105] **Dhodnocení / PNoci(//3-6//) ∧ POsob(//1//)**. Z obrázku vyplývá, že CF-výraz [↑, ≥105] **Dhodnocení / PNoci(//3-6//) ∧ POsob(//1//)** je pravdivý pro matici dat **Hotel**. Poznamenejme, že pro matici dat jiného hotelu tento CF-výraz nemusí být pravdivý. Stačí například, aby 51 procent hostů bylo nespokojeno. Výše uvedený histogram atributu DHodnoceni na podmatici **Hotel / PNoci(//3-6//) ∧ POsob(//1//)** je zajímavý a možná i důležitý tím, že je rostoucí. Histogram atributu **DHodnoceni** pro celou matici dat **Hotel** má totiž úplně odlišný tvar, viz následující obrázek. {{ :histogramu_dhodnoceni_cely_hotel.png |}} Můžeme také říci, že CF-výraz [↑, ≥105] **Dhodnocení** / //True// je nepravdivý na matici dat **Hotel**. Připomeňme, že //True// značí [[lm_guha_te_bool|identicky pravdivý booleovský atribut]]. ===== CF-výraz ===== CF-výraz má tvar ≈**A**/χ kde * **A** je [[lm_guha_te_matice|kategoriální atribut]] * χ je [[lm_guha_te_bool|booleovský atribut]] * ≈ je [[lm_guha_te_histogram#CF-kvantifikátor|CF-kvantifikátor]]. CF-výraz ≈**A**/χ říká, že histogram atributu **A** splňuje na podmatici dané booleovským atributem χ podmínku danou CF-kvantifikátorem ≈. Určení, zda [[lm_guha_te_histogram#CF-výraz je pravdivý|CF-výraz je pravdivý]] v matici dat **M** se provádí na základě [[lm_guha_te_histogram#CF-tabulka|CF-tabulky]]. ===== CF-tabulka ===== CF-tabulka udává všechny frekvence potřebné pro ověření pravdivosti CF-výrazu ≈**A**/χ v matici dat **M**. Značí se CF(A,χ,**M**). Jedná se o 2*K-tici celých nezáporných čísel CF(**A**,χ,**M**) = ‹ n1,...,nK,m1,...,mK ›. Předpokládáme, že atribut **A** má kategorie a1,...,aK. Potom n1,...,nK jsou frekvence kategorií a1,...,aK v podmatici dat **M/χ** a m1,...,mK jsou frekvence kategorií a1,...,aK v matici dat **M**. CF-tabulku CF(**A**,χ,**M**) prezentujeme také ve tvaru dle následujícího obrázku. {{ :cf_tabulka_obecna.png?250 |}} CF-tabulka CF(**Dhodnocení**, **PNoci(//3-6//) ∧ POsob(//1//)**, **Hotel**) pro ověření platnosti CF-výrazu \\ [↑, ≥105] **Dhodnocení** / **PNoci(//3-6//) ∧ POsob(//1//)** v matici dat **Hotel** je v následujícím obrázku. {{ :cf_tabulka_priklad.png?500 |}} ===== CF-kvantifikátor ===== Symbol "≈" v CF-výrazu ≈**A**/χ se nazývá CF-kvantifikátor. Definuje podmínku týkající se 2*K-tic celých nezáporných čísel ‹ n1,...,nK,m1,...,mK › splňujících n1≤m1,...,nK≤mK. Podobně, jako pro [[lm_guha_te_pravidlo#4ft-kvantifikátor|4ft-kvantifikátor]], chápeme i CF-kvantifikátor ≈ jako {0,1}-hodnotovou funkci ≈(n1,...,nK,m1,...,mK) týkající se výše uvedených 2*K-tic celých nezáporných čísel. Platí * ≈(n1,...,nK,m1,...,mK) = 1 pokud podmínka daná CF-kvantifikátorem ≈ je splněna pro 2*K-tici \\ ‹ n1,...,nK,m1,...,mK › * ≈(n1,...,nK,m1,...,mK) = 0 pokud podmínka daná CF-kvantifikátorem ≈ není splněna pro 2*K-tici \\ ‹ n1,...,nK,m1,...,mK ›. Příkladem CF-kvantifikátoru je výraz [↑, ≥105] použitý ve výše uvedeném [[lm_guha_te_histogram#Příklad CF-výrazu|příkladu]]. Tomuto CF-kvantifikátoru odpovídá podmínka n1 < n2 < ... K-1 < nK ∧ n1 + ... + nK ≥ 105. Tedy: * [↑, ≥105](n1,...,nK,m1,...,mK) = 1 pokud platí n1 < n2 < ... K-1 < nK ∧ n1 + ... + nK ≥ 105 * [↑, ≥105](n1,...,nK,m1,...,mK) = 0 pokud neplatí n1 < n2 < ... K-1 < nK ∧ n1 + ... + nK ≥ 105. ===== CF-výraz je pravdivý ===== Pravdivost CF-výrazu ≈**A**/χ v matici dat **M** je definována pomocí CF-tabulky CF(**A**,χ,**M**) = ‹ n1,...,nK,m1,...,mK › takto: * ≈**A**/χ je pravdivý v matici dat **M** pokud ≈(CF(**A**,χ,**M**)) = 1, formálně zapisujeme Val(≈**A**/χ, **M**) = 1. Pokud není nebezpečí nedorozumění, píšeme pouze ≈(**A**,χ,**M**) = 1. * ≈**A**/χ je nepravdivý v matici dat **M** pokud ≈(CF(**A**,χ,**M**)) = 0, formálně zapisujeme Val(≈**A**/χ, **M**) = 0. Pokud není nebezpečí nedorozumění, píšeme pouze ≈(**A**,χ,**M**) = 0. Pro proceduru CF-Miner jsou definovány desítky CF-kvantifikátorů, jejich přehled je [[lm_guha_te_cf_kvantifikator|zde]].