示例#1
0
    def test_regressor_modifications(self):
        regressor = KernelRidge(alpha=1e-8, kernel="rbf", gamma=0.1)
        kpcovr = self.model(mixing=0.5,
                            regressor=regressor,
                            kernel="rbf",
                            gamma=0.1)

        # KPCovR regressor matches the original
        self.assertTrue(
            regressor.get_params() == kpcovr.regressor.get_params())

        # KPCovR regressor updates its parameters
        # to match the original regressor
        regressor.set_params(gamma=0.2)
        self.assertTrue(
            regressor.get_params() == kpcovr.regressor.get_params())

        # Fitting regressor outside KPCovR fits the KPCovR regressor
        regressor.fit(self.X, self.Y)
        self.assertTrue(hasattr(kpcovr.regressor, "dual_coef_"))

        # Raise error during KPCovR fit since regressor and KPCovR
        # kernel parameters now inconsistent
        with self.assertRaises(ValueError) as cm:
            kpcovr.fit(self.X, self.Y)
            self.assertTrue(
                str(cm.message),
                "Kernel parameter mismatch: the regressor has kernel parameters "
                "{kernel: linear, gamma: 0.2, degree: 3, coef0: 1, kernel_params: None}"
                " and KernelPCovR was initialized with kernel parameters "
                "{kernel: linear, gamma: 0.1, degree: 3, coef0: 1, kernel_params: None}",
            )
示例#2
0
def fun_krr_fs(x, *args):
    X, y, flag, n_splits, random_seed = args
    clf = KernelRidge(kernel='rbf', )
    n_samples, n_var = X.shape

    kernel = {
        2: 'linear',
        3: 'poly',
        0: 'rbf',
        1: 'sigmoid',
        4: 'laplacian',
        5: 'chi2'
    }
    p = {
        'alpha': x[0],
        'kernel': kernel[int(round(x[1]))],
        'gamma': x[2],
        'degree': int(round(x[3])),
        'coef0': x[4],
        'kernel_params': {
            'C': x[5],
        },
    }
    clf.set_params(**p)
    n_param = len(p)
    if len(x) <= n_param:
        ft = np.array([1 for i in range(n_var)])
        ft = np.where(ft > 0.5)
    else:
        ft = np.array([1 if k > 0.5 else 0 for k in x[2::]])
        ft = np.where(ft > 0.5)

    n_splits = n_splits
    try:
        #cv=KFold(n_splits=n_splits, shuffle=True, random_state=random_seed)
        cv = KFold(n_splits=n_splits,
                   shuffle=True,
                   random_state=int(random_seed))
        #cv=StratifiedKFold(n_splits=n_splits, shuffle=True, random_state=int(random_seed))
        y_p = cross_val_predict(clf, X, y, cv=cv, n_jobs=1)

        #r =  mean_squared_error(y,y_p)**0.5
        r = RMSE(y_p, y)
        r2 = MAPE(y_p, y)
        r3 = RRMSE(y_p, y)
        r4 = -r2_score(y_p, y)
        #r =  -accuracy_score(y,y_p)
        #r =  -precision_score(y,y_p)
        #r =  -f1_score(y,y_p,average='weighted')

    except:
        y_p = [None]
        r = 1e12

#   print (r,'\t',p,'\t',ft)
    if flag == 'eval':
        return r
    else:
        clf.fit(X[:, ft].squeeze(), y)
        return {
            'Y_TRUE': y,
            'Y_PRED': y_p,
            'EST_PARAMS': p,
            'PARAMS': x,
            'EST_NAME': 'KRR',
            'ESTIMATOR': clf,
            'ACTIVE_VAR': ft,
            'DATA': X,
            'SEED': random_seed,
            'ERROR_TRAIN': {
                'RMSE': r,
                'MAPE': r2,
                'RRMSE': r3,
                'R2_SCORE': r4
            }
        }
示例#3
0
n_alphas = 50
alphas = np.logspace(-1, 8, n_alphas)
ridge = Ridge(fit_intercept=True)
kernel_ridge = KernelRidge(kernel='poly', gamma=1, degree=3, coef0=1)

test_scores_ridge = []
test_scores_kernel = []

for alpha in alphas:
    ridge.set_params(alpha=alpha)
    ridge.fit(X_train_sc, y_train_sc)
    test_mse = mean_squared_error_scorer(ridge, X_test_sc, y_test_sc)
    test_scores_ridge.append(test_mse)

    kernel_ridge.set_params(alpha=alpha)
    kernel_ridge.fit(X_train_sc, y_train_sc)
    test_mse = mean_squared_error_scorer(kernel_ridge, X_test_sc, y_test_sc)
    test_scores_kernel.append(test_mse)

poly = PolynomialNetworkRegressor(degree=3,
                                  n_components=2,
                                  tol=1e-3,
                                  warm_start=True,
                                  random_state=0)

test_scores_poly = []

for alpha in alphas:
    poly.set_params(beta=alpha)
    poly.fit(X_train_sc, y_train_sc)
n_alphas = 50
alphas = np.logspace(-1, 8, n_alphas)
ridge = Ridge(fit_intercept=True)
kernel_ridge = KernelRidge(kernel='poly', gamma=1, degree=3, coef0=1)

test_scores_ridge = []
test_scores_kernel = []

for alpha in alphas:
    ridge.set_params(alpha=alpha)
    ridge.fit(X_train_sc, y_train_sc)
    test_mse = mean_squared_error_scorer(ridge, X_test_sc, y_test_sc)
    test_scores_ridge.append(test_mse)

    kernel_ridge.set_params(alpha=alpha)
    kernel_ridge.fit(X_train_sc, y_train_sc)
    test_mse = mean_squared_error_scorer(kernel_ridge, X_test_sc, y_test_sc)
    test_scores_kernel.append(test_mse)


poly = PolynomialNetworkRegressor(degree=3, n_components=2, tol=1e-3,
                                  warm_start=True, random_state=0)

test_scores_poly = []

for alpha in alphas:
    poly.set_params(beta=alpha)
    poly.fit(X_train_sc, y_train_sc)
    test_mse = mean_squared_error_scorer(poly, X_test_sc, y_test_sc)
    test_scores_poly.append(test_mse)