Verfasst am: 29.10.2024, 12:22
Titel: Probleme beim Finden eines passenden Regressionsmodels
Hallo liebes Forum,
ich bin noch relativ grün hinter den Ohren was das Arbeiten mit MATLAB angeht. Trotzdem habe ich nun auf der Arbeit die Aufgabe bekommen ein Regressionsmodel zu erstellen. Dieses soll 80% der Daten als Trainings- und 20% als Testdaten nutzen. Spezifischer wird das ganze nicht. Die Daten die mir zur Verfügung stehen sind in der angehängten Excel-Datei.
Ich habe bereits sämtliche Regressionsmodelle ausprobiert (lineare Regression, nicht-lineare Regression, Entscheidungsbäume, RandomForest und weitere). Das beste Ergebnisse erhielt ich bei der Gradient Boosting Methode. Die Werte ähnelten sehr stark den Mittelwerten der gegebenen Dateien was mich stutzig machte. Daher untersuchte ich das Modell auf Werte wie R^2, Mean absolute Error, rRMSE und weitere. Die gaben den Hinweis, dass das Regressionsmodell anscheinend nicht zielführend ist. Jetzt weiß ich nicht mehr weiter und bitte daher um Rat. Hier mein momentaner Code:
Code:
% Daten laden
data = readtable('C:....\AP2 Regression_468.xlsx');
% X entspricht der Kontkaktrollenhärte, der Schleifbandart und Geschwindigkeit
X = data{:, 1:3}; % Unabhängige Variablen (Prädiktoren)
delta_r = data{:, 4}; % Abhängige Variable
% Unterteilung der Daten in Trainings- und Testdaten
cv = cvpartition(delta_r, 'HoldOut', 0.2); % 20% der Daten für den Testdatensatz
idx = cv.test; % Logische Indizes für den Testdatensatz
% Anpassen der Parameter für fitrensemble
mdl = fitrensemble(X_train, y_train, ...
'Method', 'LSBoost', ...
'NumLearningCycles', 100, ...% Anzahl der Bäume
'LearnRate', 0.1, ...% Lernrate
'KFold', 5, ...% Cross-Validation
'Learners', templateTree('MinLeafSize', 5)); % Entscheidungsbaum als Grundmodell mit MinLeafSize
% RMSE aus Cross-Validation berechnen
rmse_cv_gbh = kfoldLoss(mdl);
disp(['RMSE aus Cross-Validation: ', num2str(rmse_cv_gbh)]);
% Trainiere ein finales Modell auf dem gesamten Trainingsdatensatz
final_mdl = fitrensemble(X_train, y_train, ...
'Method', 'LSBoost', ...
'NumLearningCycles', 1, ...
'LearnRate', 0.1, ...
'Learners', templateTree('MinLeafSize', 5)); % Wieder verwende MinLeafSize im Template
% Vorhersage für den Testdatensatz
y_pred_gbh = predict(final_mdl, X_test);
rmse_final = sqrt(mean((y_pred_gbh - y_test).^2));
disp(['RMSE für den Testdatensatz (Gradient Boosting): ', num2str(rmse_final)]);
% Mean absolute Error: % Durschnittabweichung von tatsächlichen Werten
mae_gbh = mean(abs(y_pred_gbh - y_test));
disp(['MAE (Gradient Boosting): ', num2str(mae_gbh)]);
% R-Squared (Bestimmtheitsmaß): % zeigt an wie gut das Modell die Varianz der abhängigen Variablen erklärt
ss_total = sum((y_test - mean(y_test)).^2);
ss_residual = sum((y_test - y_pred_gbh).^2);
r_squared = 1 - (ss_residual / ss_total);
disp(['R-squared (Gradient Boosting): ', num2str(r_squared)]);
% Relative Root Mean Squared Error (rRMSE): % setzt den RMSE in Relation zum Mittelwert der tatsächlichen Werte und % gibt einen skalierungsunabhängigen Fehler an
rrmse_gbh = rmse_final / mean(y_test);
disp(['Relativer RMSE (Gradient Boosting): ', num2str(rrmse_gbh)]);
% Residualanalyse: % Ein Residuum ist die Abweichung eines vorhergesagten Wertes vom % tatsächlich beobachteten Wert
residuals = y_test - y_pred_gbh;
figure;
histogram(residuals);
title('Residual Histogram (Gradient Boosting)');
xlabel('Residual');
ylabel('Frequency');
% Feature Importance: % zeigt an wie groß der Einfluss der unabhängigen Variablen ist
feature_importance = predictorImportance(final_mdl);
disp('Feature Importance:');
disp(feature_importance);
das Anhängen der Datei hat anscheinend nicht geklappt. Bitte nochmal versuchen und ggf. zippen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.