def test_too_many_components(self): # do not change n_components d = table(5, 5, 1) model = PLSRegressionLearner(n_components=4)(d) self.assertEqual(model.skl_model.n_components, 4) # need to use fewer components; column limited d = table(6, 5, 1) model = PLSRegressionLearner(n_components=6)(d) self.assertEqual(model.skl_model.n_components, 4) # need to use fewer components; row limited d = table(5, 6, 1) model = PLSRegressionLearner(n_components=6)(d) self.assertEqual(model.skl_model.n_components, 4)
def test_too_many_components(self): # do not change d = table(5, 5, 1) model = PLSRegressionLearner(n_components=5)(d) self.assertEqual(model.skl_model.n_components, 5) # need to use less components d = table(6, 5, 1) model = PLSRegressionLearner(n_components=6)(d) self.assertEqual(model.skl_model.n_components, 5) # number of components only depends on the number of columns d = table(5, 6, 1) model = PLSRegressionLearner(n_components=6)(d) self.assertEqual(model.skl_model.n_components, 6)
def test_allow_y_dim(self): """ The current PLS version allows only a single Y dimension. """ d = table(10, 5, 1) learner = PLSRegressionLearner(n_components=2) learner(d) for n_class_vars in [0, 2]: d = table(10, 5, n_class_vars) with self.assertRaises(ValueError): learner(d)
def test_compare_to_sklearn(self): d = table(10, 5, 1) d.X = np.random.RandomState(0).rand(*d.X.shape) d.Y = np.random.RandomState(0).rand(*d.Y.shape) orange_model = PLSRegressionLearner()(d) scikit_model = PLSRegression().fit(d.X, d.Y) np.testing.assert_almost_equal( scikit_model.predict(d.X).ravel(), orange_model(d)) np.testing.assert_almost_equal(scikit_model.coef_, orange_model.coefficients)
def create_learner(self): common_args = {'preprocessors': self.preprocessors} return PLSRegressionLearner(n_components=self.n_components, max_iter=self.max_iter, **common_args)