Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Реализация полиномиальной регрессии в Python

Автор:   •  Апрель 25, 2022  •  Реферат  •  753 Слов (4 Страниц)  •  538 Просмотры

Страница 1 из 4

[pic 1][pic 2][pic 3]

Реализация полиномиальной регрессии в Python

Постановка задачи

Предположим нам необходимо вычислить параметры полиномиальной регрессии функции одной переменной. Для решения задачи необходимо получить или сгенерировать набор данных (х) с соответствующими значениями y (или рассчитать значение функции в точках, заданным набором x), построить график функции, расcчитать параметры регрессии, используя x и y как обучающее множество. Поскольку полиномиальная регрессия задается как фукция степени x, для ее реализации в python указывается степень регрессии (degree).

Данные

Для создания набора данных воспользуемся командой x=np.linspace(0,10,30) или

x=np.array(np.linspace(0,10,30))

Таким образом, в наборе данных будет 30 значений от 0 до 10.

Для расчета значений зависимой переменной воспользуемся фукцией y=x*sin(x), которую можно реализовать как фукцию python

def f(x):

    return x*np.sin(x)

График фукции приведен на рисунке

[pic 4]

Метод решения

Для решения задачи можно использовать  несколько методов. Во первых, можно реализовать алгоритм градиентного спуска для нахождения параметров регрессии. Во вторых, можно использовать матричное выражение, которое в Python реализуется выражением

theta=np.dot( np.linalg.inv(np.dot(X.T,X)) , np.dot(X.T,y) )

В третьих, можно воспользоваться моделью полиномиальной регрессии, входящей в состав sklearn, импортировав его следующими директивами

from sklearn.linear_model import Ridge

from sklearn.preprocessing import PolynomialFeatures

from sklearn.pipeline import make_pipeline

Далее, после того как получены исходные данные, разбиваем их на тренировочное и тестовое множества значений

X=x[:,np.newaxis]

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1)

Формируем модель полиномиальной регрессии, задав предварительно степень регрессии, например degree=3

poly=make_pipeline(PolynomialFeatures(degree),Ridge())

обучаем модель

poly.fit(X_train,y_train)

и рассчитываем значения регрессии в точках заданых тренировочным множеством    

y_pred=poly.predict(X_train)

или для всех исходных значений

h=poly.predict(X)

Строим графики. Например, ниже показан график функции полиномиальной регрессии 3-го порядка.

[pic 5]

 

Описанные шаги реализованы в виде программы polyReg001.py и в jyputer notebook polyReg001.ipynb

Листинг программы polyReg001.py

import numpy as np

import matplotlib.pyplot as plt

from sklearn.linear_model import Ridge

from sklearn.preprocessing import PolynomialFeatures

from sklearn.pipeline import make_pipeline

from sklearn.model_selection import train_test_split

from sklearn.metrics import mean_squared_error, r2_score

def f(x):

    return x*np.sin(x)+1

x=np.linspace(1,10,30)

y=f(x)

plt.plot(x,y,'ob')

X=x[:,np.newaxis]

X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=1)

colors=['silver','teal','magenta','gray']

degree=3

count=1

poly=make_pipeline(PolynomialFeatures(degree),Ridge())

poly.fit(X_train,y_train)

y_pred=poly.predict(X_train)

print('degree= %d' %degree)

print('MSE= %.2f' % mean_squared_error(y_train,y_pred))

print('variance = %.2f' % r2_score(y_train,y_pred))

h=poly.predict(X)

plt.plot(X,h,color=colors[count], label='degree=%d' %degree)

plt.legend(loc='upper left')

Задача 1 [1].

1)

Задайте функцию  y=x*sin(x^2)  и постройте ее график, в котором точки, соответствующие обучающему и тестовому множеству, окрашены в разные цвета [2]

Определите значение степени регрессии при котором среднеквадратическая ошибка будет не более 10.

для решения задачи можно воспользоваться функцией plt.scatter(), например, для изображения точек обучающего множества

plt.figure(2)

plt.scatter(X_train,y_train,color='black', marker='o', label='train point')

Вы должны получить примерно следующее

[pic 6]

Задача 2 *[3] 

Используя сгенерированный набор данных получите регрессионные кривые различных стпененей (от 2 до 9) и оцените показатели точности.

Ваши результаты могут выглядеть следующим образом [4]:

...

Скачать:   txt (10.9 Kb)   pdf (287.4 Kb)   docx (148.8 Kb)  
Продолжить читать еще 3 страниц(ы) »
Доступно только на Essays.club