lab5 ready
This commit is contained in:
parent
a8c58683dd
commit
7bc6bb8aa8
70
malkova_anastasia_lab_6/README.md
Normal file
70
malkova_anastasia_lab_6/README.md
Normal file
@ -0,0 +1,70 @@
|
||||
# Лабораторная работа №6
|
||||
|
||||
> Нейронная сеть
|
||||
|
||||
### Как запустить лабораторную работу
|
||||
|
||||
1. Установить python, numpy, sklearn
|
||||
1. Запустить команду `python main.py` в корне проекта
|
||||
|
||||
### Использованные технологии
|
||||
|
||||
* Язык программирования `python`
|
||||
* Библиотеки `numpy, sklearn`
|
||||
* Среда разработки `PyCharm`
|
||||
|
||||
### Что делает программа?
|
||||
|
||||
Цель программы: на основе данных об автомобилях на вторичном рынке обучить модель нейронной сети MLPRegressor
|
||||
на предсказание цены.
|
||||
|
||||
Модель: MLPRegressor
|
||||
|
||||
Выбранные признаки:
|
||||
|
||||
- year
|
||||
- mileage
|
||||
- state
|
||||
|
||||
#### Сеть из 1 слоя в 20 нейронов
|
||||
|
||||
Обучение на 2 вариантах random state
|
||||
|
||||
Оценки качества по MAPE:
|
||||
|
||||
min: 91.89810260464559
|
||||
median: 91.91394036274613
|
||||
max: 91.92977812084669
|
||||
std: 0.015837758100552435
|
||||
|
||||
Выводы: качество хорошее, но всё ещё есть доля ошибки. При этом разброс оценок качества 0.01 процента показывает,
|
||||
что random state не сильно влияет на итоговое качество модели.
|
||||
|
||||
Обучение на 20 вариантах random state
|
||||
|
||||
min: 91.47984008974515
|
||||
median: 91.97261118318303
|
||||
max: 92.36410228588716
|
||||
std: 0.22711198255843948
|
||||
|
||||
Выводы: качество неудовлетворительное. Похоже на переобучение. Разброс всё ещё небольшой 0.2 показывает,
|
||||
что random state не сильно влияет на итоговое качество модели.
|
||||
|
||||
#### Сеть из 2 слоев по 20 нейронов
|
||||
|
||||
Обучение на 2 вариантах random state
|
||||
|
||||
min: 91.12873208155982
|
||||
median: 91.44458715556677
|
||||
max: 91.76044222957371
|
||||
std: 0.31585507400694723
|
||||
|
||||
Обучение на 20 вариантах random state
|
||||
|
||||
min: 90.17104509583521
|
||||
median: 91.85328507593465
|
||||
max: 92.43304446695873
|
||||
std: 0.5086054377534013
|
||||
|
||||
Выводы: Оптимальный результат 92.43%. Качество хорошее, но процент ошибки всё ещё большой.
|
||||
Поэтому для решения поставленной задачи MLPRegressor с предложенными параметрами не подходит.
|
1
malkova_anastasia_lab_6/config.py
Normal file
1
malkova_anastasia_lab_6/config.py
Normal file
@ -0,0 +1 @@
|
||||
DATA_SIZE = 1000
|
27
malkova_anastasia_lab_6/dataset.py
Normal file
27
malkova_anastasia_lab_6/dataset.py
Normal file
@ -0,0 +1,27 @@
|
||||
import pandas as pd
|
||||
from sklearn.model_selection import train_test_split
|
||||
|
||||
from config import DATA_SIZE
|
||||
|
||||
|
||||
def load_dataset():
|
||||
data = pd.read_csv('true_car_listings.csv')[:DATA_SIZE]
|
||||
|
||||
names = ['Year', 'Mileage', 'City', 'State', 'Vin', 'Make', 'Model']
|
||||
convert_to_num(data, 'City')
|
||||
convert_to_num(data, 'State')
|
||||
convert_to_num(data, 'Vin')
|
||||
convert_to_num(data, 'Make')
|
||||
convert_to_num(data, 'Model')
|
||||
Y = data['Price']
|
||||
X = data[names]
|
||||
|
||||
x_train, x_test, y_train, y_test = train_test_split(
|
||||
X, Y, test_size=0.05, random_state=42)
|
||||
|
||||
return x_train, x_test, y_train, y_test
|
||||
|
||||
|
||||
def convert_to_num(data, col):
|
||||
unique_numbers = list(set(data[col]))
|
||||
data[col] = data[col].apply(unique_numbers.index)
|
14
malkova_anastasia_lab_6/fit.py
Normal file
14
malkova_anastasia_lab_6/fit.py
Normal file
@ -0,0 +1,14 @@
|
||||
from sklearn.neural_network import MLPRegressor
|
||||
|
||||
from scores import MAPE
|
||||
|
||||
|
||||
def random_state_fit(i, x, y, x_test, y_test):
|
||||
mlr = MLPRegressor(random_state=i, max_iter=2000, n_iter_no_change=20,
|
||||
activation='relu', alpha=0.01, hidden_layer_sizes=[20, 20], tol=0.0000001)
|
||||
mlr.fit(x, y)
|
||||
y_pred = mlr.predict(x_test)
|
||||
acc = 100 - MAPE(y_test, y_pred)
|
||||
print('random state', i, "\naccuracy", acc)
|
||||
|
||||
return acc
|
13
malkova_anastasia_lab_6/main.py
Normal file
13
malkova_anastasia_lab_6/main.py
Normal file
@ -0,0 +1,13 @@
|
||||
from dataset import load_dataset
|
||||
from fit import random_state_fit
|
||||
from statistic import statistic
|
||||
|
||||
x_train, x_test, y_train, y_test = load_dataset()
|
||||
|
||||
history = []
|
||||
|
||||
for i in range(2):
|
||||
acc = random_state_fit(i, x_train, y_train, x_test, y_test)
|
||||
history.append(acc)
|
||||
|
||||
statistic(history)
|
6
malkova_anastasia_lab_6/scores.py
Normal file
6
malkova_anastasia_lab_6/scores.py
Normal file
@ -0,0 +1,6 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
def MAPE(Y_actual, Y_Predicted):
|
||||
mape = np.mean(np.abs((Y_actual - Y_Predicted)/Y_actual))*100
|
||||
return mape
|
21
malkova_anastasia_lab_6/statistic.py
Normal file
21
malkova_anastasia_lab_6/statistic.py
Normal file
@ -0,0 +1,21 @@
|
||||
import numpy as np
|
||||
|
||||
|
||||
def statistic(data):
|
||||
data_min = min(data)
|
||||
print('min:', data_min)
|
||||
|
||||
data_median = median(data)
|
||||
print('median:', data_median)
|
||||
|
||||
data_max = max(data)
|
||||
print('max:', data_max)
|
||||
|
||||
data_std = np.std(data)
|
||||
print('std:', data_std)
|
||||
|
||||
return data_min, data_median, data_max, data_std
|
||||
|
||||
|
||||
def median(list):
|
||||
return np.median(np.array(list))
|
852123
malkova_anastasia_lab_6/true_car_listings.csv
Normal file
852123
malkova_anastasia_lab_6/true_car_listings.csv
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user