Filter löschen
Filter löschen

Standardization fitlm, weird results?

14 Ansichten (letzte 30 Tage)
JoE
JoE am 7 Mai 2021
Kommentiert: Devendra am 13 Apr. 2024 um 6:30
Hi guys,
im new to machine learning and Im trying my best to get used to it. Right now Im trying to find a way to standardize my obeservations and use it with fitlm()
The problem: Im not in the range of the correct scale of the predictions after standardization. How do I fix this problem? Whats wrong with my code or with my intenion?
Example code:
load carsmall
X = [Weight,Horsepower,Acceleration];
Fulldata = [X,MPG];
Fulldata = rmmissing(Fulldata);
Testsample = [3504,130,12];
VarNames = {'Weight','Horsepower','Acceleration','MPG'};
%No standardization - dataset
Fulldataclean=array2table(Fulldata,"VariableNames",VarNames);
% Standardization - dataset
Fulldatastd = zscore(Fulldata);
Fulldatastd = array2table(Fulldatastd,"VariableNames",VarNames);
% Train model
lm = fitlm(Fulldataclean)
lm2 = fitlm(Fulldatastd)
%Predictions
test = predict(lm,Testsample)
test2 = predict(lm2,Testsample)
Output:
test = 19.3335
test2 = -2.3181e+03

Antworten (1)

Asvin Kumar
Asvin Kumar am 10 Mai 2021
Bearbeitet: Asvin Kumar am 10 Mai 2021
The reason your outputs aren't even in the same range is because you're comparing apples to oranges -- in two different places.
  1. Your training data (Fulldatastd) which is passed to fitlm normalizes the response 'MPG' too. So, test2 will always be in a different range, i.e, the normalized range.
  2. The training data (Fulldatastd) which is passed to fitlm is normalized but your test data isn't. So, you're predicting on an input that is out of the range of the training data.
Here's a modified version of your attached code. You can see that the outputs are now equal. Here are the changes that I've made:
  1. Normalized only the predictors - X
  2. Normalized the test point for testing
  3. Converted the calls to fitglm from fitglm(tbl) form to fitglm(x,y) form for clarity
load carsmall
X = [Weight,Horsepower,Acceleration];
Fulldata = [X,MPG];
Fulldata = rmmissing(Fulldata);
Xclean = Fulldata(:,1:3);
MPGclean = Fulldata(:,4);
Testsample = [3504,130,12];
Testsamplestd = (Testsample-mean(Xclean,1))./std(Xclean);
VarNames = {'Weight','Horsepower','Acceleration','MPG'};
% Standardization - dataset
Xstd = zscore(Xclean);
% Train model
lm = fitlm(Xclean,MPGclean);
lm2 = fitlm(Xstd, MPGclean);
%Predictions
test = predict(lm,Testsample)
test = 19.3335
test2 = predict(lm2,Testsamplestd)
test2 = 19.3335
  1 Kommentar
Devendra
Devendra am 13 Apr. 2024 um 6:30
Thanks for your valuable suggestion. I am using fitlm on pca scores but results are coming very wierd. May I request you to kindly have a look on attached code data file is also attached to kindly suggest me to get correct results?
I would appreciate your kind cooperation.
Devendra

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Deep Learning Toolbox finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by