реади
This commit is contained in:
parent
9644582307
commit
b6ab40cae3
89
antonov_dmitry_lab_6/README.md
Normal file
89
antonov_dmitry_lab_6/README.md
Normal 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>
|
4425
antonov_dmitry_lab_6/dataset.csv
Normal file
4425
antonov_dmitry_lab_6/dataset.csv
Normal file
File diff suppressed because it is too large
Load Diff
51
antonov_dmitry_lab_6/lab6.py
Normal file
51
antonov_dmitry_lab_6/lab6.py
Normal 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}%')
|
BIN
antonov_dmitry_lab_6/screens/img.png
Normal file
BIN
antonov_dmitry_lab_6/screens/img.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 44 KiB |
Loading…
Reference in New Issue
Block a user