47 lines
2.2 KiB
ObjectPascal
47 lines
2.2 KiB
ObjectPascal
|
|
// Первый пример регрессии.
|
|||
|
|
//
|
|||
|
|
// В этом примере:
|
|||
|
|
// 1) загружаем готовый датасет с ценами на квартиры;
|
|||
|
|
// 2) выбираем признаки и целевую переменную;
|
|||
|
|
// 3) делим данные на обучающую и тестовую выборки;
|
|||
|
|
// 4) обучаем линейную регрессию;
|
|||
|
|
// 5) оцениваем качество модели по метрике R².
|
|||
|
|
uses MLABC;
|
|||
|
|
|
|||
|
|
begin
|
|||
|
|
// Загружаем учебный датасет с ценами на квартиры в Москве
|
|||
|
|
var ds := Datasets.MoscowHousing;
|
|||
|
|
|
|||
|
|
// Берём таблицу данных из датасета
|
|||
|
|
var df := ds.Data;
|
|||
|
|
|
|||
|
|
// Выбираем числовые признаки, по которым будем предсказывать цену
|
|||
|
|
var features := ['rooms', 'area', 'kitchen_area', 'floor', 'floors_total', 'metro_minutes'];
|
|||
|
|
|
|||
|
|
// Целевая переменная - цена квартиры
|
|||
|
|
var target := 'price';
|
|||
|
|
|
|||
|
|
// Преобразуем выбранные признаки в числовую матрицу
|
|||
|
|
var X := df.ToMatrix(features);
|
|||
|
|
|
|||
|
|
// Преобразуем целевую переменную в числовой вектор
|
|||
|
|
var y := df.ToVector(target);
|
|||
|
|
|
|||
|
|
// Делим данные на обучающую и тестовую выборки
|
|||
|
|
var (Xtrain, Xtest, ytrain, ytest) := Validation.TrainTestSplit(X, y, 0.2, 42);
|
|||
|
|
|
|||
|
|
// Создаём модель линейной регрессии
|
|||
|
|
var model := new LinearRegression;
|
|||
|
|
|
|||
|
|
// Обучаем модель на обучающей выборке
|
|||
|
|
model.Fit(Xtrain, ytrain);
|
|||
|
|
|
|||
|
|
// Получаем предсказания для тестовой выборки
|
|||
|
|
var pred := model.Predict(Xtest);
|
|||
|
|
|
|||
|
|
// Считаем, насколько хорошо модель объясняет данные.
|
|||
|
|
// Для простой линейной модели R² около 0.6 и выше здесь уже неплохой результат,
|
|||
|
|
// но более сложные модели могут работать точнее.
|
|||
|
|
Println('R²:', Metrics.R2(ytest, pred):0:3);
|
|||
|
|
end.
|