Пример 1. Прогнозирование стоимости недвижимости
Рассмотрим задачу прогнозирования стоимости квартиры по её
площади. Поскольку обучающая выборка содержит известные значения стоимости,
применяется обучение с учителем. Целевая переменная является непрерывной
числовой величиной, поэтому задача относится к регрессии.
Линейная модель имеет вид:
ŷ = β₀ + β₁x,
где x — площадь квартиры, ŷ — прогнозируемая стоимость,
β₀ и β₁ — параметры модели.
Реализация на Python с использованием scikit-learn:
import numpy as np
from sklearn.linear_model import LinearRegression
X = np.array([40, 50, 60, 70, 80]).reshape(-1, 1)
y = np.array([18, 22, 26, 30, 34])
model = LinearRegression()
model.fit(X, y)
prediction = model.predict([[65]])
print("Прогноз:", prediction[0])
print("Коэффициент:", model.coef_[0])
print("Свободный член:", model.intercept_)
Результат:
Прогноз: 28.0
Коэффициент: 0.4
Свободный член: 2.0
Полученная модель описывается уравнением ŷ = 2 + 0.4x.
Для квартиры площадью 65 м² прогнозируемая стоимость составляет 28 млн
тенге.
Данный пример демонстрирует переход от обучающих наблюдений
к математической модели, параметры которой определяются автоматически.
Пример 2. Классификация объектов по известным признакам
Рассмотрим задачу определения вида ириса на основании
характеристик его чашелистиков и лепестков. В наборе данных Iris содержится 150
наблюдений, четыре числовых признака и три класса.
В отличие от регрессии, классификация предполагает
прогнозирование дискретной категории.
Реализация на Python:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
data = load_iris()
X = data.data
y = data.target
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.2,
random_state=42,
stratify=y
)
model = LogisticRegression(max_iter=1000)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
accuracy = accuracy_score(y_test, predictions)
print("Accuracy:", accuracy)
print("Первые прогнозы:", predictions[:5])
Обучающая выборка содержит 80% наблюдений, тестовая — 20%.
Параметр stratify обеспечивает сохранение пропорций классов при разделении
данных.
Качество оценивается метрикой Accuracy:
Accuracy = N_correct / N_total,
где N_correct — количество правильных прогнозов, N_total —
количество тестовых наблюдений.
Пример показывает, что задача машинного обучения включает не
только обучение алгоритма, но и независимую оценку его способности
классифицировать новые объекты.
Пример 3. Группировка объектов без известных целевых
значений
Рассмотрим задачу сегментации покупателей интернет-магазина
по количеству покупок и среднему чеку. В отличие от предыдущих примеров, для
каждого покупателя отсутствует заранее заданная категория.
Для обнаружения групп используется алгоритм K-means,
относящийся к обучению без учителя.
Реализация на Python:
import numpy as np
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
X = np.array([
[2, 3000],
[3, 3500],
[2, 4000],
[10, 15000],
[12, 16000],
[11, 14500]
])
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
model = KMeans(
n_clusters=2,
random_state=42,
n_init=10
)
clusters = model.fit_predict(X_scaled)
print("Номера кластеров:", clusters)
print("Центры кластеров:")
print(scaler.inverse_transform(model.cluster_centers_))
Стандартизация необходима, поскольку признаки имеют
существенно различающиеся числовые масштабы. Без неё расстояния между объектами
определялись бы преимущественно значениями среднего чека.
Алгоритм минимизирует внутрикластерную сумму квадратов
расстояний:
J = Σₖ Σ(xᵢ ∈ Cₖ)
||xᵢ − μₖ||²,
где Cₖ — множество объектов k-го кластера,
μₖ — его центр.
В результате выделяются группы покупателей со сходными
характеристиками. Номера кластеров не имеют самостоятельного содержательного
значения и требуют последующей интерпретации.