IIS_2023_1/arzamaskina_milana_lab_3/main.py

96 lines
4.3 KiB
Python
Raw Normal View History

2023-12-01 22:12:53 +04:00
import math
import pandas as pd
from sklearn.tree import DecisionTreeClassifier, DecisionTreeRegressor
from sklearn.model_selection import train_test_split
### Деревья решений для регрессии и классификации
### с использованием моделей DecisionTreeRegressor и DecisionTreeClassifier
# Загрузка данных
data = pd.read_csv('CO2.csv')
data = data.dropna()
# Хеширование наименований стран
countries = {}
for country in data['Country']:
countries[country] = hash(country)
hash_column = []
for country in data['Country']:
hash_column.append(countries[country])
data.insert(loc=0, column='hashcode', value=hash_column)
# Добавление колонки "процент выбросов от добычи нефти в стране за год" для классификации
procent_oil = []
oils = []
totals = []
for oil in data['Oil']:
oils.append(oil)
for total in data['Total']:
totals.append(total)
for i in range(len(oils)):
procent_oil.append(math.ceil(oils[i]/totals[i]*100))
data.insert(loc=0, column='procent oil', value=procent_oil)
#------ Дерево решений для регрессии ------#
# ЗАДАЧА: предсказание общего объема выбросов СО2 страной за определённый год.
# Необходимые признаки для дерева регрессии
features_for_regr = data[['Year', 'hashcode']]
# Задача дерева регрессии
task_regr = data['Total']
# Разделение данных на обучающий и тестовый наборы для регрессии
X_train_r, X_test_r, \
y_train_r, y_test_r = train_test_split(features_for_regr, task_regr, test_size=0.01, random_state=250)
# Создание и обучение дерева решений для регрессии
model_regr = DecisionTreeRegressor(random_state=250)
model_regr.fit(X_train_r, y_train_r)
# Предсказание на тестовом наборе для регрессии
y_pred_r = model_regr.predict(X_test_r)
# Точечная оценка модели
score_r = model_regr.score(X_test_r, y_test_r)
print("\n\nТочность дерева регрессии:", score_r)
# Важности признаков для дерева регрессии
imp_regr = model_regr.feature_importances_
print("Важность признаков для дерева регрессии: ")
print("Важность 'Year':", imp_regr[0])
print("Важность 'hashcode':", imp_regr[1], "\n\n")
#------ Дерево решений для классификации ------#
# ЗАДАЧА: предсказание процента выбросов СО2 от добычи нефти страной за определённый год
# с учётом общего объёма выбросов за год (или: какая часть выбросов придётся на добычу нефти).
# Необходимые признаки для дерева классификации
features_for_class = data[['Total', 'Year', 'hashcode']]
# Задача дерева классификации
task_class = data['procent oil']
# Разделение данных на обучающий и тестовый наборы для классификации
X_train_c, X_test_c, \
y_train_c, y_test_c = train_test_split(features_for_class, task_class, test_size=0.01, random_state=250)
# Создание и обучение дерева решений для классификации
model_class = DecisionTreeClassifier(random_state=250)
model_class.fit(X_train_c, y_train_c)
# Предсказание на тестовом наборе для классификации
y_pred_c = model_class.predict(X_test_c)
# Точечная оценка модели
score_c = model_class.score(X_test_c, y_test_c)
print("Точность дерева классификации:", score_c)
# Важности признаков для дерева классификации
imp_class = model_class.feature_importances_
print("Важность признаков для дерева классификации: ")
print("Важность 'Total':", imp_class[0])
print("Важность 'Year':", imp_class[1])
print("Важность 'hashcode':", imp_class[2])