fix ingore
This commit is contained in:
parent
55b79c339e
commit
dab82f11ee
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,2 +1,2 @@
|
||||
# Specify filepatterns you want git to ignore.
|
||||
.idea/
|
||||
.idea
|
||||
|
@ -1,60 +1,39 @@
|
||||
from random import randrange
|
||||
import numpy as np
|
||||
from matplotlib import pyplot as plt
|
||||
from matplotlib.colors import ListedColormap
|
||||
from sklearn import metrics
|
||||
from sklearn.model_selection import train_test_split
|
||||
from sklearn.linear_model import LinearRegression, LogisticRegression
|
||||
from sklearn.pipeline import make_pipeline
|
||||
from sklearn.preprocessing import StandardScaler, PolynomialFeatures
|
||||
from sklearn.datasets import make_circles
|
||||
from sklearn.linear_model import Ridge, LinearRegression
|
||||
from sklearn.ensemble import RandomForestRegressor
|
||||
from sklearn.feature_selection import RFE
|
||||
|
||||
rs = randrange(50)
|
||||
X, y = make_circles(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) # Разделим данные на обучающий и тестовый наборы
|
||||
''' Задание
|
||||
Используя код из [1](пункт «Решение задачи ранжирования признаков», стр. 205), выполните ранжирование признаков с
|
||||
помощью указанных по вариантумоделей. Отобразите получившиеся значения\оценки каждого признака каждым методом\моделью и
|
||||
среднюю оценку. Проведите анализ получившихся результатов. Какие четырепризнака оказались самыми важными по среднему
|
||||
значению? (Названия\индексы признаков и будут ответом на задание).
|
||||
|
||||
# Линейная модель
|
||||
linear_reg = LinearRegression()
|
||||
# Полиномиальная регрессия (со степенью 4)
|
||||
poly_reg = make_pipeline(PolynomialFeatures(degree=4), StandardScaler(), LogisticRegression(random_state=rs))
|
||||
# Гребневая полиномиальная регрессия (со степенью 4 и alpha=1.0)
|
||||
ridge_poly_reg = make_pipeline(PolynomialFeatures(degree=4), StandardScaler(), LogisticRegression(penalty='l2', C=1.0,
|
||||
random_state=rs))
|
||||
Вариант 5.
|
||||
Гребневая регрессия (Ridge), Рекурсивное сокращение признаков (Recursive Feature Elimination – RFE),
|
||||
Сокращение признаков Случайными деревьями (Random Forest Regressor).
|
||||
'''
|
||||
|
||||
# создание данных
|
||||
rs = np.random.RandomState(2)
|
||||
X, y = make_regression(n_samples=750, n_features=15, noise=0.1, random_state=random_state)
|
||||
data = pd.DataFrame(X, columns=[f'Признак {i}' for i in range(X.shape[1])])
|
||||
data['Целевая переменная'] = y
|
||||
X = data.drop('Целевая переменная', axis=1)
|
||||
y = data['Целевая переменная']
|
||||
|
||||
# Обучение моделей
|
||||
def mid_sq_n_det(name, model):
|
||||
model.fit(X_train, y_train)
|
||||
y_predict = model.predict(X_test)
|
||||
print(f'Рассчёт среднеквадратичной ошибки для {name}: '
|
||||
f'{np.round(np.sqrt(metrics.mean_squared_error(y_test, y_predict)),3)}') # Рассчёт среднеквадратичной ошибки модели
|
||||
print(f'Рассчёт коэфициента детерминации для {name}: {np.round(metrics.r2_score(y_test, y_predict), 2)}') # Рассчёт коэфициента детерминации модели
|
||||
return name, model
|
||||
ridge = Ridge(alpha=1) # Создаём модель гребневой регрессии и обучаем её
|
||||
ridge.fit(X, Y)
|
||||
|
||||
recFE = RFE(LinearRegression(), n_features_to_select=1) #
|
||||
recFE.fit(X, Y)
|
||||
|
||||
# Графики
|
||||
models = [mid_sq_n_det("Линейная регрессия", linear_reg),
|
||||
mid_sq_n_det("Полиномиальная регрессия (со степенью 4)", poly_reg),
|
||||
mid_sq_n_det("Гребневая полиномиальная регрессия (со степенью 4, alpha = 1.0)", ridge_poly_reg)]
|
||||
rfr = RandomForestRegressor() # Создаём и обучаем регрессор случайного леса
|
||||
rfr.fit(X, Y)
|
||||
|
||||
cmap_background = ListedColormap(['#FFAAAA', '#AAAAFF'])
|
||||
cmap_points = ListedColormap(['#FF0000', '#0000FF'])
|
||||
models = [('Гребневая регрессия', ridge),
|
||||
('RFE', recFE),
|
||||
('RFR', rfr)]
|
||||
|
||||
plt.figure(figsize=(15, 4))
|
||||
for i, (name, model) in enumerate(models):
|
||||
plt.subplot(1, 3, i + 1)
|
||||
xx, yy = np.meshgrid(np.linspace(X[:, 0].min() - 1, X[:, 0].max() + 1, 100),
|
||||
np.linspace(X[:, 1].min() - 1, X[:, 1].max() + 1, 100))
|
||||
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
|
||||
Z = Z.reshape(xx.shape)
|
||||
plt.contourf(xx, yy, Z, cmap=cmap_background, alpha=0.5)
|
||||
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, cmap=cmap_points, marker='o', label='Тестовые точки')
|
||||
plt.scatter(X_train[:, 0], X_train[:, 1], c=y_train, cmap=cmap_points, marker='x', label='Обучающие точки')
|
||||
plt.legend()
|
||||
plt.title(name)
|
||||
plt.text(0.5, -1.2, 'Красный класс', color='r', fontsize=12)
|
||||
plt.text(0.5, -1.7, 'Синий класс', color='b', fontsize=12)
|
||||
|
||||
plt.tight_layout()
|
||||
plt.show()
|
||||
for name, model in models:
|
||||
pass
|
||||
|
Loading…
Reference in New Issue
Block a user