====== 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]].