Merge pull request 'arzamaskina_milana_lab_5 is ready' (#241) from arzamaskina_milana_lab_5 into main
Reviewed-on: http://student.git.athene.tech/Alexey/IIS_2023_1/pulls/241
This commit is contained in:
commit
20d650e987
63105
arzamaskina_milana_lab_5/CO2.csv
Normal file
63105
arzamaskina_milana_lab_5/CO2.csv
Normal file
File diff suppressed because it is too large
Load Diff
84
arzamaskina_milana_lab_5/README.md
Normal file
84
arzamaskina_milana_lab_5/README.md
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
# Лабораторная работа №5
|
||||||
|
|
||||||
|
## Регрессия
|
||||||
|
|
||||||
|
#### ПИбд-41 Арзамаскина Милана
|
||||||
|
#### Вариант №2
|
||||||
|
|
||||||
|
## Задание:
|
||||||
|
|
||||||
|
Использовать регрессию по варианту для данных из таблицы 1 по варианту (таблица 10),
|
||||||
|
самостоятельно сформулировав задачу.
|
||||||
|
Оценить, насколько хорошо она подходит для решения сформулированной вами задачи.
|
||||||
|
|
||||||
|
Задача по варианту №2: с помощью логистической регрессии.
|
||||||
|
|
||||||
|
Дополнительно: с помощью полиномиальной регрессии 3 степени. Сравнение моделей.
|
||||||
|
|
||||||
|
#### Формулировка задачи:
|
||||||
|
Предсказание доли выбросов CO2 промышленной деятельностью
|
||||||
|
от общего объёма выбросов CO2 страной в определённый год.
|
||||||
|
|
||||||
|
## Данные:
|
||||||
|
|
||||||
|
Этот набор данных обеспечивает углубленный анализ глобальных выбросов CO2 на уровне страны, позволяя лучше понять,
|
||||||
|
какой вклад каждая страна вносит в глобальное совокупное воздействие человека на климат.
|
||||||
|
Он содержит информацию об общих выбросах, а также от добычи и сжигания угля, нефти, газа, цемента и других источников.
|
||||||
|
Данные также дают разбивку выбросов CO2 на душу населения по странам, показывая,
|
||||||
|
какие страны лидируют по уровням загрязнения, и определяют потенциальные области,
|
||||||
|
где следует сосредоточить усилия по сокращению выбросов.
|
||||||
|
Этот набор данных необходим всем, кто хочет получить информацию о своем воздействии на окружающую среду
|
||||||
|
или провести исследование тенденций международного развития.
|
||||||
|
|
||||||
|
Данные организованы с использованием следующих столбцов:
|
||||||
|
|
||||||
|
+ Country: название страны
|
||||||
|
+ ISO 3166-1 alpha-3: трехбуквенный код страны
|
||||||
|
+ Year: год данных исследования
|
||||||
|
+ Total: общее количество CO2, выброшенный страной в этом году
|
||||||
|
+ Coal: количество CO2, выброшенное углем в этом году
|
||||||
|
+ Oil: количество выбросов нефти
|
||||||
|
+ Gas: количество выбросов газа
|
||||||
|
+ Cement: количество выбросов цемента
|
||||||
|
+ Flaring: сжигание на факелах уровни выбросов
|
||||||
|
+ Other: другие формы, такие как промышленные процессы
|
||||||
|
+ Per Capita: столбец «на душу населения»
|
||||||
|
|
||||||
|
|
||||||
|
### Какие технологии использовались:
|
||||||
|
|
||||||
|
Используемые библиотеки:
|
||||||
|
* pandas
|
||||||
|
* math
|
||||||
|
* sklearn
|
||||||
|
|
||||||
|
|
||||||
|
### Как запустить:
|
||||||
|
|
||||||
|
* установить python, sklearn, pandas, math
|
||||||
|
* запустить проект (стартовая точка - main.py)
|
||||||
|
|
||||||
|
### Что делает программа:
|
||||||
|
|
||||||
|
* Загружает набор данных из файла 'CO2.csv', который содержит информацию о выбросах странами CO2 в год от различной промышленной деятельности.
|
||||||
|
* Очищает набор данных путём удаления строк с нулевыми значениями и глобальными значениями по всем странам (строки 'Global') из набора.
|
||||||
|
* Добавляет в набор столбец с хеш-кодом наименования страны.
|
||||||
|
* Добавляет в набор столбец 'procent other' - процент выбросов в процессе промышленной деятельности от общего объема выбросов страны за год.
|
||||||
|
* Выбирает набор признаков (features) из данных, которые будут использоваться для обучения моделей регрессии.
|
||||||
|
* Определяет задачу регрессии, где целевой переменной (task) является 'procent other'.
|
||||||
|
* Делит данные на обучающий и тестовый наборы для обеих задач с использованием функции train_test_split. Тестовый набор составляет 1% от исходных данных.
|
||||||
|
* Создает и обучает модели регрессии LogisticRegression и PolynomialFeatures.
|
||||||
|
* Предсказывает значения целевой переменной на тестовых наборах.
|
||||||
|
* Оценивает качество моделей с помощью среднеквадратичной ошибки.
|
||||||
|
|
||||||
|
|
||||||
|
#### Результаты работы программы:
|
||||||
|
|
||||||
|
![Result](img.png)
|
||||||
|
|
||||||
|
### Вывод:
|
||||||
|
|
||||||
|
Среднеквадратичная ошибка полиномиальной модели равна 0.37, логистической - 2.35.
|
||||||
|
Следовательно, полиномиальная модель предсказывает долю выбросов промышленной деятельностью
|
||||||
|
от общего объёма выбросов CO2 страной в определённый год более точно
|
||||||
|
и лучше всего соответствовует данному набору данных из двух потенциальных моделей.
|
BIN
arzamaskina_milana_lab_5/img.png
Normal file
BIN
arzamaskina_milana_lab_5/img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 72 KiB |
70
arzamaskina_milana_lab_5/main.py
Normal file
70
arzamaskina_milana_lab_5/main.py
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import math
|
||||||
|
import pandas as pd
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.pipeline import make_pipeline
|
||||||
|
from sklearn.preprocessing import PolynomialFeatures
|
||||||
|
from sklearn.linear_model import LogisticRegression, LinearRegression
|
||||||
|
from sklearn.metrics import mean_squared_error
|
||||||
|
|
||||||
|
# По варианту 2:
|
||||||
|
# предсказание доли выбросов CO2 промышленной деятельностью
|
||||||
|
# от общего объёма выбросов CO2 страной в определённый год
|
||||||
|
# с помощью логистической регрессии
|
||||||
|
|
||||||
|
# Дополнительно: с помощью полиномиальной регрессии 3 степени
|
||||||
|
|
||||||
|
# Загружаем данные из файла
|
||||||
|
data = pd.read_csv('CO2.csv')
|
||||||
|
data = data.dropna()
|
||||||
|
data = data[data.Country != 'Global']
|
||||||
|
|
||||||
|
# Хеширование наименований стран
|
||||||
|
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_other = []
|
||||||
|
others = []
|
||||||
|
totals = []
|
||||||
|
for other in data['Other']:
|
||||||
|
others.append(other)
|
||||||
|
for total in data['Total']:
|
||||||
|
totals.append(total)
|
||||||
|
for i in range(len(others)):
|
||||||
|
procent_other.append(math.ceil(others[i]/totals[i]*100))
|
||||||
|
data.insert(loc=0, column='procent other', value=procent_other)
|
||||||
|
|
||||||
|
# Необходимые признаки
|
||||||
|
features = data[['Total', 'hashcode', 'Year']]
|
||||||
|
|
||||||
|
# Задача логистической регрессии
|
||||||
|
task = data['procent other']
|
||||||
|
|
||||||
|
# Разделение данных на обучающую и тестовую выборки
|
||||||
|
X_train, X_test, y_train, y_test = train_test_split(features, task, test_size=0.01, random_state=5)
|
||||||
|
|
||||||
|
# Применение логистической регрессии
|
||||||
|
model_logic = LogisticRegression(max_iter=1000)
|
||||||
|
model_logic.fit(X_train, y_train)
|
||||||
|
|
||||||
|
# Предсказание на тестовых данных
|
||||||
|
y_pred_logic = model_logic.predict(X_test)
|
||||||
|
|
||||||
|
# Полиномиальная регрессия (degree=3)
|
||||||
|
model_poly = make_pipeline(PolynomialFeatures(degree=3), LinearRegression())
|
||||||
|
model_poly.fit(X_train, y_train)
|
||||||
|
|
||||||
|
# Предсказание на тестовых данных
|
||||||
|
y_pred_poly = model_poly.predict(X_test)
|
||||||
|
|
||||||
|
# Оценка регрессионных моделей
|
||||||
|
poly_mse = mean_squared_error(y_test, y_pred_poly)
|
||||||
|
logic_mse = mean_squared_error(y_test, y_pred_logic)
|
||||||
|
|
||||||
|
print('Среднеквадратичная ошибка полиномиальной регрессии:', poly_mse)
|
||||||
|
print('Среднеквадратичная ошибка логистической регрессии:', logic_mse)
|
Loading…
Reference in New Issue
Block a user