Compare commits
1 Commits
senkin_ale
...
alexandrov
| Author | SHA1 | Date | |
|---|---|---|---|
| b0accdaf06 |
6
.idea/IIS_2023_1.iml
generated
6
.idea/IIS_2023_1.iml
generated
@@ -1,10 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$">
|
||||
<excludeFolder url="file://$MODULE_DIR$/venv" />
|
||||
</content>
|
||||
<orderEntry type="jdk" jdkName="Python 3.9 (PyCharmProjects)" jdkType="Python SDK" />
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.8 (venv)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
||||
5
.idea/misc.xml
generated
5
.idea/misc.xml
generated
@@ -1,9 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="Black">
|
||||
<option name="sdkName" value="Python 3.9 (PyCharmProjects)" />
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.9 (PyCharmProjects)" project-jdk-type="Python SDK" />
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.8 (venv)" project-jdk-type="Python SDK" />
|
||||
<component name="PyCharmProfessionalAdvertiser">
|
||||
<option name="shown" value="true" />
|
||||
</component>
|
||||
|
||||
42
.idea/workspace.xml
generated
42
.idea/workspace.xml
generated
@@ -5,8 +5,6 @@
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="0ceb130e-88da-4a20-aad6-17f5ab4226ac" name="Changes" comment="">
|
||||
<change beforePath="$PROJECT_DIR$/.idea/IIS_2023_1.iml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/IIS_2023_1.iml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/misc.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/misc.xml" afterDir="false" />
|
||||
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
@@ -36,9 +34,6 @@
|
||||
"associatedIndex": 2
|
||||
}</component>
|
||||
<component name="ProjectId" id="2VlZqWiOX68aCf0o2y0AtYJWURS" />
|
||||
<component name="ProjectLevelVcsManager">
|
||||
<ConfirmationsSetting value="1" id="Add" />
|
||||
</component>
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
@@ -47,16 +42,8 @@
|
||||
"keyToString": {
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"WebServerToolWindowFactoryState": "false",
|
||||
"git-widget-placeholder": "senkin__alexander__lab__1",
|
||||
"last_opened_file_path": "D:/ulstukek/Course4/IIS/labs",
|
||||
"node.js.detected.package.eslint": "true",
|
||||
"node.js.detected.package.tslint": "true",
|
||||
"node.js.selected.package.eslint": "(autodetect)",
|
||||
"node.js.selected.package.tslint": "(autodetect)",
|
||||
"nodejs_package_manager_path": "npm",
|
||||
"settings.editor.selected.configurable": "reference.settings.ide.settings.new.ui",
|
||||
"vue.rearranger.settings.migration": "true"
|
||||
"settings.editor.selected.configurable": "reference.settings.ide.settings.new.ui"
|
||||
}
|
||||
}</component>
|
||||
<component name="RecentsManager">
|
||||
@@ -65,7 +52,7 @@
|
||||
<recent name="D:\ulstukek\Course4\IIS\IISLabs\IIS_2023_1\zavrazhnova_svetlana_lab_1" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<component name="RunManager" selected="Python.zavrazhnova_svetlana_lab3_2">
|
||||
<configuration name="zavrazhnova_svetlana_lab3_2" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
||||
<module name="IIS_2023_1" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
@@ -78,7 +65,6 @@
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_3/zavrazhnova_svetlana_lab3_2.py" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
@@ -100,7 +86,6 @@
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_2/zavrazhnova_svetlana_lab_2.py" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
@@ -122,7 +107,6 @@
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<EXTENSION ID="PythonCoverageRunConfigurationExtension" runner="coverage.py" />
|
||||
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_3/zavrazhnova_svetlana_lab_3_1.py" />
|
||||
<option name="PARAMETERS" value="" />
|
||||
<option name="SHOW_COMMAND_LINE" value="false" />
|
||||
@@ -150,38 +134,18 @@
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1695412818437</updated>
|
||||
<workItem from="1697735437405" duration="1706000" />
|
||||
<workItem from="1697740229646" duration="3802000" />
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="TypeScriptGeneratedFilesManager">
|
||||
<option name="version" value="3" />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State>
|
||||
<option name="FILTERS">
|
||||
<map>
|
||||
<entry key="branch">
|
||||
<value>
|
||||
<list>
|
||||
<option value="HEAD" />
|
||||
</list>
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</State>
|
||||
<State />
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
<component name="com.intellij.coverage.CoverageDataManagerImpl">
|
||||
<SUITE FILE_PATH="coverage/PyCharmProjects$senkin_alexander_lab_1.coverage" NAME="senkin_alexander_lab_1 Coverage Results" MODIFIED="1697744262965" SOURCE_PROVIDER="com.intellij.coverage.DefaultCoverageFileProvider" RUNNER="coverage.py" COVERAGE_BY_TEST_ENABLED="true" COVERAGE_TRACING_ENABLED="false" WORKING_DIRECTORY="$PROJECT_DIR$/senkin_alexander_lab_1" />
|
||||
</component>
|
||||
</project>
|
||||
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
Binary file not shown.
|
Before Width: | Height: | Size: 36 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB |
@@ -1,38 +0,0 @@
|
||||
Вариант 2
|
||||
|
||||
Задание на лабораторную работу:
|
||||
|
||||
По данным построить графики 3 моделей:
|
||||
|
||||
- Линейную регрессию
|
||||
- Полиномиальную регрессию (со степенью 3)
|
||||
- Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0)
|
||||
|
||||
Данные: make_circles (noise=0.2, factor=0.5, random_state=rs)
|
||||
|
||||
Как запустить лабораторную работу:
|
||||
|
||||
Чтобы увидеть работу программы, нужно запустить исполняемый питон файл senkin_alexander_lab_1.py, после чего будут отрисованы 3 графика, которые также можно увидеть в формате png в папке проекта.
|
||||
|
||||
Библиотеки
|
||||
|
||||
Matplotlib. Используется для создания графиков.
|
||||
|
||||
Sklearn. Предоставляет инструменты и алгоритмы, которые упрощают задачи, связанные с машинным обучением.
|
||||
|
||||
Описание программы:
|
||||
|
||||
- Генерируем набор данных из 100 точек данных используя функцию make_circles
|
||||
- С помощью функции train_test_split разделяем данные на тестовые и обучающие в соотношении 20 к 80
|
||||
- Создаем 3 модели:
|
||||
- Линейную регрессию
|
||||
- Полиномиальную регрессию (со степенью 3)
|
||||
- Гребневую полиномиальную регрессию (со степенью 3, alpha = 1.0)
|
||||
- Модели используем для предсказания классов с помощью метода predict
|
||||
- Оцениваем точность каждой модели
|
||||
- Строим графики для визуального представления и оценивая работ моделей
|
||||
- Сравниваем точности моделей и выбираем наиболее точную
|
||||
|
||||

|
||||
|
||||
Изходя из результатов: Линейная - 0.30, Полиномиальная - 0.45, Гребневая полиномиальная - 0.47, делаем вывод, что наиболее точная модель - Гребневая полиномиальная.
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 38 KiB |
@@ -1,60 +0,0 @@
|
||||
import matplotlib.pyplot as plt
|
||||
from sklearn.datasets import make_circles
|
||||
from sklearn.linear_model import LinearRegression
|
||||
from sklearn.linear_model import Ridge
|
||||
from sklearn.metrics import r2_score
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.preprocessing import PolynomialFeatures
|
||||
|
||||
# Создаем данные
|
||||
rs = 42 #желаемый random_state
|
||||
X, y = make_circles(n_samples=100, noise=0.2, factor=0.5, random_state=rs)
|
||||
|
||||
# Разделяем данные на обучающий и тестовый наборы
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=rs)
|
||||
|
||||
# Обучаем модели
|
||||
# Линейная регрессия
|
||||
lr = LinearRegression()
|
||||
lr.fit(X_train, y_train)
|
||||
y_lr_pred = lr.predict(X_test)
|
||||
r2_lr = r2_score(y_test, y_lr_pred)
|
||||
|
||||
# Полиномиальная регрессия с полиномом 3-й степени
|
||||
poly = PolynomialFeatures(degree=3)
|
||||
X_poly = poly.fit_transform(X_train)
|
||||
lr_poly = LinearRegression()
|
||||
lr_poly.fit(X_poly, y_train)
|
||||
X_test_poly = poly.transform(X_test)
|
||||
y_poly_pred = lr_poly.predict(X_test_poly)
|
||||
r2_poly = r2_score(y_test, y_poly_pred)
|
||||
|
||||
# Гребневая полиномиальная регрессия с полиномом 3-й степени и alpha = 1.0
|
||||
ridge = Ridge(alpha=1.0)
|
||||
ridge.fit(X_poly, y_train)
|
||||
y_ridge_pred = ridge.predict(X_test_poly)
|
||||
r2_ridge = r2_score(y_test, y_ridge_pred)
|
||||
|
||||
# Функция для отображения точек на графике
|
||||
def plot_with_labels(X, y, title, xlabel, ylabel):
|
||||
plt.figure(figsize=(12, 6))
|
||||
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='viridis', marker='.', label='Тестовые данные')
|
||||
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap='viridis', marker='o', edgecolors='black', linewidths=0.5, label='Обучающие данные')
|
||||
plt.title(title)
|
||||
plt.xlabel(xlabel)
|
||||
plt.ylabel(ylabel)
|
||||
plt.legend()
|
||||
plt.show()
|
||||
|
||||
|
||||
# График для линейной регрессии
|
||||
plot_with_labels(X_test, y_lr_pred, 'Линейная регрессия', 'Признак 1', 'Признак 2')
|
||||
print(f'Линейная регрессия - Точность: {r2_lr:.2f}')
|
||||
|
||||
# График для полиномиальной регрессии
|
||||
plot_with_labels(X_test, y_poly_pred, 'Полиномиальная регрессия', 'Признак 1', 'Признак 2')
|
||||
print(f'Полиномиальная регрессия - Точность: {r2_poly:.2f}')
|
||||
|
||||
# График для гребневой полиномиальной регрессии
|
||||
plot_with_labels(X_test, y_ridge_pred, 'Гребневая полиномиальная регрессия', 'Признак 1', 'Признак 2')
|
||||
print(f'Гребневая полиномиальная регрессия - Точность: {r2_ridge:.2f}')
|
||||
Reference in New Issue
Block a user