реади

This commit is contained in:
DmitriyAntonov 2023-10-08 15:37:46 +04:00
parent 9644582307
commit b6ab40cae3
4 changed files with 4565 additions and 0 deletions

View File

@ -0,0 +1,89 @@
# Лаб 6 Регрессия
Использовать регрессию по варианту для данных из датасета курсовой
Predict students' dropout and academic success (отсев студентов),
самостоятельно сформулировав задачу. Оценить, насколько хорошо она подходит
для решения сформулированной вами задачи.
# Вариант 3
Лассо-регрессия
# Запуск
Выполнением скрипта файла (вывод в консоль).
# Задача регрессии
Для прогнозирования отсева учащихся и набора данных об успеваемости спрогнозируйте отсев
используя нейроонную сеть для признаков
'Curricular units 2nd sem (approved)' - (Учебные блоки 2-го семестра (утверждены))
'Curricular units 2nd sem (grade)' - (Учебные блоки 2-го семестра (класс))
'Tuition fees up to date' - (Стоимость обучения")
# Описание модели:
"MLPClassifier" - это тип искусственной нейронной сети прямого действия, которая широко используется для задач классификации.
Объяснение некоторых ключевых параметров:
1. hidden_layer_sizes:
- Этот параметр определяет количество нейронов в каждом скрытом слое и количество скрытых слоев в сети.
- Это кортеж, где каждый элемент представляет количество нейронов в определенном скрытом слое.
- Например, `hidden_layer_sizes=(100, 100)` означает, что есть два скрытых слоя, причем первый слой
- содержит 100 нейронов, а второй слой также содержит 100 нейронов.
2. activation:
- Этот параметр определяет функцию активации для скрытых слоев. Функция активации привносит
нелинейность в сеть, позволяя ей изучать сложные паттерны.
- Распространенные варианты включают:
- "identity": линейная функция активации (обычно не используется на практике).
- "logistic": сигмовидная логистическая функция
- "tanh": гиперболическая касательная функция
- "relu": Выпрямленная линейная единица измерения
3. solver:
- Этот параметр определяет алгоритм, используемый для оптимизации весов нейронной сети.
- Распространенные варианты включают:
- `adam": оптимизатор на основе стохастического градиента, сочетающий идеи RMSProp и Momentum.
- `sgd": Стохастический градиентный спуск.
- `lbfgs": алгоритм Бройдена-Флетчера-Гольдфарба-Шанно с ограниченной памятью.
4. alpha:
- Параметр штрафа L2 (условие регуляризации). Это помогает предотвратить переобучение,
наказывая за большие веса.
- Более высокие значения "альфа" приводят к более сильной регуляризации.
5. max_iter:
- Максимальное количество итераций для тренировочного процесса. Этот параметр помогает
предотвратить бесконечное обучение модели.
6. learning_rate:
- График скорости обучения для обновления веса. Он определяет размер шага, с которым веса
обновляются во время тренировки.
- Опции включают 'constant', 'invscaling', и 'adaptive'.
7. random_state:
- Начальное значение, используемое генератором случайных чисел. Установка начального значения
гарантирует воспроизводимость результатов.
8. batch_size:
- Количество образцов, использованных в каждой мини-партии во время обучения. Это влияет
на скорость конвергенции и использование памяти.
9. early_stopping:
- Если установлено значение "True", обучение прекратится, если оценка проверки не улучшится.
Это помогает предотвратить переобучение.
10. validation_fraction:
- Доля обучающих данных, которую следует отложить в качестве валидационного набора для ранней
остановки.
# Результат:
Из прошлой лабораторной точность регрессии для вышеперечисленных признаков составила 0.6256 (alpha = 0.01)
Точность нейронной сети для вышеперечисленных признаков составила 72.32%
(при изменении описанных выше параметров оценка не улучается)
На примере тех же самых признаков нейронная сеть обеспечивает
лучшее качество предсказания отсева студентов.
<p>
<div>Результат</div>
<img src="screens/img.png" width="650" title="Результат">
</p>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,51 @@
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import StandardScaler
# загрузка датасета
data = pd.read_csv('dataset.csv')
# выбор признаков
features = [
'Curricular units 2nd sem (approved)',
'Curricular units 2nd sem (grade)',
'Tuition fees up to date',
]
target = 'Target'
X = data[features]
y = data[target]
# разбиваем на тестовую и тренировочную выборки
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# стандартизация признаков
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
# тренируем нейронную сеть MLPClassifier
classifier = MLPClassifier(
hidden_layer_sizes=(50, 50), # два скрытых слоя с 50 нейронами каждый
activation='relu', # relu функция активации
solver='adam', # оптимизатор на основе стохастического градиента
alpha=0.0001, # L2 штраф (регуляризация)
max_iter=1000, # макс итераций
learning_rate='constant', # постоянная скорость обучения
random_state=42, # Random начало для воспроизведения результата
batch_size=32, # размер мини партии
early_stopping=True, # для предотвращения переобучения
validation_fraction=0.2, # 20% данных для проверки
verbose=True, # для оттображения итераций
)
classifier.fit(X_train, y_train)
# предсказываем значение
y_pred = classifier.predict(X_test)
# оцениваем результат
accuracy = np.mean(y_pred == y_test)
print(f'Оценка точности: {accuracy*100:.2f}%')

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB