Я пытался построить нейронную сеть, используя обратное распространение.
1.использование «титанического» набора данных и разделение данных в 30:70 в качестве обучающих и тестовых наборов
соответствует нейронной сети, используя независимые переменные «pclass + пол + возраст + sibsp» и зависимую переменную «выжил». Опустите все примеры АН. Используйте 2 скрытых слоя и установите функции активации как скрытого, так и выходного слоя в качестве сигмоидальной функции. Установите параметр «решатель» как SGD (стохастический c градиентный спуск) или Adam (аналогично SGD, но оптимизированная производительность с мини-пакетами). Как я могу решить эту проблему?
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
%matplotlib inline
df = pd.read_csv("Titanic.csv")
df['pclass'] = df['pclass'].map({'1st':1,'2nd':2,'3rd':3})
df['sex'] = df['sex'].map({'male':0,'female':1})
df=df.drop(columns=['parch','ticket','fare','cabin','embarked','boat','body','home.dest','name','Unnamed: 0'])
df['age'].fillna((df['age'].mean()),inplace=True)
df.head(10)
x = df.drop(columns= ['survived'])
y = df['survived']
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.30)
nn=MLPClassifier(activation='logistic',solver='sgd',hidden_layer_sizes=(10,15),random_state=1)
nn.fit(x_train,y_train)
pred=nn.predict(x_test)
a=y_test.values
a
count=0
for i in range(len(pred)):
if pred[i]==a[i]:
count=count+1
count/len(pred)
from sklearn.metrics import accuracy_score
y_pred = nn.predict(x_train)
print("Train data Accuracy: {0:.4f}".format(accuracy_score(y_train, y_pred)))
y_pred = nn.predict(x_test)
print("Test data Accuracy : {0:.4f}".format(accuracy_score(y_test, y_pred)))
from sklearn.metrics import confusion_matrix
y_pred1 = nn.predict(x_train)
cm = confusion_matrix(y_train, y_pred1)
TN = cm[0][0]
FN = cm[1][0]
TP = cm[1][1]
FP = cm[0][1]
ptrain1 = TP/(TP+FP)
rtrain1 = TP/(TP+FN)
cm = confusion_matrix(y_test, y_pred)
TN = cm[0][0]
FN = cm[1][0]
TP = cm[1][1]
FP = cm[0][1]
ptest1 = TP/(TP+FP)
rtest1 = TP/(TP+FN)
print("in‐sample percent survivors correctly predicted (on training set) : {0:.2f}%\n".format(ptrain1*100))
print("in‐sample percent fatalities correctly predicted (on training set) : {0:.2f}%\n".format(rtrain1*100))
print("out‐of‐sample percent survivors correctly predicted (on test set) : {0:.2f}%\n".format(ptest1*100))
print("out-of‐sample percent fatalities correctly predicted (on test set) : {0:.2f}%\n".format(rtest1*100))
после что также проверяется эффективность модели: точность выборки и выборки, определяемая как
процент выживших в выборке, правильно прогнозируемый (на тренировочном наборе), процент смертности в выборке, правильно прогнозируемый (на тренировочном наборе) процент выживших, правильно спрогнозированных (в тестовом наборе), процент погибших вне выборки, правильно спрогнозированный (в тестовом наборе)
Пожалуйста, попробуйте две разные сетевые структуры (т.е. количество нейронов в каждом скрытом слое) и покажите их Соответствующая точность.
благодарю за помощь