Compare commits
No commits in common. "efa81f50bf660d6ae7fa8f75702c36e466720187" and "9644582307a9f1f490b6fdcaa7fdcf2f5133ddda" have entirely different histories.
efa81f50bf
...
9644582307
@ -1,56 +0,0 @@
|
|||||||
import random
|
|
||||||
from matplotlib import pyplot as plt
|
|
||||||
from matplotlib.colors import ListedColormap
|
|
||||||
from sklearn.datasets import make_moons
|
|
||||||
from sklearn.linear_model import LinearRegression, Ridge
|
|
||||||
from sklearn.model_selection import train_test_split
|
|
||||||
from sklearn.preprocessing import PolynomialFeatures
|
|
||||||
from sklearn.pipeline import Pipeline
|
|
||||||
|
|
||||||
rs = random.randrange(50)
|
|
||||||
|
|
||||||
X, y = make_moons(n_samples=250, noise=0.3, random_state=rs)
|
|
||||||
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4, random_state=42)
|
|
||||||
|
|
||||||
figure = plt.figure(1, figsize=(16, 9))
|
|
||||||
axis = figure.subplots(4, 3)
|
|
||||||
cm = ListedColormap(['#FF0000', "#0000FF"])
|
|
||||||
arr_res = list(range(len(y_test)))
|
|
||||||
X_scale = list(range(len(y_test)))
|
|
||||||
|
|
||||||
|
|
||||||
def test(col, model):
|
|
||||||
global axis
|
|
||||||
global arr_res
|
|
||||||
global X_test
|
|
||||||
global X_train
|
|
||||||
global y_train
|
|
||||||
global y_test
|
|
||||||
|
|
||||||
model.fit(X_train, y_train)
|
|
||||||
res_y = model.predict(X_test)
|
|
||||||
print(model.score(X_test, y_test))
|
|
||||||
|
|
||||||
axis[0, col].scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cm)
|
|
||||||
axis[1, col].scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm)
|
|
||||||
axis[2, col].scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cm)
|
|
||||||
axis[2, col].scatter(X_test[:, 0], X_test[:, 1], c=res_y, cmap=cm)
|
|
||||||
axis[3, col].plot([i for i in range(len(res_y))], y_test, c="g")
|
|
||||||
axis[3, col].plot([i for i in range(len(res_y))], res_y, c="r")
|
|
||||||
|
|
||||||
|
|
||||||
def start():
|
|
||||||
lin = LinearRegression()
|
|
||||||
poly = Pipeline([('poly', PolynomialFeatures(degree=3)),
|
|
||||||
('linear', LinearRegression())])
|
|
||||||
ridge = Pipeline([('poly', PolynomialFeatures(degree=3)),
|
|
||||||
('ridge', Ridge(alpha=1.0))])
|
|
||||||
|
|
||||||
test(0, lin)
|
|
||||||
test(1, poly)
|
|
||||||
test(2, ridge)
|
|
||||||
|
|
||||||
plt.show()
|
|
||||||
|
|
||||||
|
|
||||||
start()
|
|
@ -1,46 +0,0 @@
|
|||||||
##Задание
|
|
||||||
Сгенерировать определенный тип данных и сравнить на нем 3 модели. Построить графики, отобразить качество моделей, объяснить полученные результаты.
|
|
||||||
Вариант 1.
|
|
||||||
Данные: make_moons (noise=0.3, random_state=rs)
|
|
||||||
Модели:
|
|
||||||
· Линейная регрессия
|
|
||||||
· Полиномиальная регрессия (со степенью 3)
|
|
||||||
· Гребневая полиномиальная регрессия (со степенью 3, alpha = 1.0)
|
|
||||||
|
|
||||||
###Запуск программы
|
|
||||||
Файл lab1.py содержит и запускает программу, аргументов и настройки ~~вроде~~ не требует,
|
|
||||||
|
|
||||||
###Описание программы
|
|
||||||
Генерирует один из 50 наборов данных, показывает окно с графиками и пишет оценку моделей обучения по заданию.
|
|
||||||
Использует библиотеки matplotlib для демонстрации графиков и sklearn для создания и использования моделей.
|
|
||||||
|
|
||||||
###Результаты тестирования
|
|
||||||
Для различных значений rs результаты следующие:
|
|
||||||
значение - линейная - полиномиальная - гребневая полиномиальная
|
|
||||||
1 - 0.54 - 0.08 - 0.35
|
|
||||||
2 - 0.62 - 0.58 - 0.63
|
|
||||||
3 - 0.6 - 0.67 - 0.65
|
|
||||||
4 - 0.52 - 0.46 - 0.5
|
|
||||||
5 - 0.4 - 0.42 - 0.44
|
|
||||||
Из данных результатов можно заключить, что чёткой зависимости точности от выбранной модели нет.
|
|
||||||
|
|
||||||
Однако, после этого я добавил в генератор данных число значений: 500. Результаты оказались более детерминированными:
|
|
||||||
значение - линейная - полиномиальная - гребневая полиномиальная
|
|
||||||
1 - 0.54 - 0.63 - 0.63
|
|
||||||
2 - 0.52 - 0.63 - 0.62
|
|
||||||
3 - 0.56 - 0.64 - 0.64
|
|
||||||
4 - 0.5 - 0.63 - 0.62
|
|
||||||
5 - 0.5 - 0.52 - 0.53
|
|
||||||
Из данных результатов можно заключить, что в общем случае модель линейной регрессии уступает полиномиальным. Гребневая полиномиальная регрессия чаще уступала обычной полиномиальной, однако в незначительном количестве ситуаций была оценена выше - но во всех случаях результаты были близки, поэтому можно с уверенностью предположить, что результаты идентичны и различаются по воле шума обучения.
|
|
||||||
|
|
||||||
После изучения число значений в генераторе заменено на 250, поскольку графики становились неразличимыми^
|
|
||||||
значение - линейная - полиномиальная - гребневая полиномиальная
|
|
||||||
1 - 0.48 - 0.54 - 0.54
|
|
||||||
2 - 0.5 - 0.56 - 0.56
|
|
||||||
3 - 0.57 - 0.6 - 0.6
|
|
||||||
4 - 0.57 - 0.66 - 0.68
|
|
||||||
5 - 0.49 - 0.54 - 0.55
|
|
||||||
По данным результатам видно, что в большинстве ситуаций уже гребневая полиномиальная регрессия показывает лучшую точность.
|
|
||||||
|
|
||||||
Результаты объясняются следующим образом:
|
|
||||||
Линейная регрессия будучи математически прямой плохо отражает сложные функции и нелинейные зависимости, в то время как полиномиальная регрессия способна отражать перегибы и изменяющиеся в зависимости от меры значений зависимости. Гребневая полиномиальная вышла идентичной простой полиномиальной из-за одинаковых настроек - обе они по заданию имеют третью степень, а гребневая регрессия имеет слишком малый параметр alpha, что результирует в малом эффекте гребневой функции.
|
|
Loading…
x
Reference in New Issue
Block a user