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