alexandrov_dmitrii_lab_6 ready #72
76
alexandrov_dmitrii_lab_6/lab6.py
Normal file
76
alexandrov_dmitrii_lab_6/lab6.py
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
from matplotlib import pyplot as plt
|
||||||
|
from sklearn.model_selection import train_test_split
|
||||||
|
from sklearn.neural_network import MLPClassifier
|
||||||
|
import pandas as pd
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
data = pd.read_csv('sberbank_data.csv', index_col='id')
|
||||||
|
x = data[['timestamp', 'full_sq', 'floor', 'max_floor', 'build_year', 'num_room', 'material', 'kremlin_km']]
|
||||||
|
|
||||||
|
x = x.replace('NA', 0)
|
||||||
|
x.fillna(0, inplace=True)
|
||||||
|
|
||||||
|
col_date = []
|
||||||
|
|
||||||
|
for val in x['timestamp']:
|
||||||
|
col_date.append(val.split('-', 1)[0])
|
||||||
|
|
||||||
|
x = x.drop(columns='timestamp')
|
||||||
|
x['timestamp'] = col_date
|
||||||
|
|
||||||
|
y = []
|
||||||
|
for val in data['price_doc']:
|
||||||
|
if val < 1500000:
|
||||||
|
y.append('low')
|
||||||
|
elif val < 3000000:
|
||||||
|
y.append('medium')
|
||||||
|
elif val < 5500000:
|
||||||
|
y.append('high')
|
||||||
|
elif val < 10000000:
|
||||||
|
y.append('premium')
|
||||||
|
else:
|
||||||
|
y.append('oligarch')
|
||||||
|
|
||||||
|
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.01, random_state=42)
|
||||||
|
|
||||||
|
min_scores = []
|
||||||
|
med_scores = []
|
||||||
|
max_scores = []
|
||||||
|
|
||||||
|
|
||||||
|
def do_test(iters_num):
|
||||||
|
global x_train, x_test, y_train, y_test, min_scores, med_scores, max_scores
|
||||||
|
|
||||||
|
print("Testing iterations number "+str(iters_num)+":")
|
||||||
|
scores = []
|
||||||
|
|
||||||
|
for i in range(10):
|
||||||
|
neuro = MLPClassifier(max_iter=200)
|
||||||
|
neuro.fit(x_train, y_train)
|
||||||
|
scr = neuro.score(x_test, y_test)
|
||||||
|
print("res"+str(i+1)+": "+str(scr))
|
||||||
|
scores.append(scr)
|
||||||
|
|
||||||
|
print("Medium result: "+str(np.mean(scores)))
|
||||||
|
|
||||||
|
min_scores.append(np.min(scores))
|
||||||
|
med_scores.append(np.mean(scores))
|
||||||
|
max_scores.append(np.max(scores))
|
||||||
|
|
||||||
|
|
||||||
|
def start():
|
||||||
|
global min_scores, med_scores, max_scores
|
||||||
|
|
||||||
|
iter_nums = [200, 400, 600, 800, 1000]
|
||||||
|
|
||||||
|
for num in iter_nums:
|
||||||
|
do_test(num)
|
||||||
|
|
||||||
|
plt.figure(1, figsize=(16, 9))
|
||||||
|
plt.plot(iter_nums, min_scores, c='r')
|
||||||
|
plt.plot(iter_nums, med_scores, c='b')
|
||||||
|
plt.plot(iter_nums, max_scores, c='b')
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
start()
|
149
alexandrov_dmitrii_lab_6/readme.md
Normal file
149
alexandrov_dmitrii_lab_6/readme.md
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
### Задание
|
||||||
|
Использовать нейронную сеть по варианту для выбранных данных по варианту, самостоятельно сформулировав задачу.
|
||||||
|
Интерпретировать результаты и оценить, насколько хорошо она подходит для
|
||||||
|
решения сформулированной вами задачи.
|
||||||
|
|
||||||
|
Вариант 1: MLPClassifier
|
||||||
|
|
||||||
|
Была сформулирована следующая задача: необходимо классифицировать жильё по стоимости на основе избранных признаков при помощи нейронной сети.
|
||||||
|
|
||||||
|
### Запуск программы
|
||||||
|
Файл lab6.py содержит и запускает программу, аргументов и настройки ~~вроде~~ не требует.
|
||||||
|
|
||||||
|
### Описание программы
|
||||||
|
Программа считывает цены на жильё как выходные данные и следующие данные как входные: год размещения объявления, площадь, этаж, количество этажей, год постройки, количество комнат, материал, расстояние до кремля (условного центра).
|
||||||
|
Далее она обрабатывает данные (цифровизирует нулевые данные), оставляет только год объявления. Цены распределяются по пяти классам.
|
||||||
|
|
||||||
|
После обработки программа делит данные на 99% обучающего материала и 1% тестового.
|
||||||
|
Эти данные обрабатываются по 10 раз для идентичных моделей нейронных сетей, использующих метод градиентного спуска "adam", с разной настройкой максимального количества поколений: 200, 400, 600, 800, 1000.
|
||||||
|
Считаются оценка модели. Для каждой модели запоминаются минимальный, максимальный и средний результаты. В консоль выводятся все результаты.
|
||||||
|
В конце программа показывает графики зависимости результатов от максимального количества поколений модели.
|
||||||
|
|
||||||
|
### Результаты тестирования
|
||||||
|
По результатам тестирования, можно сказать следующее:
|
||||||
|
* В общем, модель даёт средний результат в районе 40-50% точности, что недостаточно.
|
||||||
|
* Увеличение максимального количества поколений влияет сильнее всего на минимальные оценки, сужая разброс точности.
|
||||||
|
* Нельзя сказать, что увеличение максимального количества поколений сильно улучшит модель: максимум на 10% точности.
|
||||||
|
|
||||||
|
Пример консольного вывода:
|
||||||
|
>Testing iterations number 200:
|
||||||
|
>
|
||||||
|
>res1: 0.3806228373702422
|
||||||
|
>
|
||||||
|
>res2: 0.6055363321799307
|
||||||
|
>
|
||||||
|
>res3: 0.4809688581314879
|
||||||
|
>
|
||||||
|
>res4: 0.4913494809688581
|
||||||
|
>
|
||||||
|
>res5: 0.4844290657439446
|
||||||
|
>
|
||||||
|
>res6: 0.2975778546712803
|
||||||
|
>
|
||||||
|
>res7: 0.48788927335640137
|
||||||
|
>
|
||||||
|
>res8: 0.06228373702422145
|
||||||
|
>
|
||||||
|
>res9: 0.6193771626297578
|
||||||
|
>
|
||||||
|
>res10: 0.47750865051903113
|
||||||
|
>
|
||||||
|
>Medium result: 0.4387543252595155
|
||||||
|
>
|
||||||
|
>Testing iterations number 400:
|
||||||
|
>
|
||||||
|
>res1: 0.6124567474048442
|
||||||
|
>
|
||||||
|
>res2: 0.4290657439446367
|
||||||
|
>
|
||||||
|
>res3: 0.3217993079584775
|
||||||
|
>
|
||||||
|
>res4: 0.5467128027681661
|
||||||
|
>
|
||||||
|
>res5: 0.48788927335640137
|
||||||
|
>
|
||||||
|
>res6: 0.40484429065743943
|
||||||
|
>
|
||||||
|
>res7: 0.6020761245674741
|
||||||
|
>
|
||||||
|
>res8: 0.4186851211072664
|
||||||
|
>
|
||||||
|
>res9: 0.42214532871972316
|
||||||
|
>
|
||||||
|
>res10: 0.370242214532872
|
||||||
|
>
|
||||||
|
>Medium result: 0.46159169550173
|
||||||
|
>
|
||||||
|
>Testing iterations number 600:
|
||||||
|
>
|
||||||
|
>res1: 0.4359861591695502
|
||||||
|
>
|
||||||
|
>res2: 0.2560553633217993
|
||||||
|
>
|
||||||
|
>res3: 0.5363321799307958
|
||||||
|
>
|
||||||
|
>res4: 0.5778546712802768
|
||||||
|
>
|
||||||
|
>res5: 0.35986159169550175
|
||||||
|
>
|
||||||
|
>res6: 0.356401384083045
|
||||||
|
>
|
||||||
|
>res7: 0.49480968858131485
|
||||||
|
>
|
||||||
|
>res8: 0.5121107266435986
|
||||||
|
>
|
||||||
|
>res9: 0.5224913494809689
|
||||||
|
>
|
||||||
|
>res10: 0.5190311418685121
|
||||||
|
>
|
||||||
|
>Medium result: 0.4570934256055363
|
||||||
|
>
|
||||||
|
>Testing iterations number 800:
|
||||||
|
>
|
||||||
|
>res1: 0.25951557093425603
|
||||||
|
>
|
||||||
|
>res2: 0.4083044982698962
|
||||||
|
>
|
||||||
|
>res3: 0.5224913494809689
|
||||||
|
>
|
||||||
|
>res4: 0.5986159169550173
|
||||||
|
>
|
||||||
|
>res5: 0.24567474048442905
|
||||||
|
>
|
||||||
|
>res6: 0.4013840830449827
|
||||||
|
>
|
||||||
|
>res7: 0.21453287197231835
|
||||||
|
>
|
||||||
|
>res8: 0.4671280276816609
|
||||||
|
>
|
||||||
|
>res9: 0.40484429065743943
|
||||||
|
>
|
||||||
|
>res10: 0.38408304498269896
|
||||||
|
>
|
||||||
|
>Medium result: 0.3906574394463667
|
||||||
|
>
|
||||||
|
>Testing iterations number 1000:
|
||||||
|
>
|
||||||
|
>res1: 0.4186851211072664
|
||||||
|
>
|
||||||
|
>res2: 0.5017301038062284
|
||||||
|
>
|
||||||
|
>res3: 0.5121107266435986
|
||||||
|
>
|
||||||
|
>res4: 0.3806228373702422
|
||||||
|
>
|
||||||
|
>res5: 0.44982698961937717
|
||||||
|
>
|
||||||
|
>res6: 0.5986159169550173
|
||||||
|
>
|
||||||
|
>res7: 0.5570934256055363
|
||||||
|
>
|
||||||
|
>res8: 0.4290657439446367
|
||||||
|
>
|
||||||
|
>res9: 0.32525951557093424
|
||||||
|
>
|
||||||
|
>res10: 0.41522491349480967
|
||||||
|
>
|
||||||
|
>Medium result: 0.4588235294117647
|
||||||
|
|
||||||
|
Итого: Для отобранных данных нейронная модель с методом градиентного спуска "adam" показала себя не лучшим образом. Возможно, другие методы могут выдать лучшие результаты, либо необходима более обширная модификация модели.
|
28896
alexandrov_dmitrii_lab_6/sberbank_data.csv
Normal file
28896
alexandrov_dmitrii_lab_6/sberbank_data.csv
Normal file
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user