Matlab - How should I modify the structure of this script? We are working with the methodology of the multipl

 
Vista:
Imágen de perfil de Jesus Enrique

How should I modify the structure of this script? We are working with the methodology of the multipl

Publicado por Jesus Enrique (1 intervención) el 08/06/2023 21:36:59
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
% Lectura de los datos del archivo CSV
data = readtable('M-1.csv');
 
% Obtención de las variables independientes (X) y la variable dependiente (y)
X = table2array(data(:, 1:10));
y_labels = data(:, 11);
y = grp2idx(y_labels);
 
% Preprocesamiento de los datos
X = normalize(X);
 
% Conversión de la variable dependiente a matriz de variables dummy
Y = dummyvar(y);
 
% División de los datos en conjuntos de entrenamiento y prueba
train_ratio = 0.8; % Proporción de datos para entrenamiento
train_samples = floor(size(X, 1) * train_ratio);
 
X_train = X(1:train_samples, :);
Y_train = Y(1:train_samples, :);
 
X_test = X(train_samples+1:end, :);
Y_test = Y(train_samples+1:end, :);
 
% Definición de la arquitectura de la red neuronal
input_size = size(X, 2);
hidden_size = 10;
output_size = size(Y, 2);
 
% Inicialización de los pesos de manera aleatoria
W1 = randn(input_size, hidden_size);
W2 = randn(hidden_size, output_size);
 
% Entrenamiento de la red neuronal
epochs = 1000; % Número de iteraciones de entrenamiento
learning_rate = 0.1; % Tasa de aprendizaje
 
for epoch = 1:epochs
    % Forward propagation
    Z1 = X_train * W1;
    A1 = max(0, Z1); % Función de activación ReLU
    Z2 = A1 * W2;
    A2 = softmax(Z2); % Función de activación Softmax
 
    % Cálculo de la función de pérdida (cross-entropy)
    loss = -sum(sum(Y_train .* log(A2))) / size(X_train, 1);
 
    % Backpropagation
    dZ2 = A2 - Y_train;
    dW2 = A1' * dZ2;
    dA1 = dZ2 * W2';
    dZ1 = dA1 .* (A1 > 0);
    dW1 = X_train' * dZ1;
    % Actualización de los pesos
    W1 = W1 - learning_rate * dW1;
    W2 = W2 - learning_rate * dW2;
    % Mostrar el progreso del entrenamiento
    if mod(epoch, 100) == 0
        disp(['Epoch: ' num2str(epoch) ', Loss: ' num2str(loss)]);
    end
end
% Predicción en el conjunto de prueba
Z1_test = X_test * W1;
A1_test = max(0, Z1_test);
Z2_test = A1_test * W2;
A2_test = softmax(Z2_test);
[~, predicted_labels] = max(A2_test, [], 2);
% Conversión de las etiquetas de predicción a las categorías originales
predicted_labels = categorical(predicted_labels);
predicted_labels = renamecats(predicted_labels, y_labels(1));
% Evaluación del rendimiento del modelo
accuracy = sum(predicted_labels == y_labels(train_samples+1:end)) / numel(y_labels(train_samples+1:end));
disp(['Accuracy: ' num2str(accuracy)]);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder