Вступ
У цьому проекті я створив модель машинного навчання для прогнозування витрати палива на милю для автомобілів, виходячи з різноманітних доступних даних. Python був основним інструментом для цього проекту. Зокрема, я використовував бібліотеки Pandas та Scikit-learn. Набір даних, який я використав, я знайшов на Kaggle.com. Його можна знайти за посиланням нижче.
[
Набір даних про автомобілі
дані про автомобілі для візуалізації, аналізу та задач регресії
www.kaggle.com
](https://www.kaggle.com/datasets/tawfikelmetwally/automobile-dataset?source=post_page-----f61146e3bbb4--------------------------------)
Розуміння даних
Спочатку я імпортував бібліотеку Pandas та завантажив набір даних у свій Jupyter notebook. Для кращого розуміння даних я використав методи “.describe()” та “.head()”. Це відносно невеликий набір даних з 398 рядками. Всі автомобілі досить старі і були виготовлені між 1970 та 1982 роками. Більшість інших колонок стосуються характеристик двигуна.
вихід pd.describe()
вихід pd.head()
Визначення моделі
Після детальнішого огляду даних, я вибрав колонку миль на галон як мою цільову змінну для прогнозування. Я вирішив використати модель дерева рішень для цього проекту. Потім я уважно подивився на доступні колонки, щоб зрозуміти, які з них використати як ознаки в моделі. Я вибрав усі колонки, окрім назви автомобіля та країни виробника.
y=df.mpg
features = ['cylinders', 'displacement', 'horsepower', 'weight',
'acceleration', 'model_year']
X= df[features]
Налаштування
Перед тим, як навчити модель, я розділив її на навчальні та тестові набори даних. Для цього я імпортував модуль traintestsplit з бібліотеки scikit-learn. Я використав значення за замовчуванням для розміру навчальної вибірки 0.25. Також я встановив фіксовану випадкову величину, щоб отримувати однакові результати кожного разу при запуску моделі.
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
mpg_model = DecisionTreeRegressor(random_state = 1)
mpg_model.fit(X_train, y_train)
Прогнозування
Далі я запустив свою модель на тестових даних, щоб побачити, як вона працює. Нижче наведено невеликий приклад перших 5 значень прогнозованих результатів порівняно з фактичними результатами. Прогнози досить близькі, але могли б бути точнішими з деякими налаштуваннями.
# Прогнози
[20., 25., 34., 18., 32.]
# Фактичні
[23.0, 29.0, 32.4, 19.0, 38.0]
Оцінка
Перед тим, як вносити корективи до моєї моделі, я хотів побачити, наскільки вона точна. Для цього я імпортував модуль середньої абсолютної помилки (Mean Absolute Error) з бібліотеки scikit-learn. MAE для моєї моделі становить близько 2.7 миль на галон.
mean_absolute_error(predicted_mpg, y_test)
# MAE = 2.7081632653061223
Після того, як я зрозумів, як працює моя модель, я захотів подивитися, як змінюється MAE для різних значень максимального числа листів дерева. Це допомогло мені уникнути перенавчання або недонавчання моделі. Я створив функцію, яка навчає модель, робить прогнози та надає MAE як результат. Потім я створив список чисел листів, які я хотів спробувати. Останнім кроком було створення циклу для ітерації через цей список.
def model_fit(i, X_train, X_test, y_train, y_test):
mpg_model = DecisionTreeRegressor(random_state = 1, max_leaf_nodes = i)
mpg_model.fit(X_train, y_train)
predicted_mpg = mpg_model.predict(X_test)
mae = mean_absolute_error(predicted_mpg, y_test)
return mae
test_max_leaf_nodes = [5, 7, 10, 50, 100, 200, 500, 1000, 1200]
for i in test_max_leaf_nodes:
print(f'Кількість листів: {i}' + '\t\t' + f'MAE: {model_fit(i, X_train, X_test, y_train, y_test)}')
За результатами цього тесту модель мала нижчий MAE до внесення змін у максимальну кількість листів дерева.
Отже, немає необхідності встановлювати максимальну кількість листів дерева при визначенні моделі.
Кількість листів: 5 MAE: 3.7785880136026533
Кількість листів: 7 MAE: 2.9268086417557946
Кількість листів: 10 MAE: 2.7787139753177907
Кількість листів: 50 MAE: 2.823143003612928
Кількість листів: 100 MAE: 2.7875630208793476
Кількість листів: 200 MAE: 2.7989795918367344
Кількість листів: 500 MAE: 2.805102040816326
Кількість листів: 1000 MAE: 2.805102040816326
Кількість листів: 1200 MAE: 2.805102040816326
Висновок
Це був мій перший проект з машинного навчання. Це чудовий вступ до Scikit Learn. Мені вдалося прогнозувати витрату палива на милю для автомобіля з точністю до 2.7 миль на галон. Щоб покращити цю модель, я міг би отримати більший набір даних з більшою кількістю рядків. Інформація про більше автомобілів дозволила б зробити прогнози точнішими, оскільки це зменшило б шанс на наявність упереджень у наборі даних. Я також міг би спробувати відтворити модель, використовуючи інший тип машинного навчання.
Перекладено з: Decision Tree Model To Predict a Cars MPGs