96 lines
4.3 KiB
Python
96 lines
4.3 KiB
Python
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]) |