1. В наборе данных имеется одно пропущенное значение.
Известные значения после сортировки:
25, 28, 30, 32, 35, 120.
Медиана:
(30 + 32) / 2 = 31.
После заполнения пропуска набор принимает вид:
25, 30, 28, 31, 35, 32, 120.
Значение 120 является потенциальным выбросом, поскольку
существенно отличается от остальных наблюдений и не соответствует обычному
возрасту работающего человека.
Реализация на Python:
import numpy as np
from sklearn.impute import SimpleImputer
X = np.array([
[25], [30], [28],
[np.nan], [35],
[32], [120]
])
imputer = SimpleImputer(strategy="median")
X_filled = imputer.fit_transform(X)
print("Медиана:", imputer.statistics_[0])
print("Данные:", X_filled.ravel())
Выбросы нельзя удалять автоматически. Необходимо установить,
возникло ли значение вследствие ошибки ввода, измерения или действительно
отражает редкое наблюдение. В данном случае следует проверить исходную запись.
2. Признак «Способ оплаты» содержит три уникальные
категории: Карта, Наличные, Перевод.
Результат One-Hot Encoding:
|
Способ оплаты |
Карта |
Наличные |
Перевод |
|
Карта |
1 |
0 |
0 |
|
Наличные |
0 |
1 |
0 |
|
Карта |
1 |
0 |
0 |
|
Перевод |
0 |
0 |
1 |
|
Наличные |
0 |
1 |
0 |
Реализация на Python:
import numpy as np
from sklearn.preprocessing import OneHotEncoder
X = np.array([
["Карта"],
["Наличные"],
["Карта"],
["Перевод"],
["Наличные"]
])
encoder = OneHotEncoder(sparse_output=False)
X_encoded = encoder.fit_transform(X)
print(encoder.get_feature_names_out())
print(X_encoded)
Присвоение категориям чисел 1, 2 и 3 может создавать
искусственный порядок и расстояния между ними. Например, алгоритм может
интерпретировать категорию 3 как большую по значению, чем категория 1, хотя
способы оплаты не обладают естественной количественной шкалой.
3. Матрица признаков содержит площадь и возраст
здания. Целевой вектор содержит стоимость недвижимости.
Реализация на Python:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error
X = np.array([
[45, 20],
[60, 15],
[75, 10],
[90, 5],
[55, 18],
[80, 8]
])
y = np.array([20, 28, 36, 45, 25, 40])
X_train, X_test, y_train, y_test = train_test_split(
X, y,
test_size=0.33,
random_state=42
)
model = make_pipeline(
StandardScaler(),
LinearRegression()
)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
print("Прогнозы:", predictions)
print("Фактические значения:", y_test)
print("MAE:", mean_absolute_error(y_test,
predictions))
Стандартизация выполняется после разделения данных,
поскольку её параметры должны определяться исключительно по обучающей выборке.
Если вычислить среднее и стандартное отклонение по всему
набору до разделения, информация о тестовых наблюдениях повлияет на подготовку
обучающих данных. Это создаст утечку информации и может исказить оценку
качества модели.
Использование Pipeline позволяет избежать данной ошибки.
Из-за малого объёма приведённого набора результаты тестирования носят
исключительно учебный характер.