103 lines
5.3 KiB
Python
103 lines
5.3 KiB
Python
|
import os.path
|
|||
|
import numpy as np
|
|||
|
from matplotlib import pyplot as plt
|
|||
|
from sklearn.datasets import make_classification
|
|||
|
from sklearn.linear_model import LinearRegression, Perceptron
|
|||
|
from sklearn.metrics import accuracy_score
|
|||
|
from sklearn.model_selection import train_test_split
|
|||
|
from sklearn.preprocessing import PolynomialFeatures
|
|||
|
|
|||
|
picfld = os.path.join('static', 'charts')
|
|||
|
|
|||
|
X, y = make_classification(n_samples=500, n_features=2, n_redundant=0,
|
|||
|
n_informative=2, random_state=None,
|
|||
|
n_clusters_per_class=1)
|
|||
|
# sklearn.datasets.samples_generator.make_classification - используется для создания случайных задач классификации N.
|
|||
|
# n_samples - Количество случайных чисел
|
|||
|
# n_features - количество признаков (измерений) для каждого числа.
|
|||
|
# n_informative - Количество информативных характеристик
|
|||
|
# n_redundant -количество избыточных признаков, которые не вносят дополнительной информации.
|
|||
|
# random_state - опциональный параметр для установки начального состояния генератора случайных чисел.
|
|||
|
# n_clusters_per_class - Количество кластера в каждой категории
|
|||
|
# Функция возвращает два значения:
|
|||
|
# X: массив размера [n_samples, n_features], содержащий сгенерированные признаки.
|
|||
|
# y: массив размера [n_samples], содержащий сгенерированные целевые переменные (классы).
|
|||
|
|
|||
|
rng = np.random.RandomState(2)
|
|||
|
# добавление шума к данным
|
|||
|
X += 2 * rng.uniform(size=X.shape)
|
|||
|
linearly_dataset = (X, y)
|
|||
|
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.4, random_state=42)
|
|||
|
|
|||
|
# Модель: линейная регрессия
|
|||
|
def linear_regression():
|
|||
|
# Модель линейной регрессии
|
|||
|
model = LinearRegression()
|
|||
|
# Обучение на тренировочных данных
|
|||
|
model.fit(X_train, y_train)
|
|||
|
# Выполнение прогноза
|
|||
|
y_pred = model.predict(X_test)
|
|||
|
# Вычисление коэффициента детерминации
|
|||
|
r_sq = model.score(X_test, y_test)
|
|||
|
# Создание графика
|
|||
|
plt.plot(y_test, c="#bd0000", label="\"y\" исходная")
|
|||
|
plt.plot(y_pred, c="#00BFFF", label="\"y\" предсказанная \n" "Кд = " + str(r_sq))
|
|||
|
plt.title("Линейная регрессия")
|
|||
|
plt.legend(loc='lower left')
|
|||
|
plt.savefig('static/charts/LinearRegressionChart.png')
|
|||
|
plt.close()
|
|||
|
|
|||
|
|
|||
|
# Модель: полиномиальная регрессия (со степенью 4)
|
|||
|
def polynomial_regression():
|
|||
|
# Генерирование объекта полинома,
|
|||
|
# где degree - степень полинома,
|
|||
|
# include_bias - установка вектора смещения в полиномиальные признаки
|
|||
|
pf = PolynomialFeatures(degree=4, include_bias=False)
|
|||
|
# Преобразование исходного набора данных X_train в полиномиальные признаки
|
|||
|
X_poly_train = pf.fit_transform(X_train)
|
|||
|
# Преобразование исходного набора данных X_test в полиномиальные признаки
|
|||
|
X_poly_test = pf.fit_transform(X_test)
|
|||
|
# Модель линейной регрессии
|
|||
|
model = LinearRegression()
|
|||
|
# Обучение модели линейной регрессии на преобразованных полиномиальных признаках
|
|||
|
model.fit(X_poly_train, y_train)
|
|||
|
# Выполнение прогноза
|
|||
|
y_pred = model.predict(X_poly_test)
|
|||
|
# Вычисление коэффициента детерминации
|
|||
|
r_sq = model.score(X_poly_test, y_test)
|
|||
|
# Создание графика
|
|||
|
plt.plot(y_test, c="#bd0000", label="\"y\" исходная")
|
|||
|
plt.plot(y_pred, c="#00BFFF",
|
|||
|
label="\"y\" предсказанная \n" "Кд = " + str(r_sq))
|
|||
|
plt.legend(loc='lower left')
|
|||
|
plt.title("Полиномиальная регрессия")
|
|||
|
plt.savefig('static/charts/PolynomialRegressionChart.png')
|
|||
|
plt.close()
|
|||
|
|
|||
|
|
|||
|
# Модель: персептрон
|
|||
|
def perceptron():
|
|||
|
# Модель персептрона
|
|||
|
model = Perceptron()
|
|||
|
# Обучение на тренировочных данных
|
|||
|
model.fit(X_train, y_train)
|
|||
|
# Выполнение прогноза
|
|||
|
y_pred = model.predict(X_test)
|
|||
|
# Вычисление точности работы персептрона
|
|||
|
accuracy = accuracy_score(y_test, y_pred)
|
|||
|
# Создание графика
|
|||
|
plt.plot(y_test, c="#bd0000", label="\"y\" исходная")
|
|||
|
plt.plot(y_pred, c="#00BFFF",
|
|||
|
label="\"y\" предсказанная \n" "Точность = " + str(accuracy))
|
|||
|
plt.legend(loc='lower left')
|
|||
|
plt.title("Персептрон")
|
|||
|
plt.savefig('static/charts/PerceptronChart.png')
|
|||
|
plt.close()
|
|||
|
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
linear_regression()
|
|||
|
polynomial_regression()
|
|||
|
perceptron()
|