Compare commits
3 Commits
5a2ec3e827
...
964a9042fa
Author | SHA1 | Date | |
---|---|---|---|
964a9042fa | |||
eeb3c15730 | |||
bbb46d3cd1 |
@ -1,92 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ChangeListManager">
|
||||
<list default="true" id="0ceb130e-88da-4a20-aad6-17f5ab4226ac" name="Changes" comment="">
|
||||
<change afterPath="$PROJECT_DIR$/zavrazhnova_svetlana_lab_2/result.png" afterDir="false" />
|
||||
</list>
|
||||
<option name="SHOW_DIALOG" value="false" />
|
||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||
<option name="LAST_RESOLUTION" value="IGNORE" />
|
||||
</component>
|
||||
<component name="FileTemplateManagerImpl">
|
||||
<option name="RECENT_TEMPLATES">
|
||||
<list>
|
||||
<option value="Python Script" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
<component name="Git.Settings">
|
||||
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
|
||||
</component>
|
||||
<component name="MarkdownSettingsMigration">
|
||||
<option name="stateVersion" value="1" />
|
||||
</component>
|
||||
<component name="ProjectId" id="2VlZqWiOX68aCf0o2y0AtYJWURS" />
|
||||
<component name="ProjectViewState">
|
||||
<option name="hideEmptyMiddlePackages" value="true" />
|
||||
<option name="showLibraryContents" value="true" />
|
||||
</component>
|
||||
<component name="PropertiesComponent"><![CDATA[{
|
||||
"keyToString": {
|
||||
"RunOnceActivity.OpenProjectViewOnStart": "true",
|
||||
"RunOnceActivity.ShowReadmeOnStart": "true",
|
||||
"last_opened_file_path": "D:/ulstukek/Course4/IIS/IISLabs/IIS_2023_1"
|
||||
}
|
||||
}]]></component>
|
||||
<component name="RecentsManager">
|
||||
<key name="CopyFile.RECENT_KEYS">
|
||||
<recent name="D:\ulstukek\Course4\IIS\IISLabs\IIS_2023_1\zavrazhnova_svetlana_lab_1" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager">
|
||||
<configuration name="zavrazhnova_svetlana_lab_2" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
|
||||
<module name="IIS_2023_1" />
|
||||
<option name="INTERPRETER_OPTIONS" value="" />
|
||||
<option name="PARENT_ENVS" value="true" />
|
||||
<envs>
|
||||
<env name="PYTHONUNBUFFERED" value="1" />
|
||||
</envs>
|
||||
<option name="SDK_HOME" value="" />
|
||||
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$/zavrazhnova_svetlana_lab_2" />
|
||||
<option name="IS_MODULE_SDK" value="true" />
|
||||
<option name="ADD_CONTENT_ROOTS" value="true" />
|
||||
<option name="ADD_SOURCE_ROOTS" value="true" />
|
||||
<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" />
|
||||
<option name="EMULATE_TERMINAL" value="false" />
|
||||
<option name="MODULE_MODE" value="false" />
|
||||
<option name="REDIRECT_INPUT" value="false" />
|
||||
<option name="INPUT_FILE" value="" />
|
||||
<method v="2" />
|
||||
</configuration>
|
||||
<recent_temporary>
|
||||
<list>
|
||||
<item itemvalue="Python.zavrazhnova_svetlana_lab_2" />
|
||||
</list>
|
||||
</recent_temporary>
|
||||
</component>
|
||||
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
||||
<component name="TaskManager">
|
||||
<task active="true" id="Default" summary="Default task">
|
||||
<changelist id="0ceb130e-88da-4a20-aad6-17f5ab4226ac" name="Changes" comment="" />
|
||||
<created>1695412818437</created>
|
||||
<option name="number" value="Default" />
|
||||
<option name="presentableId" value="Default" />
|
||||
<updated>1695412818437</updated>
|
||||
</task>
|
||||
<servers />
|
||||
</component>
|
||||
<component name="Vcs.Log.Tabs.Properties">
|
||||
<option name="TAB_STATES">
|
||||
<map>
|
||||
<entry key="MAIN">
|
||||
<value>
|
||||
<State />
|
||||
</value>
|
||||
</entry>
|
||||
</map>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
BIN
arutunyan_dmitry_lab_1/1.png
Normal file
BIN
arutunyan_dmitry_lab_1/1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 61 KiB |
BIN
arutunyan_dmitry_lab_1/2.png
Normal file
BIN
arutunyan_dmitry_lab_1/2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 51 KiB |
BIN
arutunyan_dmitry_lab_1/3.png
Normal file
BIN
arutunyan_dmitry_lab_1/3.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 53 KiB |
93
arutunyan_dmitry_lab_1/README.md
Normal file
93
arutunyan_dmitry_lab_1/README.md
Normal file
@ -0,0 +1,93 @@
|
||||
|
||||
## Лабораторная работа 1. Вариант 4.
|
||||
### Задание
|
||||
Построить графики, отобразить
|
||||
качество моделей, объяснить полученные результаты.
|
||||
|
||||
Данные: `make_moons (noise=0.3, random_state=rs)`
|
||||
|
||||
Модели:
|
||||
- Линейная регресся
|
||||
- Полиномиальная регрессия (со степенью 4)
|
||||
- Гребневая полиномиальная регресся (со степенью 4, alpha = 1.0)
|
||||
|
||||
### Как запустить
|
||||
Для запуска программы необходимо с помощью командной строки в корневой директории файлов прокета прописать:
|
||||
```
|
||||
python main.py
|
||||
```
|
||||
После этого в папке static сгенерируются 4 графика, по которым оценивается результат выполнения программы.
|
||||
|
||||
### Используемые технологии
|
||||
- Библиотека `pyplot`, используемая для построения графиков.
|
||||
- Библиотека `sklearn` - большой набор функционала для анализа данных. Из неё были использованы инструменты:
|
||||
- `make_moons` - генератор случайных структурированных данных
|
||||
- `train_test_split` - разделитель данных на обучающиую и тестовую выборки
|
||||
- `LinearRegression` - инструмент работы с моделью "Линейная регрессия"
|
||||
- `Ridge` - инструмент работы с моделью "Гребневая регрессия"
|
||||
- `PolynomialFeatures` - инструмент работы с моделью "Полиномиальная регрессия"
|
||||
- `metrics` - набор инструменов для оценки моделей
|
||||
- Библиотека `numpy`, используемая для обработки массивов данных и вычислений
|
||||
|
||||
### Описание работы
|
||||
Программа генерирует данные для обучения и тестирования моделей, стандартизирует данные и разделяет их на обучающую и тестовую выборки.
|
||||
```python
|
||||
X, y = make_moons(noise=0.3, random_state=None)
|
||||
X = StandardScaler().fit_transform(X)
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42)
|
||||
```
|
||||
После чего, на данных `X_train` и `y_train` производится обучение моделей, а на данных `X_test` и `y_test` - оценка их качества.
|
||||
|
||||
Поскольку все модели в задании регрессионные, результаты работы будем оценивать через решение задачи предсказания. Это позволит нам использовать для оценки только `y` данные, что облегчит построение графиков.
|
||||
|
||||
Оценка качества моделей будет производиться по двум критериям - среднеквадратическому отклонению `mid_square` от истинного результата и коэфициенту детерминации `det_kp`. Чем среднеквадратическая ошибка меньше и чем коэфициент детерминации больше, тем лучше модель показала себя на данной выборке.
|
||||
```python
|
||||
mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3)
|
||||
det_kp = np.round(metrics.r2_score(y_test, y_predict), 2)
|
||||
```
|
||||
Где `y_predict` - решение задачи предсказания. Для наглядности, оценочные параметры округлим с помощью функции `round` до 3х и 2х знаков после запятой.
|
||||
|
||||
#### Линейная регрессия
|
||||
Для создания модели линейной регрессии воспользуемся объектом `LinearRegression()`, обучим модель и заставим её предсказать значения `y` на тестовой выборке `x_text`.
|
||||
```python
|
||||
linear = LinearRegression()
|
||||
linear.fit(X_train, y_train)
|
||||
y_predict = linear.predict(X_test)
|
||||
```
|
||||
Построим график для оценки результатов:
|
||||
|
||||
![](1.png "")
|
||||
|
||||
#### Полиномиальная регрессия
|
||||
Линейная регрессия является разновидностью полиномиальной регрессии со степенью ведущего члена равной 1. Чтобы построить модель полиномиальной регрессии со степенью 4 необходимо к данным модели линейной регрессии добавить 3 недостающих члена, возведённых в соответствующие степени 2, 3 и 4.
|
||||
```python
|
||||
poly = PolynomialFeatures(degree=4, include_bias=False)
|
||||
x_poly_train = poly.fit_transform(X_train)
|
||||
x_poly_test = poly.fit_transform(X_test)
|
||||
```
|
||||
Где `degree` - старшая степень полинома, `include_bias` - приведение свободного члена полинома к 0.
|
||||
|
||||
Обучение и прогнозирование модели далее производится также, как с моделью линейной регрессии, но уде на данных `x_poly_train` и `x_poly_test`
|
||||
|
||||
Построим график для оценки результатов:
|
||||
|
||||
![](2.png "")
|
||||
|
||||
#### Полиномиальная гребневая регрессия
|
||||
Полиномиальная гребневая регрессия - это та же самая полиномиальная регрессия, но построенная с использованием усредняющего коэфициента. Для этого воспользуемся объёктом `Ridge()` и построим модель аналогично первым.
|
||||
```python
|
||||
ridge = Ridge(alpha=1.0)
|
||||
ridge.fit(x_poly_train, y_train)
|
||||
y_predict = ridge.predict(x_poly_test)
|
||||
```
|
||||
|
||||
Построим график для оценки результатов:
|
||||
|
||||
![](3.png "")
|
||||
|
||||
Теперь построим график для сравнения работы всех моделей и выберем наилучшую:
|
||||
|
||||
![](result.png "")
|
||||
|
||||
### Вывод
|
||||
Наиболее низкое среднеквадратичное отклонение и наиболее высокий коэфициент детерминации показала модель линейной регрессии, а это значит что она наилучшем образом подходит для работы со сгенерированным данными. В этом случае мы можем предположить что данные выборки находятся на небольшом расстоянии друг от друга и располагаются линейно.
|
89
arutunyan_dmitry_lab_1/main.py
Normal file
89
arutunyan_dmitry_lab_1/main.py
Normal file
@ -0,0 +1,89 @@
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
from sklearn import metrics
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.linear_model import LinearRegression, Ridge
|
||||
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
|
||||
from sklearn.datasets import make_moons
|
||||
|
||||
X, y = make_moons(noise=0.3, random_state=None) # Генерация данных с пересечениями признаков
|
||||
X = StandardScaler().fit_transform(X) # Стандартизация. Удаление средних, увеличение дисперсии до 1
|
||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42) # Разделение данных на обучающую и тестовую выборки
|
||||
|
||||
|
||||
# Модель линейной регрессии
|
||||
def lr_prediction():
|
||||
linear = LinearRegression() # Создание модели
|
||||
linear.fit(X_train, y_train) # Обучение модели
|
||||
y_predict = linear.predict(X_test) # Решение задачи предсказания
|
||||
|
||||
mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3) # Рассчёт среднеквадратичной ошибки модели
|
||||
det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) # Рассчёт коэфициента детерминации модели
|
||||
|
||||
return "Модель линейной регрессии", y_predict, mid_square, det_kp
|
||||
|
||||
|
||||
# Модель полиномиальной регрессии
|
||||
def poly_lr_prediction():
|
||||
poly = PolynomialFeatures(degree=4, include_bias=False) # Создание характеристик полиномиальной модели (степень - 4, обнуление свободного члена - нет)
|
||||
x_poly_train = poly.fit_transform(X_train) # Трансформация выборки обучения (добавление недостающих аргументов многочлена 4го порядка)
|
||||
x_poly_test = poly.fit_transform(X_test) # Трансформация тестовой выборки (добавление недостающих аргументов многочлена 4го порядка)
|
||||
linear = LinearRegression() # Создание модели
|
||||
linear.fit(x_poly_train, y_train) # Обучение модели
|
||||
y_predict = linear.predict(x_poly_test) # Решение задачи предсказания
|
||||
|
||||
mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3) # Рассчёт среднеквадратичной ошибки модели
|
||||
det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) # Рассчёт коэфициента детерминации модели
|
||||
|
||||
return "Модель полиномиальной регрессии", y_predict, mid_square, det_kp
|
||||
|
||||
|
||||
# Модель полиномиальной гребневой регрессии
|
||||
def poly_rg_prediction():
|
||||
poly = PolynomialFeatures(degree=4, include_bias=False) # Создание характеристик полиномиальной модели (степень - 4, обнуление свободного члена - нет)
|
||||
x_poly_train = poly.fit_transform(X_train) # Трансформация выборки обучения (добавление недостающих аргументов многочлена 4го порядка)
|
||||
x_poly_test = poly.fit_transform(X_test) # Трансформация тестовой выборки (добавление недостающих аргументов многочлена 4го порядка)
|
||||
ridge = Ridge(alpha=1.0) # Создание гребневой модели (уср. коэф - 1.0)
|
||||
ridge.fit(x_poly_train, y_train) # Обучение модели
|
||||
y_predict = ridge.predict(x_poly_test) # Решение задачи предсказания
|
||||
|
||||
mid_square = np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)), 3) # Рассчёт среднеквадратичной ошибки модели
|
||||
det_kp = np.round(metrics.r2_score(y_test, y_predict), 2) # Рассчёт коэфициента детерминации модели
|
||||
|
||||
return "Модель полиномиальной регрессии", y_predict, mid_square, det_kp
|
||||
|
||||
|
||||
# Создание графиков поотдельности (для себя)
|
||||
def make_plots(models):
|
||||
i = 0
|
||||
for model in models:
|
||||
plt.plot(y_test, c="red", label="\"y\" исходная") # Создание графика исходной функции
|
||||
plt.plot(model[1], c="green", label="\"y\" предсказанная \n"
|
||||
"Ср^2 = " + str(model[2]) + "\n"
|
||||
"Кд = " + str(model[3])) # Создание графика предсказанной функции
|
||||
plt.legend(loc='lower left')
|
||||
plt.title(model[0])
|
||||
plt.savefig('static/' + str(i + 1) + '.png')
|
||||
plt.close()
|
||||
i += 1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
models = lr_prediction(), poly_lr_prediction(), poly_rg_prediction()
|
||||
make_plots(models)
|
||||
|
||||
fig, axs = plt.subplots(3, 1, layout='constrained') # Создание общего графика для сравнения моделей
|
||||
i = 0
|
||||
for model in models:
|
||||
fig.set_figwidth(6)
|
||||
fig.set_figheight(10)
|
||||
axs[i].set_title(model[0])
|
||||
axs[i].plot(y_test, c="red", label="\"y\" исходная")
|
||||
axs[i].plot(model[1], c="green", label="\"y\" предсказанная \n"
|
||||
"Ср^2 = " + str(model[2]) + "\n"
|
||||
"Кд = " + str(model[3]))
|
||||
axs[i].legend(loc='lower left')
|
||||
i += 1
|
||||
plt.savefig('static/result.png')
|
||||
|
||||
|
BIN
arutunyan_dmitry_lab_1/result.png
Normal file
BIN
arutunyan_dmitry_lab_1/result.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 147 KiB |
Loading…
Reference in New Issue
Block a user