Umělá inteligence je obor informatiky zabývající se tvorbou systémů vykazujících známky inteligentního chování. Mezi hlavní problémy v rámci výzkumu umělé inteligence patří řešení úloh, usuzování, znalosti, neurčitost, plánování, učení, zpracovávání přirozeného jazyka a vnímání. Související problema
Předmět pokrývá celé spektrum umělé inteligence — od klasických algoritmů prohledávání přes strojové učení až po moderní aplikace v NLP a etiku AI. Kombinuje teorii s praktickými příklady v Pythonu pomocí knihovny scikit-learn.
Stavový prostor je čtveřice (S, A, s₀, G), kde:
| Kritérium | Popis |
|---|---|
| Úplnost | Najde řešení, pokud existuje? |
| Optimálnost | Najde nejlevnější řešení? |
| Časová složitost | Kolik uzlů prozkoumá? |
| Prostorová složitost | Kolik uzlů drží v paměti? |
Prochází strom po vrstvách, používá frontu (FIFO). Garantuje nejkratší cestu (pokud jsou všechny hrany stejně drahé).
from collections import deque
def bfs(graph, start, goal):
queue = deque([(start, [start])])
visited = set([start])
while queue:
node, path = queue.popleft()
if node == goal:
return path
for neighbor in graph[node]:
if neighbor not in visited:
visited.add(neighbor)
queue.append((neighbor, path + [neighbor]))
return None
Používá zásobník (LIFO), prochází co nejhlouběji.
def dfs(graph, start, goal, visited=None, path=None):
if visited is None:
visited = set()
path = [start]
visited.add(start)
if start == goal:
return path
for neighbor in graph[start]:
if neighbor not in visited:
result = dfs(graph, neighbor, goal, visited, path + [neighbor])
if result:
return result
return None
Kombinuje skutečnou cenu g(n) a heuristiku h(n): f(n) = g(n) + h(n)
Heuristika musí být přípustná (nepřeceňuje skutečnou cenu) a konzistentní (h(n) ≤ c(n,n') + h(n')).
import heapq
def astar(graph, start, goal, heuristic):
# (f_score, node, path, g_score)
open_set = [(heuristic(start, goal), start, [start], 0)]
visited = {}
while open_set:
f, node, path, g = heapq.heappop(open_set)
if node in visited:
continue
visited[node] = g
if node == goal:
return path, g
for neighbor, cost in graph[node]:
if neighbor not in visited:
new_g = g + cost
new_f = new_g + heuristic(neighbor, goal)
heapq.heappush(open_set, (new_f, neighbor, path + [neighbor], new_g))
return None, float('inf')
# Příklad heuristiky — Manhattanská vzdálenost pro grid
def manhattan(pos, goal):
return abs(pos[0] - goal[0]) + abs(pos[1] - goal[1])
| Algoritmus | Úplný | Optimální | Čas | Prostor |
|---|---|---|---|---|
| BFS | ANO | ANO | O(b^d) | O(b^d) |
| DFS | NE | NE | O(b^m) | O(bm) |
| DFS s omez. hloubkou | NE | NE | O(b^l) | O(bl) |
| Iterativní prohlubo. | ANO | ANO | O(b^d) | O(bd) |
| A* | ANO | ANO | O(b^d) | O(b^d) |
Logické spojky: ¬ (negace), ∧ (konjunkce), ∨ (disjunkce), → (implikace), ↔ (ekvivalence)
Inferenční pravidla:
Rozšiřuje výrokovou logiku o kvantifikátory a predikáty:
# Příklad: Sokrates je smrtelný
∀x (Člověk(x) → Smrtelný(x))
Člověk(Sokrates)
⊢ Smrtelný(Sokrates) # Modus ponens
Ontologie = formální popis pojmů a jejich vztahů v doméně.
Komponenty ontologie:
Architektura: báze znalostí + inferenční engine + uživatelské rozhraní
Typy inference:
# Jednoduchý expertní systém s pravidly
rules = [
{"if": ["horečka", "kašel"], "then": "chřipka"},
{"if": ["horečka", "bolest_hlavy"], "then": "chřipka"},
{"if": ["chřipka"], "then": "doporučit_antipyretika"},
]
def forward_chain(facts, rules):
new_facts = set(facts)
changed = True
while changed:
changed = False
for rule in rules:
if all(p in new_facts for p in rule["if"]):
if rule["then"] not in new_facts:
new_facts.add(rule["then"])
changed = True
return new_facts
Hledáme parametry θ tak, aby ŷ = θ₀ + θ₁x₁ + ... + θₙxₙ minimalizovalo MSE.
Funkce ztráty (MSE): MSE = (1/m) · Σᵢ (ŷᵢ - yᵢ)²
Normální rovnice (analytické řešení): θ = (XᵀX)⁻¹ · Xᵀ · y
Gradientní sestup: θⱼ := θⱼ - α · (∂J/∂θⱼ)
kde α = learning rate, J = cost function
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error, r2_score
import numpy as np
# Příprava dat
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)
# Model
model = LinearRegression()
model.fit(X_train_scaled, y_train)
y_pred = model.predict(X_test_scaled)
print(f"R² = {r2_score(y_test, y_pred):.4f}")
print(f"RMSE = {np.sqrt(mean_squared_error(y_test, y_pred)):.4f}")
print(f"Koeficienty: {model.coef_}")
Regularizace:
| θⱼ |
|---|
Rekurzivně dělí prostor příznaků. Kritéria dělení:
from sklearn.tree import DecisionTreeClassifier, export_text
from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier
# Rozhodovací strom
dt = DecisionTreeClassifier(max_depth=5, min_samples_leaf=10, random_state=42)
dt.fit(X_train, y_train)
print(export_text(dt, feature_names=feature_names))
# Random Forest (ensemble bagging)
rf = RandomForestClassifier(n_estimators=100, max_features="sqrt", random_state=42)
rf.fit(X_train, y_train)
# Důležitost příznaků
importances = pd.Series(rf.feature_importances_, index=feature_names)
print(importances.sort_values(ascending=False))
Ensemblové metody:
| Metoda | Princip | Výhoda |
|---|---|---|
| Bagging | Paralelní trénink na bootstrap vzorcích | Snižuje variance |
| Random Forest | Bagging + náhodný výběr příznaků | Robustní, málokdy přetrénuje |
| Boosting | Sekvenční — každý model opravuje chyby předchozího | Nízký bias |
| Gradient Boosting | Boosting s gradientním sestupem | Velmi přesný (XGBoost, LightGBM) |
Hledá hyperrovinu maximalizující margin (vzdálenost mezi třídami).
Tvrdý margin: min ½‖w‖² s.t. yᵢ(w·xᵢ + b) ≥ 1 Měkký margin: min ½‖w‖² + C·Σξᵢ s.t. yᵢ(w·xᵢ + b) ≥ 1 - ξᵢ
Kernel trick — transformace do vyšší dimenze:
from sklearn.svm import SVC
from sklearn.model_selection import GridSearchCV
svm = SVC(kernel="rbf", C=1.0, gamma="scale")
# Grid search pro hyperparametry
param_grid = {"C": [0.1, 1, 10, 100], "gamma": [0.001, 0.01, 0.1, 1]}
grid_search = GridSearchCV(SVC(kernel="rbf"), param_grid, cv=5, scoring="accuracy")
grid_search.fit(X_train_scaled, y_train)
print(f"Nejlepší parametry: {grid_search.best_params_}")
Perceptron — základní stavební blok: ŷ = σ(w·x + b)
Aktivační funkce:
from sklearn.neural_network import MLPClassifier
mlp = MLPClassifier(
hidden_layer_sizes=(100, 50), # 2 skryté vrstvy
activation="relu",
solver="adam",
alpha=0.001, # L2 regularizace
max_iter=500,
random_state=42
)
mlp.fit(X_train_scaled, y_train)
Algoritmus:
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
import matplotlib.pyplot as plt
# Elbow method — výběr k
inertias = []
for k in range(1, 11):
km = KMeans(n_clusters=k, random_state=42, n_init=10)
km.fit(X)
inertias.append(km.inertia_)
# Silhouette score — kvalita clusterů
km = KMeans(n_clusters=4, random_state=42, n_init=10)
labels = km.fit_predict(X)
score = silhouette_score(X, labels)
print(f"Silhouette score: {score:.4f}") # blíže 1 = lepší
Redukce dimenzionality hledáním směrů maximální variance.
Kroky:
from sklearn.decomposition import PCA
pca = PCA(n_components=0.95) # zachovat 95% variance
X_reduced = pca.fit_transform(X_scaled)
print(f"Původní dimenze: {X.shape[1]}")
print(f"Redukovaná dimenze: {X_reduced.shape[1]}")
print(f"Vysvětlená variance: {pca.explained_variance_ratio_}")
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
# Pipeline pro klasifikaci textu
pipeline = Pipeline([
("tfidf", TfidfVectorizer(
max_features=10000,
ngram_range=(1, 2), # unigramy + bigramy
stop_words="english"
)),
("clf", MultinomialNB(alpha=0.1))
])
pipeline.fit(X_train_texts, y_train)
TF-IDF: TF(t,d) = počet výskytů t v d / celkový počet slov v d IDF(t) = log(N / df(t)) TF-IDF(t,d) = TF(t,d) · IDF(t)
Word2Vec — slova reprezentovaná jako vektory v kontinuálním prostoru, kde podobná slova jsou si blízká. Král - Muž + Žena ≈ Královna.
Architektury: CBOW (předpovídá slovo z kontextu) a Skip-gram (z jednoho slova předpovídá kontext).
Transformer modely: BERT, GPT — attention mechanismus zachycuje kontext celé věty.
| Princip | Popis |
|---|---|
| Transparentnost | AI musí být vysvětlitelná (XAI) |
| Spravedlnost | Absence diskriminace (bias v datech) |
| Soukromí | GDPR, ochrana osobních dat |
| Bezpečnost | Robustnost vůči adversariálním útokům |
| Odpovědnost | Kdo nese odpovědnost za rozhodnutí AI? |
Používej Markdown: ## Nadpis, **tučně**, `kód`, - odrážky, > citace