如果我有 5 个预测变量,如何在 MATLAB 中创建二阶线性模型?
How to create a second order linear model in MATLAB if I have 5 predictors.?
基本上,我有一个包含 5 个预测变量和一个目标变量的数据集。我需要在 MATLAB 中拟合二阶线性模型。那么我需要创建总共 20 个预测变量然后使用 fitlm 还是有任何其他方法以便我不需要创建 20 个变量?
根据 the documentation,您可以通过将 modelspec 参数指定为 'quadratic'
,使用 fitlm
拟合二阶模型。这是一个模拟数据的例子。
% generate some random correlated data
mu = [0 0 0 0 0 0];
sigma = [1.6737 1.0183 1.0279 -1.8104 -2.4717 -2.2875; ...
1.0183 2.9619 -0.2512 -1.9997 2.4059 -1.7610; ...
1.0279 -0.2512 2.7031 -0.2611 -3.9707 -0.6580; ...
-1.8104 -1.9997 -0.2611 5.8947 -2.9645 4.1843; ...
-2.4717 2.4059 -3.9707 -2.9645 15.3447 1.6498; ...
-2.2875 -1.7610 -0.6580 4.1843 1.6498 6.0116];
data_train = mvnrnd(mu,sigma,10000);
data_test = mvnrnd(mu,sigma,1000);
% fit second order polynomial
predictors_train = data_train(:,1:5);
target_train = data_train(:,6);
model = fitlm(predictors_train, target_train, 'quadratic');
% test using data from same distribution
predictors_test = data_test(:,1:5);
target_test = data_test(:,6);
target_est = predict(model, predictors_test);
% report root mean-square error
rmse = sqrt(mean((target_est - target_test).^2))
基本上,我有一个包含 5 个预测变量和一个目标变量的数据集。我需要在 MATLAB 中拟合二阶线性模型。那么我需要创建总共 20 个预测变量然后使用 fitlm 还是有任何其他方法以便我不需要创建 20 个变量?
根据 the documentation,您可以通过将 modelspec 参数指定为 'quadratic'
,使用 fitlm
拟合二阶模型。这是一个模拟数据的例子。
% generate some random correlated data
mu = [0 0 0 0 0 0];
sigma = [1.6737 1.0183 1.0279 -1.8104 -2.4717 -2.2875; ...
1.0183 2.9619 -0.2512 -1.9997 2.4059 -1.7610; ...
1.0279 -0.2512 2.7031 -0.2611 -3.9707 -0.6580; ...
-1.8104 -1.9997 -0.2611 5.8947 -2.9645 4.1843; ...
-2.4717 2.4059 -3.9707 -2.9645 15.3447 1.6498; ...
-2.2875 -1.7610 -0.6580 4.1843 1.6498 6.0116];
data_train = mvnrnd(mu,sigma,10000);
data_test = mvnrnd(mu,sigma,1000);
% fit second order polynomial
predictors_train = data_train(:,1:5);
target_train = data_train(:,6);
model = fitlm(predictors_train, target_train, 'quadratic');
% test using data from same distribution
predictors_test = data_test(:,1:5);
target_test = data_test(:,6);
target_est = predict(model, predictors_test);
% report root mean-square error
rmse = sqrt(mean((target_est - target_test).^2))