Пример 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-го кластера, μₖ — его центр.

В результате выделяются группы покупателей со сходными характеристиками. Номера кластеров не имеют самостоятельного содержательного значения и требуют последующей интерпретации.