Today, we will have a look at this dataset on “Yacht Hydrodynamics” as part of my “Exploring Less Known Datasets for Machine Learning” series.


Contents


Comments on the original publication

The original publication of this dataset is: I. Ortigosa, R. Lopez and J. Garcia. A neural networks approach to residuary resistance of sailing
yachts prediction. In Proceedings of the International Conference on Marine Engineering MARINE
2007, 2007.
It seems like the original publication focuses on two different output variables with 5 input variables only whereas according to the dataset description we have only one target variable:

Variations concern hull geometry coefficients and the Froude number:

  1. Longitudinal position of the center of buoyancy, adimensional.
  2. Prismatic coefficient, adimensional.
  3. Length-displacement ratio, adimensional.
  4. Beam-draught ratio, adimensional.
  5. Length-beam ratio, adimensional.
  6. Froude number, adimensional.

The measured variable is the residuary resistance per unit weight of displacement:

  1. Residuary resistance per unit weight of displacement, adimensional.

Dataset description on UCI Machine Learning Repository

Exploring the dataset and preprocessing

Therefore, we have to explore on our own:

import time
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

# load the dataset and display a portion and basic statistics of it
filepath_input_data = './data/yacht_hydrodynamics.data'
input_data_df = pd.read_csv(filepath_input_data, delim_whitespace=True,
                           names=['Long pos', 'Prismatic coeff',
                                 'Length-displacement ratio',
                                 'Beam-draught ratio',
                                 'Length-beam ratio',
                                 'Froude number',
                                 'Residuary resistance'])
display(input_data_df.head(3))
display(input_data_df.tail(3))
display(input_data_df.describe())
Long pos Prismatic coeff Length-displacement ratio Beam-draught ratio Length-beam ratio Froude number Residuary resistance
0 -2.3 0.568 4.78 3.99 3.17 0.125 0.11
1 -2.3 0.568 4.78 3.99 3.17 0.150 0.27
2 -2.3 0.568 4.78 3.99 3.17 0.175 0.47


Long pos Prismatic coeff Length-displacement ratio Beam-draught ratio Length-beam ratio Froude number Residuary resistance
305 -2.3 0.6 4.34 4.23 2.73 0.400 19.59
306 -2.3 0.6 4.34 4.23 2.73 0.425 30.48
307 -2.3 0.6 4.34 4.23 2.73 0.450 46.66


Long pos Prismatic coeff Length-displacement ratio Beam-draught ratio Length-beam ratio Froude number Residuary resistance
count 308.000000 308.000000 308.000000 308.000000 308.000000 308.000000 308.000000
mean -2.381818 0.564136 4.788636 3.936818 3.206818 0.287500 10.495357
std 1.513219 0.023290 0.253057 0.548193 0.247998 0.100942 15.160490
min -5.000000 0.530000 4.340000 2.810000 2.730000 0.125000 0.010000
25% -2.400000 0.546000 4.770000 3.750000 3.150000 0.200000 0.777500
50% -2.300000 0.565000 4.780000 3.955000 3.150000 0.287500 3.065000
75% -2.300000 0.574000 5.100000 4.170000 3.510000 0.375000 12.815000
max 0.000000 0.600000 5.140000 5.350000 3.640000 0.450000 62.420000


Boxplots make it a bit more accessible to us:

Boxplots of input data

Next, we have to rescale our dataset:

from sklearn.preprocessing import MaxAbsScaler
input_data_scaled_df = input_data_df.copy()
scaler = MaxAbsScaler()
input_data_scaled = scaler.fit_transform(input_data_df)
input_data_scaled_df.loc[:,:] = input_data_scaled
scaler_params = scaler.get_params()
# We are dealing with physics here, hence we need the unscaled values
extract_scaling_function = np.ones((1,input_data_scaled_df.shape[1]))
extract_scaling_function = scaler.inverse_transform(extract_scaling_function)
display(input_data_scaled_df.head(3))
Long pos Prismatic coeff Length-displacement ratio Beam-draught ratio Length-beam ratio Froude number Residuary resistance
0 -0.46 0.946667 0.929961 0.745794 0.870879 0.277778 0.001762
1 -0.46 0.946667 0.929961 0.745794 0.870879 0.333333 0.004326
2 -0.46 0.946667 0.929961 0.745794 0.870879 0.388889 0.007530


from sklearn.model_selection import  train_test_split

datasets = {}
y = input_data_scaled_df['Residuary resistance'].values.reshape(-1,1)
X_df = input_data_scaled_df.copy()
X_df.drop(['Residuary resistance'], axis=1, inplace=True)
X = X_df.values

X_train, X_test, y_train, y_test = train_test_split(X, y,
                                                    test_size=0.2,
                                                    random_state=42,
                                                    shuffle=True)
comment = 'original dataset; scaled; 6 inputs, 1 output'

dataset_id = 'scaled_raw' 
datasets[dataset_id] = {'X_train': X_train, 'X_test' : X_test,
                        'y_train': y_train, 'y_test' : y_test,
                        'scaler' : scaler,
                        'scaler_array' : extract_scaling_function,
                        'comment' : comment,
                        'dataset' : dataset_id}

Machine Learning Models

Next, we have to choose our machine learning algorithms.
In this case we are going to evaluate some classical ones as well as two neural networks.

An example of a classical machine learning algorithms is Decision Tree regression. It is trained and tested as follows:

def train_test_decision_tree_regression(X_train, X_test,
                                        y_train, y_test,
                                        scorer,dataset_id,
                                        kfold_vs_size):
    decision_tree_regression = DecisionTreeRegressor(random_state=42)
    grid_parameters_decision_tree_regression = {'max_depth' : [None, 3,5,7,9,10,11]}
    start_time = time.time()
    grid_obj = GridSearchCV(decision_tree_regression,
                            param_grid=grid_parameters_decision_tree_regression,
                            cv=kfold_vs_size,
                            n_jobs=-1, scoring=scorer,
                            verbose=1)
    grid_fit = grid_obj.fit(X_train, y_train)
    training_time = time.time() - start_time
    best_decision_tree_regression = grid_fit.best_estimator_
    prediction = best_decision_tree_regression.predict(X_test)
    r2 = r2_score(y_test, prediction)
    mse = mean_squared_error(y_test, prediction)
    mae = mean_absolute_error(y_true=y_test, y_pred=prediction)
    
    # metrics for true values
    # r2 remains unchanged, mse, mea will change and cannot be scaled
    # because there is some physical meaning behind it
    prediction_true_scale = prediction * datasets[dataset_id]['scaler_array'][:,-(i+1)]
    y_test_true_scale = y_test * datasets[dataset_id]['scaler_array'][:,-(i+1)]
    mae_true_scale = mean_absolute_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    medae_true_scale = median_absolute_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    mse_true_scale = mean_squared_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    
    return {'Regression type' : 'Decision Tree Regression',
            'model' : grid_fit,
            'Predictions' : prediction,
            'R2' : r2,'MSE' : mse, 'MAE' : mae,
            'MSE_true_scale' : mse_true_scale,
            'RMSE_true_scale' : np.sqrt(mse_true_scale),
            'MAE_true_scale' : mae_true_scale,
            'MedAE_true_scale' : medae_true_scale,
            'Training time' : training_time,
            'dataset' : str(dataset_id) + str(-(i+1))}

And two neural networks using Keras (no need for detailed optimization with pure TensorFlow or PyTorch):

# simple model close to Ortigosa et. al (2007)

def build_baseline_model(input_dim):
    model = Sequential()
    model.add(Dense(input_dim, input_dim=input_dim, activation='sigmoid'))
    model.add(Dense(9, activation='sigmoid'))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae'])
    return model

def run_baseline_model(X_train, X_test,
                       y_train, y_test,
                       dataset_id,
                       epochs=1000,
                       validation_split=0.2,
                       batch_size=16):
    model = build_baseline_model(datasets[dataset_id]['X_train'].shape[1])
    
    callback_file_path = 'keras_models/model_baseline_model_'+str(dataset)+'_best.hdf5'
    checkpoint = callbacks.ModelCheckpoint(callback_file_path, monitor='val_loss', save_best_only=True, save_weights_only=True)
    start_time = time.time()
    model.fit(X_train, y_train,callbacks=[checkpoint], batch_size=batch_size, epochs=epochs, validation_split=validation_split)
    training_time = time.time() - start_time
    history= model.history.history
    
    # load best model
    model.load_weights(callback_file_path) 
    prediction = model.predict(X_test)
    r2 = r2_score(y_test, prediction)
    mse = mean_squared_error(y_test, prediction)
    mae = mean_absolute_error(y_true=y_test, y_pred=prediction)
    
    # metrics for true values
    # r2 remains unchanged, mse, mea will change and cannot be scaled
    # because there is some physical meaning behind it
    prediction_true_scale = prediction * datasets[dataset_id]['scaler_array'][:,-1]
    y_test_true_scale = y_test * datasets[dataset_id]['scaler_array'][:,-1]
    mae_true_scale = mean_absolute_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    medae_true_scale = median_absolute_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    mse_true_scale = mean_squared_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    
    
    return {'Regression type' : 'Baseline NN',
            'model' : [callback_file_path,history],
            'Predictions' : prediction,
            'R2' : r2, 'MSE' : mse, 'MAE' : mae,
            'MSE_true_scale' : mse_true_scale,
            'RMSE_true_scale' : np.sqrt(mse_true_scale),
            'MAE_true_scale' : mae_true_scale,
            'MedAE_true_scale' : medae_true_scale ,
            'Training time' : training_time,
            'dataset' : str(dataset_id) + str(-(i+1))}
def build_deeper_model(input_dim):
    model = Sequential()
    model.add(Dense(input_dim, input_dim=input_dim, activation='relu'))
    model.add(Dense(20, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(20, activation='relu'))
    model.add(Dropout(0.5))
    model.add(Dense(20, activation='relu'))
    model.add(Dense(1))
    model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mae'])
    return model

def run_deeper_model(X_train, X_test,
                       y_train, y_test,
                       dataset_id,
                       epochs=1000,
                       validation_split=0.2,
                       batch_size=16):
    model = build_deeper_model(datasets[dataset_id]['X_train'].shape[1])
    
    callback_file_path = 'keras_models/model_deeper_model_'+str(dataset)+'_best.hdf5'
    checkpoint = callbacks.ModelCheckpoint(callback_file_path, monitor='val_loss', save_best_only=True, save_weights_only=True)
    start_time = time.time()
    model.fit(X_train, y_train,callbacks=[checkpoint], batch_size=batch_size, epochs=epochs, validation_split=validation_split)
    training_time = time.time() - start_time
    history= model.history.history
    
    # load best model
    model.load_weights(callback_file_path) 
    prediction = model.predict(X_test)
    r2 = r2_score(y_test, prediction)
    mse = mean_squared_error(y_test, prediction)
    mae = mean_absolute_error(y_true=y_test, y_pred=prediction)
    
    # metrics for true values
    # r2 remains unchanged, mse, mea will change and cannot be scaled
    # because there is some physical meaning behind it
    prediction_true_scale = prediction * datasets[dataset_id]['scaler_array'][:,-1]
    y_test_true_scale = y_test * datasets[dataset_id]['scaler_array'][:,-1]
    mae_true_scale = mean_absolute_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    medae_true_scale = median_absolute_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    mse_true_scale = mean_squared_error(y_true=y_test_true_scale, y_pred=prediction_true_scale)
    
    
    return {'Regression type' : 'Deeper NN',
            'model' : [callback_file_path,history],
            'Predictions' : prediction,
            'R2' : r2, 'MSE' : mse, 'MAE' : mae,
            'MSE_true_scale' : mse_true_scale,
            'RMSE_true_scale' : np.sqrt(mse_true_scale),
            'MAE_true_scale' : mae_true_scale,
            'MedAE_true_scale' : medae_true_scale ,
            'Training time' : training_time,
            'dataset' : str(dataset_id) + str(-(i+1))}

Results

Regression type R2 MSE MAE MSE_true_scale RMSE_true_scale MAE_true_scale MedAE_true_scale
Linear Regression 0.543486 0.017410 0.108639 67.832007 8.236019 6.781256 6.518309
Decision Tree Regression 0.998138 0.000071 0.005219 0.276711 0.526033 0.325739 0.170000
SVM Regression 0.851072 0.005680 0.065834 22.128809 4.704127 4.109343 4.367709
Random Forest Regression 0.996198 0.000145 0.005843 0.564943 0.751627 0.364702 0.125792
AdaBoost Regression 0.989979 0.000382 0.015930 1.488950 1.220226 0.994369 0.871679
XGBoost Regression 0.998399 0.000061 0.003839 0.237850 0.487699 0.239658 0.125082
Baseline NN 0.763068 0.009036 0.074620 35.205081 5.933387 4.657783 4.176649
Deeper NN 0.942808 0.002181 0.028645 8.497950 2.915124 1.788016 1.370933


For visual assessment, we can plot predictions vs true values:

True values vs predictions for all regressors

This tells us that there are certainly different regions that show less linear behavior.

Discussion of results

If we have a look at the decision tree (end of this page), it almost seems like it is very “overfitted” since in branches out so much.
It seems to be reasonable. We certainly need more data for training, cross-validation and testing for final evaluation and probably a more robust models.

Acknowledgements

I would like to thank Roberto Lopez for making this dataset available.

Btw, this is how the decision tree model looks like:



Tree



0

Froude number <= 0.861
mse = 0.063
samples = 246
value = 0.182



1

Froude number <= 0.75
mse = 0.004
samples = 188
value = 0.057



0->1


True



292

Froude number <= 0.972
mse = 0.04
samples = 58
value = 0.586



0->292


False



2

Froude number <= 0.583
mse = 0.001
samples = 152
value = 0.03



1->2





223

Froude number <= 0.806
mse = 0.002
samples = 36
value = 0.171



1->223





293

Froude number <= 0.917
mse = 0.012
samples = 39
value = 0.465



292->293





370

Prismatic coeff <= 0.897
mse = 0.005
samples = 19
value = 0.836



292->370





21

Long pos <= -0.47
mse = 0.0
samples = 3
value = 0.003



22

mse = 0.0
samples = 1
value = 0.004



21->22





23

mse = 0.0
samples = 2
value = 0.003



21->23





24

Long pos <= -0.73
mse = 0.0
samples = 9
value = 0.004



25

Beam-draught ratio <= 0.741
mse = 0.0
samples = 3
value = 0.004



24->25





28

Length-beam ratio <= 0.967
mse = 0.0
samples = 6
value = 0.005



24->28





51

Beam-draught ratio <= 0.72
mse = 0.0
samples = 3
value = 0.01



53

Length-displacement ratio <= 0.996
mse = 0.0
samples = 2
value = 0.011



51->53





52

mse = 0.0
samples = 1
value = 0.009



51->52





56

Prismatic coeff <= 0.952
mse = 0.0
samples = 6
value = 0.009



57

Length-beam ratio <= 0.812
mse = 0.0
samples = 4
value = 0.008



56->57





60

mse = 0.0
samples = 2
value = 0.01



56->60





70

Long pos <= -0.23
mse = 0.0
samples = 6
value = 0.013



72

Length-beam ratio <= 0.915
mse = 0.0
samples = 2
value = 0.014



70->72





71

mse = 0.0
samples = 4
value = 0.012



70->71





75

Long pos <= -0.73
mse = 0.0
samples = 5
value = 0.011



76

Prismatic coeff <= 0.971
mse = 0.0
samples = 2
value = 0.011



75->76





79

Beam-draught ratio <= 0.763
mse = 0.0
samples = 3
value = 0.012



75->79





101

Length-beam ratio <= 0.868
mse = 0.0
samples = 5
value = 0.02



102

Prismatic coeff <= 0.926
mse = 0.0
samples = 4
value = 0.021



101->102





105

mse = 0.0
samples = 1
value = 0.019



101->105





118

Length-beam ratio <= 0.854
mse = 0.0
samples = 2
value = 0.029



119

mse = 0.0
samples = 1
value = 0.028



118->119





120

mse = 0.0
samples = 1
value = 0.03



118->120





124

Beam-draught ratio <= 0.786
mse = 0.0
samples = 7
value = 0.032



125

Long pos <= -0.23
mse = 0.0
samples = 6
value = 0.031



124->125





130

mse = 0.0
samples = 1
value = 0.035



124->130





151

Long pos <= -0.23
mse = 0.0
samples = 5
value = 0.042



153

Prismatic coeff <= 0.913
mse = 0.0
samples = 2
value = 0.042



151->153





152

mse = 0.0
samples = 3
value = 0.042



151->152





178

Length-beam ratio <= 0.868
mse = 0.0
samples = 3
value = 0.066



179

mse = 0.0
samples = 2
value = 0.066



178->179





180

mse = -0.0
samples = 1
value = 0.066



178->180





202

Beam-draught ratio <= 0.742
mse = 0.0
samples = 4
value = 0.086



203

Long pos <= -0.73
mse = 0.0
samples = 2
value = 0.084



202->203





206

Long pos <= -0.73
mse = 0.0
samples = 2
value = 0.088



202->206





209

Beam-draught ratio <= 0.743
mse = 0.0
samples = 2
value = 0.082



210

mse = 0.0
samples = 1
value = 0.083



209->210





211

mse = 0.0
samples = 1
value = 0.08



209->211





238

Prismatic coeff <= 0.913
mse = 0.0
samples = 2
value = 0.127



239

mse = 0.0
samples = 1
value = 0.127



238->239





240

mse = 0.0
samples = 1
value = 0.126



238->240





241

Beam-draught ratio <= 0.713
mse = 0.0
samples = 2
value = 0.125



242

mse = 0.0
samples = 1
value = 0.126



241->242





243

mse = 0.0
samples = 1
value = 0.124



241->243





271

Length-displacement ratio <= 0.929
mse = 0.0
samples = 2
value = 0.204



272

mse = 0.0
samples = 1
value = 0.204



271->272





273

mse = -0.0
samples = 1
value = 0.204



271->273





274

Length-displacement ratio <= 0.996
mse = 0.0
samples = 2
value = 0.206



275

mse = 0.0
samples = 1
value = 0.206



274->275





276

mse = 0.0
samples = 1
value = 0.205



274->276





284

Length-displacement ratio <= 0.961
mse = 0.0
samples = 2
value = 0.199



285

mse = 0.0
samples = 1
value = 0.2



284->285





286

mse = 0.0
samples = 1
value = 0.198



284->286





349

Prismatic coeff <= 0.944
mse = 0.0
samples = 3
value = 0.529



350

Beam-draught ratio <= 0.868
mse = 0.0
samples = 2
value = 0.532



349->350





353

mse = 0.0
samples = 1
value = 0.525



349->353





388

Length-beam ratio <= 0.815
mse = 0.0
samples = 2
value = 0.798



389

mse = 0.0
samples = 1
value = 0.803



388->389





390

mse = 0.0
samples = 1
value = 0.793



388->390





26

mse = 0.0
samples = 2
value = 0.004



25->26





27

mse = -0.0
samples = 1
value = 0.003



25->27





29

Length-displacement ratio <= 0.929
mse = 0.0
samples = 5
value = 0.004



28->29





34

mse = 0.0
samples = 1
value = 0.006



28->34





54

mse = 0.0
samples = 1
value = 0.01



53->54





55

mse = -0.0
samples = 1
value = 0.011



53->55





58

mse = 0.0
samples = 1
value = 0.009



57->58





59

mse = 0.0
samples = 3
value = 0.008



57->59





73

mse = 0.0
samples = 1
value = 0.015



72->73





74

mse = 0.0
samples = 1
value = 0.013



72->74





77

mse = 0.0
samples = 1
value = 0.011



76->77





78

mse = 0.0
samples = 1
value = 0.01



76->78





80

mse = 0.0
samples = 1
value = 0.013



79->80





81

mse = -0.0
samples = 2
value = 0.012



79->81





103

mse = 0.0
samples = 1
value = 0.02



102->103





104

mse = 0.0
samples = 3
value = 0.021



102->104





127

Length-beam ratio <= 0.915
mse = 0.0
samples = 2
value = 0.031



125->127





126

mse = 0.0
samples = 4
value = 0.032



125->126





154

mse = 0.0
samples = 1
value = 0.042



153->154





155

mse = 0.0
samples = 1
value = 0.043



153->155





204

mse = 0.0
samples = 1
value = 0.084



203->204





205

mse = -0.0
samples = 1
value = 0.083



203->205





207

mse = 0.0
samples = 1
value = 0.087



206->207





208

mse = -0.0
samples = 1
value = 0.089



206->208





351

mse = 0.0
samples = 1
value = 0.532



350->351





352

mse = 0.0
samples = 1
value = 0.531



350->352





31

Length-beam ratio <= 0.868
mse = 0.0
samples = 4
value = 0.005



29->31





30

mse = 0.0
samples = 1
value = 0.004



29->30





128

mse = 0.0
samples = 1
value = 0.031



127->128





129

mse = -0.0
samples = 1
value = 0.03



127->129





32

mse = 0.0
samples = 2
value = 0.005



31->32





33

mse = 0.0
samples = 2
value = 0.004



31->33





3

Froude number <= 0.472
mse = 0.0
samples = 100
value = 0.013



2->3





132

Froude number <= 0.694
mse = 0.0
samples = 52
value = 0.064



2->132





224

Long pos <= -0.22
mse = 0.0
samples = 18
value = 0.13



223->224





257

Long pos <= -0.22
mse = 0.0
samples = 18
value = 0.212



223->257





294

Prismatic coeff <= 0.897
mse = 0.001
samples = 18
value = 0.355



293->294





329

Prismatic coeff <= 0.897
mse = 0.002
samples = 21
value = 0.559



293->329





371

Beam-draught ratio <= 0.607
mse = 0.002
samples = 4
value = 0.944



370->371





378

Prismatic coeff <= 0.966
mse = 0.002
samples = 15
value = 0.807



370->378





4

Froude number <= 0.361
mse = 0.0
samples = 66
value = 0.007



3->4





83

Froude number <= 0.528
mse = 0.0
samples = 34
value = 0.024



3->83





133

Froude number <= 0.639
mse = 0.0
samples = 33
value = 0.052



132->133





190

Beam-draught ratio <= 0.695
mse = 0.0
samples = 19
value = 0.085



132->190





225

Beam-draught ratio <= 0.689
mse = 0.0
samples = 15
value = 0.125



224->225





252

Prismatic coeff <= 0.971
mse = 0.0
samples = 3
value = 0.154



224->252





258

Prismatic coeff <= 0.897
mse = 0.0
samples = 15
value = 0.205



257->258





287

Beam-draught ratio <= 0.723
mse = 0.0
samples = 3
value = 0.248



257->287





295

Long pos <= -0.23
mse = 0.0
samples = 5
value = 0.398



294->295





304

Long pos <= -0.45
mse = 0.0
samples = 13
value = 0.338



294->304





330

Long pos <= -0.23
mse = 0.001
samples = 5
value = 0.627



329->330





339

Long pos <= -0.45
mse = 0.001
samples = 16
value = 0.538



329->339





373

Long pos <= -0.23
mse = 0.001
samples = 3
value = 0.925



371->373





372

mse = 0.0
samples = 1
value = 1.0



371->372





379

Length-displacement ratio <= 0.996
mse = 0.001
samples = 11
value = 0.824



378->379





398

Beam-draught ratio <= 0.792
mse = 0.002
samples = 4
value = 0.76



378->398





5

Froude number <= 0.306
mse = 0.0
samples = 32
value = 0.003



4->5





38

Froude number <= 0.417
mse = 0.0
samples = 34
value = 0.01



4->38





84

Length-displacement ratio <= 0.997
mse = 0.0
samples = 17
value = 0.019



83->84





107

Beam-draught ratio <= 0.695
mse = 0.0
samples = 17
value = 0.03



83->107





134

Beam-draught ratio <= 0.695
mse = 0.0
samples = 16
value = 0.042



133->134





161

Beam-draught ratio <= 0.695
mse = 0.0
samples = 17
value = 0.062



133->161





191

Beam-draught ratio <= 0.541
mse = 0.0
samples = 5
value = 0.07



190->191





196

Prismatic coeff <= 0.988
mse = 0.0
samples = 14
value = 0.09



190->196





226

Beam-draught ratio <= 0.628
mse = 0.0
samples = 4
value = 0.115



225->226





233

Beam-draught ratio <= 0.781
mse = 0.0
samples = 11
value = 0.128



225->233





253

Length-displacement ratio <= 0.929
mse = 0.0
samples = 2
value = 0.148



252->253





256

mse = 0.0
samples = 1
value = 0.166



252->256





259

Long pos <= -0.73
mse = 0.0
samples = 3
value = 0.223



258->259





264

Beam-draught ratio <= 0.647
mse = 0.0
samples = 12
value = 0.2



258->264





289

Beam-draught ratio <= 0.769
mse = 0.0
samples = 2
value = 0.242



287->289





288

mse = 0.0
samples = 1
value = 0.261



287->288





296

Beam-draught ratio <= 0.607
mse = 0.0
samples = 4
value = 0.388



295->296





303

mse = -0.0
samples = 1
value = 0.438



295->303





305

Prismatic coeff <= 0.966
mse = 0.0
samples = 10
value = 0.331



304->305





324

Prismatic coeff <= 0.926
mse = 0.0
samples = 3
value = 0.364



304->324





331

Beam-draught ratio <= 0.607
mse = 0.001
samples = 4
value = 0.616



330->331





338

mse = -0.0
samples = 1
value = 0.669



330->338





340

Prismatic coeff <= 0.966
mse = 0.001
samples = 12
value = 0.526



339->340





363

Length-displacement ratio <= 0.929
mse = 0.0
samples = 4
value = 0.576



339->363





374

Long pos <= -0.73
mse = 0.0
samples = 2
value = 0.9



373->374





377

mse = 0.0
samples = 1
value = 0.975



373->377





380

Long pos <= -0.45
mse = 0.001
samples = 10
value = 0.831



379->380





397

mse = -0.0
samples = 1
value = 0.758



379->397





399

Long pos <= -0.47
mse = 0.0
samples = 3
value = 0.738



398->399





404

mse = -0.0
samples = 1
value = 0.825



398->404





6

Length-beam ratio <= 0.938
mse = 0.0
samples = 15
value = 0.002



5->6





17

Length-displacement ratio <= 0.997
mse = 0.0
samples = 17
value = 0.004



5->17





39

Beam-draught ratio <= 0.635
mse = 0.0
samples = 17
value = 0.008



38->39





62

Length-displacement ratio <= 0.997
mse = 0.0
samples = 17
value = 0.013



38->62





85

Length-displacement ratio <= 0.885
mse = 0.0
samples = 16
value = 0.019



84->85





106

mse = -0.0
samples = 1
value = 0.025



84->106





108

Beam-draught ratio <= 0.547
mse = 0.0
samples = 4
value = 0.025



107->108





113

Length-beam ratio <= 0.754
mse = 0.0
samples = 13
value = 0.031



107->113





135

Length-beam ratio <= 0.867
mse = 0.0
samples = 4
value = 0.035



134->135





142

Beam-draught ratio <= 0.849
mse = 0.0
samples = 12
value = 0.044



134->142





162

Length-displacement ratio <= 0.885
mse = 0.0
samples = 4
value = 0.048



161->162





169

Prismatic coeff <= 0.958
mse = 0.0
samples = 13
value = 0.067



161->169





193

Prismatic coeff <= 0.915
mse = 0.0
samples = 4
value = 0.072



191->193





192

mse = 0.0
samples = 1
value = 0.062



191->192





197

Long pos <= -0.22
mse = 0.0
samples = 11
value = 0.086



196->197





218

Long pos <= -0.23
mse = 0.0
samples = 3
value = 0.103



196->218





227

Long pos <= -0.47
mse = 0.0
samples = 3
value = 0.113



226->227





232

mse = 0.0
samples = 1
value = 0.12



226->232





234

Long pos <= -0.45
mse = 0.0
samples = 8
value = 0.126



233->234





247

Prismatic coeff <= 0.971
mse = 0.0
samples = 3
value = 0.135



233->247





254

mse = 0.0
samples = 1
value = 0.145



253->254





255

mse = 0.0
samples = 1
value = 0.151



253->255





261

Beam-draught ratio <= 0.607
mse = 0.0
samples = 2
value = 0.225



259->261





260

mse = 0.0
samples = 1
value = 0.22



259->260





266

Prismatic coeff <= 0.944
mse = 0.0
samples = 11
value = 0.202



264->266





265

mse = 0.0
samples = 1
value = 0.185



264->265





290

mse = 0.0
samples = 1
value = 0.239



289->290





291

mse = -0.0
samples = 1
value = 0.244



289->291





298

Long pos <= -0.73
mse = 0.0
samples = 3
value = 0.383



296->298





297

mse = 0.0
samples = 1
value = 0.403



296->297





306

Length-beam ratio <= 0.812
mse = 0.0
samples = 7
value = 0.335



305->306





319

Beam-draught ratio <= 0.749
mse = 0.0
samples = 3
value = 0.319



305->319





326

Length-beam ratio <= 0.915
mse = 0.0
samples = 2
value = 0.37



324->326





325

mse = 0.0
samples = 1
value = 0.352



324->325





333

Length-beam ratio <= 0.916
mse = 0.0
samples = 3
value = 0.601



331->333





332

mse = 0.0
samples = 1
value = 0.662



331->332





341

Length-beam ratio <= 0.985
mse = 0.0
samples = 8
value = 0.539



340->341





356

Long pos <= -0.74
mse = 0.0
samples = 4
value = 0.5



340->356





365

Prismatic coeff <= 0.971
mse = 0.0
samples = 3
value = 0.565



363->365





364

mse = 0.0
samples = 1
value = 0.611



363->364





375

mse = 0.0
samples = 1
value = 0.895



374->375





376

mse = 0.0
samples = 1
value = 0.905



374->376





381

Beam-draught ratio <= 0.563
mse = 0.001
samples = 7
value = 0.82



380->381





392

Length-displacement ratio <= 0.929
mse = 0.001
samples = 3
value = 0.857



380->392





401

Beam-draught ratio <= 0.785
mse = 0.0
samples = 2
value = 0.751



399->401





400

mse = 0.0
samples = 1
value = 0.711



399->400





7

Long pos <= -0.74
mse = 0.0
samples = 11
value = 0.002



6->7





14

Prismatic coeff <= 0.945
mse = 0.0
samples = 4
value = 0.001



6->14





18

Prismatic coeff <= 0.988
mse = 0.0
samples = 16
value = 0.004



17->18





37

mse = 0.0
samples = 1
value = 0.007



17->37





40

Long pos <= -0.47
mse = 0.0
samples = 3
value = 0.006



39->40





43

Long pos <= -0.74
mse = 0.0
samples = 14
value = 0.008



39->43





63

Length-displacement ratio <= 0.846
mse = 0.0
samples = 16
value = 0.012



62->63





82

mse = -0.0
samples = 1
value = 0.017



62->82





86

Long pos <= -0.47
mse = 0.0
samples = 3
value = 0.017



85->86





89

Beam-draught ratio <= 0.695
mse = 0.0
samples = 13
value = 0.02



85->89





110

Length-displacement ratio <= 0.928
mse = 0.0
samples = 3
value = 0.026



108->110





109

mse = 0.0
samples = 1
value = 0.023



108->109





115

Length-displacement ratio <= 0.996
mse = 0.0
samples = 12
value = 0.031



113->115





114

mse = 0.0
samples = 1
value = 0.026



113->114





137

Beam-draught ratio <= 0.689
mse = 0.0
samples = 3
value = 0.036



135->137





136

mse = 0.0
samples = 1
value = 0.033



135->136





143

Length-displacement ratio <= 0.929
mse = 0.0
samples = 10
value = 0.043



142->143





158

Length-displacement ratio <= 0.965
mse = 0.0
samples = 2
value = 0.048



142->158





164

Length-beam ratio <= 0.982
mse = 0.0
samples = 3
value = 0.05



162->164





163

mse = 0.0
samples = 1
value = 0.044



162->163





170

Beam-draught ratio <= 0.737
mse = 0.0
samples = 8
value = 0.064



169->170





183

Long pos <= -0.23
mse = 0.0
samples = 5
value = 0.072



169->183





194

mse = 0.0
samples = 2
value = 0.071



193->194





195

mse = 0.0
samples = 2
value = 0.074



193->195





198

Prismatic coeff <= 0.966
mse = 0.0
samples = 8
value = 0.085



197->198





213

Length-displacement ratio <= 0.929
mse = 0.0
samples = 3
value = 0.091



197->213





219

Length-displacement ratio <= 0.887
mse = 0.0
samples = 2
value = 0.098



218->219





222

mse = 0.0
samples = 1
value = 0.114



218->222





229

Length-beam ratio <= 0.933
mse = 0.0
samples = 2
value = 0.115



227->229





228

mse = 0.0
samples = 1
value = 0.11



227->228





235

Prismatic coeff <= 0.949
mse = 0.0
samples = 7
value = 0.127



234->235





246

mse = -0.0
samples = 1
value = 0.118



234->246





249

Length-displacement ratio <= 0.887
mse = 0.0
samples = 2
value = 0.137



247->249





248

mse = 0.0
samples = 1
value = 0.132



247->248





262

mse = 0.0
samples = 1
value = 0.224



261->262





263

mse = 0.0
samples = 1
value = 0.226



261->263





267

Beam-draught ratio <= 0.737
mse = 0.0
samples = 6
value = 0.205



266->267





278

Beam-draught ratio <= 0.743
mse = 0.0
samples = 5
value = 0.198



266->278





300

Length-displacement ratio <= 0.96
mse = 0.0
samples = 2
value = 0.385



298->300





299

mse = 0.0
samples = 1
value = 0.377



298->299





307

Length-displacement ratio <= 0.889
mse = 0.0
samples = 2
value = 0.344



306->307





310

Length-beam ratio <= 0.92
mse = 0.0
samples = 5
value = 0.332



306->310





321

Beam-draught ratio <= 0.786
mse = 0.0
samples = 2
value = 0.325



319->321





320

mse = 0.0
samples = 1
value = 0.307



319->320





327

mse = 0.0
samples = 1
value = 0.371



326->327





328

mse = 0.0
samples = 1
value = 0.369



326->328





334

Beam-draught ratio <= 0.694
mse = 0.0
samples = 2
value = 0.597



333->334





337

mse = 0.0
samples = 1
value = 0.608



333->337





342

Length-displacement ratio <= 0.929
mse = 0.0
samples = 7
value = 0.535



341->342





355

mse = 0.0
samples = 1
value = 0.561



341->355





358

Length-beam ratio <= 0.938
mse = 0.0
samples = 3
value = 0.493



356->358





357

mse = 0.0
samples = 1
value = 0.52



356->357





366

Beam-draught ratio <= 0.754
mse = 0.0
samples = 2
value = 0.57



365->366





369

mse = 0.0
samples = 1
value = 0.555



365->369





383

Length-beam ratio <= 0.985
mse = 0.0
samples = 6
value = 0.811



381->383





382

mse = 0.0
samples = 1
value = 0.869



381->382





394

Beam-draught ratio <= 0.754
mse = 0.0
samples = 2
value = 0.842



392->394





393

mse = 0.0
samples = 1
value = 0.888



392->393





402

mse = 0.0
samples = 1
value = 0.755



401->402





403

mse = 0.0
samples = 1
value = 0.748



401->403





9

Prismatic coeff <= 0.952
mse = 0.0
samples = 8
value = 0.002



7->9





8

mse = 0.0
samples = 3
value = 0.001



7->8





15

mse = 0.0
samples = 2
value = 0.001



14->15





16

mse = 0.0
samples = 2
value = 0.0



14->16





19

Prismatic coeff <= 0.962
mse = 0.0
samples = 13
value = 0.004



18->19





36

mse = 0.0
samples = 3
value = 0.003



18->36





41

mse = 0.0
samples = 1
value = 0.007



40->41





42

mse = 0.0
samples = 2
value = 0.006



40->42





44

Beam-draught ratio <= 0.741
mse = 0.0
samples = 4
value = 0.007



43->44





49

Prismatic coeff <= 0.988
mse = 0.0
samples = 10
value = 0.009



43->49





65

Length-beam ratio <= 0.854
mse = 0.0
samples = 14
value = 0.013



63->65





64

mse = 0.0
samples = 2
value = 0.01



63->64





87

mse = 0.0
samples = 1
value = 0.017



86->87





88

mse = 0.0
samples = 2
value = 0.016



86->88





90

Prismatic coeff <= 0.916
mse = 0.0
samples = 3
value = 0.018



89->90





95

Long pos <= -0.74
mse = 0.0
samples = 10
value = 0.02



89->95





111

mse = 0.0
samples = 1
value = 0.026



110->111





112

mse = 0.0
samples = 2
value = 0.025



110->112





116

Prismatic coeff <= 0.925
mse = 0.0
samples = 11
value = 0.031



115->116





131

mse = 0.0
samples = 1
value = 0.036



115->131





138

Beam-draught ratio <= 0.628
mse = 0.0
samples = 2
value = 0.037



137->138





141

mse = -0.0
samples = 1
value = 0.035



137->141





144

Long pos <= -0.74
mse = 0.0
samples = 3
value = 0.045



143->144





149

Length-beam ratio <= 0.967
mse = 0.0
samples = 7
value = 0.042



143->149





159

mse = 0.0
samples = 1
value = 0.047



158->159





160

mse = 0.0
samples = 1
value = 0.05



158->160





165

Length-displacement ratio <= 0.96
mse = 0.0
samples = 2
value = 0.049



164->165





168

mse = -0.0
samples = 1
value = 0.053



164->168





171

Beam-draught ratio <= 0.719
mse = 0.0
samples = 3
value = 0.06



170->171





176

Length-beam ratio <= 0.92
mse = 0.0
samples = 5
value = 0.066



170->176





184

Length-beam ratio <= 0.808
mse = 0.0
samples = 4
value = 0.069



183->184





189

mse = 0.0
samples = 1
value = 0.081



183->189





199

Prismatic coeff <= 0.925
mse = 0.0
samples = 7
value = 0.083



198->199





212

mse = -0.0
samples = 1
value = 0.093



198->212





215

Prismatic coeff <= 0.913
mse = 0.0
samples = 2
value = 0.088



213->215





214

mse = 0.0
samples = 1
value = 0.095



213->214





220

mse = 0.0
samples = 1
value = 0.096



219->220





221

mse = 0.0
samples = 1
value = 0.099



219->221





230

mse = 0.0
samples = 1
value = 0.115



229->230





231

mse = 0.0
samples = 1
value = 0.114



229->231





236

Length-beam ratio <= 0.967
mse = 0.0
samples = 5
value = 0.126



235->236





245

mse = 0.0
samples = 2
value = 0.129



235->245





250

mse = 0.0
samples = 1
value = 0.136



249->250





251

mse = -0.0
samples = 1
value = 0.138



249->251





269

Beam-draught ratio <= 0.963
mse = 0.0
samples = 5
value = 0.206



267->269





268

mse = 0.0
samples = 1
value = 0.199



267->268





280

Beam-draught ratio <= 0.763
mse = 0.0
samples = 4
value = 0.197



278->280





279

mse = 0.0
samples = 1
value = 0.206



278->279





301

mse = 0.0
samples = 1
value = 0.384



300->301





302

mse = -0.0
samples = 1
value = 0.387



300->302





308

mse = 0.0
samples = 1
value = 0.345



307->308





309

mse = 0.0
samples = 1
value = 0.343



307->309





311

Long pos <= -0.47
mse = 0.0
samples = 4
value = 0.329



310->311





318

mse = -0.0
samples = 1
value = 0.345



310->318





322

mse = 0.0
samples = 1
value = 0.323



321->322





323

mse = -0.0
samples = 1
value = 0.327



321->323





335

mse = 0.0
samples = 1
value = 0.599



334->335





336

mse = 0.0
samples = 1
value = 0.595



334->336





343

Beam-draught ratio <= 0.743
mse = 0.0
samples = 2
value = 0.549



342->343





346

Length-beam ratio <= 0.967
mse = 0.0
samples = 5
value = 0.53



342->346





359

Prismatic coeff <= 0.988
mse = 0.0
samples = 2
value = 0.485



358->359





362

mse = -0.0
samples = 1
value = 0.509



358->362





367

mse = 0.0
samples = 1
value = 0.568



366->367





368

mse = 0.0
samples = 1
value = 0.571



366->368





384

Long pos <= -0.74
mse = 0.0
samples = 5
value = 0.808



383->384





391

mse = -0.0
samples = 1
value = 0.83



383->391





395

mse = 0.0
samples = 1
value = 0.833



394->395





396

mse = -0.0
samples = 1
value = 0.85



394->396





10

Prismatic coeff <= 0.926
mse = 0.0
samples = 6
value = 0.002



9->10





13

mse = -0.0
samples = 2
value = 0.003



9->13





20

Beam-draught ratio <= 0.629
mse = 0.0
samples = 12
value = 0.004



19->20





35

mse = 0.0
samples = 1
value = 0.006



19->35





46

Beam-draught ratio <= 0.769
mse = 0.0
samples = 2
value = 0.006



44->46





45

mse = 0.0
samples = 2
value = 0.007



44->45





50

Prismatic coeff <= 0.941
mse = 0.0
samples = 9
value = 0.009



49->50





61

mse = 0.0
samples = 1
value = 0.006



49->61





66

Length-displacement ratio <= 0.889
mse = 0.0
samples = 3
value = 0.014



65->66





69

Beam-draught ratio <= 0.741
mse = 0.0
samples = 11
value = 0.012



65->69





91

Length-beam ratio <= 0.916
mse = 0.0
samples = 2
value = 0.018



90->91





94

mse = 0.0
samples = 1
value = 0.017



90->94





96

Beam-draught ratio <= 0.741
mse = 0.0
samples = 3
value = 0.019



95->96





99

Beam-draught ratio <= 0.732
mse = 0.0
samples = 7
value = 0.021



95->99





117

Long pos <= -0.22
mse = 0.0
samples = 3
value = 0.03



116->117





122

Long pos <= -0.74
mse = 0.0
samples = 8
value = 0.032



116->122





139

mse = 0.0
samples = 1
value = 0.037



138->139





140

mse = 0.0
samples = 1
value = 0.037



138->140





146

Length-displacement ratio <= 0.888
mse = 0.0
samples = 2
value = 0.046



144->146





145

mse = 0.0
samples = 1
value = 0.044



144->145





150

Beam-draught ratio <= 0.759
mse = 0.0
samples = 6
value = 0.042



149->150





157

mse = -0.0
samples = 1
value = 0.045



149->157





166

mse = 0.0
samples = 1
value = 0.05



165->166





167

mse = -0.0
samples = 1
value = 0.048



165->167





173

Long pos <= -0.5
mse = 0.0
samples = 2
value = 0.061



171->173





172

mse = 0.0
samples = 1
value = 0.059



171->172





177

Beam-draught ratio <= 0.963
mse = 0.0
samples = 4
value = 0.066



176->177





182

mse = -0.0
samples = 1
value = 0.064



176->182





186

Length-beam ratio <= 0.938
mse = 0.0
samples = 3
value = 0.07



184->186





185

mse = 0.0
samples = 1
value = 0.066



184->185





201

Prismatic coeff <= 0.944
mse = 0.0
samples = 6
value = 0.084



199->201





200

mse = 0.0
samples = 1
value = 0.077



199->200





216

mse = 0.0
samples = 1
value = 0.087



215->216





217

mse = -0.0
samples = 1
value = 0.089



215->217





237

Length-beam ratio <= 0.915
mse = 0.0
samples = 4
value = 0.126



236->237





244

mse = 0.0
samples = 1
value = 0.129



236->244





270

Length-displacement ratio <= 0.961
mse = 0.0
samples = 4
value = 0.205



269->270





277

mse = -0.0
samples = 1
value = 0.21



269->277





282

Length-beam ratio <= 0.808
mse = 0.0
samples = 3
value = 0.198



280->282





281

mse = 0.0
samples = 1
value = 0.191



280->281





312

Long pos <= -0.74
mse = 0.0
samples = 2
value = 0.334



311->312





315

Length-displacement ratio <= 0.965
mse = 0.0
samples = 2
value = 0.325



311->315





344

mse = 0.0
samples = 1
value = 0.544



343->344





345

mse = -0.0
samples = 1
value = 0.554



343->345





347

Prismatic coeff <= 0.939
mse = 0.0
samples = 4
value = 0.527



346->347





354

mse = -0.0
samples = 1
value = 0.544



346->354





360

mse = 0.0
samples = 1
value = 0.482



359->360





361

mse = 0.0
samples = 1
value = 0.488



359->361





386

Beam-draught ratio <= 0.743
mse = 0.0
samples = 4
value = 0.802



384->386





385

mse = 0.0
samples = 1
value = 0.829



384->385





11

mse = 0.0
samples = 2
value = 0.002



10->11





12

mse = 0.0
samples = 4
value = 0.002



10->12





20->21





20->24





47

mse = 0.0
samples = 1
value = 0.006



46->47





48

mse = 0.0
samples = 1
value = 0.005



46->48





50->51





50->56





67

mse = 0.0
samples = 1
value = 0.015



66->67





68

mse = 0.0
samples = 2
value = 0.014



66->68





69->70





69->75





92

mse = 0.0
samples = 1
value = 0.018



91->92





93

mse = 0.0
samples = 1
value = 0.018



91->93





97

mse = 0.0
samples = 2
value = 0.019



96->97





98

mse = -0.0
samples = 1
value = 0.018



96->98





99->101





100

mse = 0.0
samples = 2
value = 0.022



99->100





117->118





121

mse = 0.0
samples = 1
value = 0.031



117->121





122->124





123

mse = 0.0
samples = 1
value = 0.03



122->123





147

mse = 0.0
samples = 1
value = 0.045



146->147





148

mse = 0.0
samples = 1
value = 0.046



146->148





150->151





156

mse = -0.0
samples = 1
value = 0.04



150->156





174

mse = 0.0
samples = 1
value = 0.062



173->174





175

mse = 0.0
samples = 1
value = 0.06



173->175





177->178





181

mse = 0.0
samples = 1
value = 0.067



177->181





187

mse = 0.0
samples = 2
value = 0.07



186->187





188

mse = 0.0
samples = 1
value = 0.071



186->188





201->202





201->209





237->238





237->241





270->271





270->274





282->284





283

mse = 0.0
samples = 1
value = 0.197



282->283





313

mse = 0.0
samples = 1
value = 0.337



312->313





314

mse = 0.0
samples = 1
value = 0.331



312->314





316

mse = 0.0
samples = 1
value = 0.322



315->316





317

mse = 0.0
samples = 1
value = 0.327



315->317





347->349





348

mse = 0.0
samples = 1
value = 0.518



347->348





386->388





387

mse = 0.0
samples = 2
value = 0.807



386->387