52 lines
2.1 KiB
Python
52 lines
2.1 KiB
Python
|
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}%')
|