Exemplo n.º 1
0
def leave_one_out(X, y):
    """Estratégia de split train/test leave_one_out.

    A ideia é centralizada em remover apenas 1 amostra e considerar o
    teste. Todo o resto é o treinamento.

    Como analogia k-fold para quando k=n, sendo n o número de linhas do dataset,
    esses algoritmos se tornam idênticos.
    """
    n = len(y)
    c = y.shape[1] if len(y.shape) > 1 else 1
    m = X.shape[1] if len(X.shape) > 1 else 1
    dataset = concat(X, y)
    np.random.shuffle(dataset)

    folds = []
    n = len(X)
    for i in range(n):
        dataset_test = dataset[i]
        dataset_train = np.delete(dataset, i, axis=0)
        X_train = dataset_train[:, :-c]
        y_train = dataset_train[:, -c:]
        X_test = dataset_test[:-c].reshape((1, m))
        y_test = dataset_test[-c:].reshape((1, c))
        fold = (X_train, X_test, y_train, y_test)
        folds.append(fold)

    return folds
Exemplo n.º 2
0
def hold_out(X, y, test_size=0.30):
    """Esquema de particionamento de dados train/test split.

    Particiona X,y de forma ordenada após embaralhamento baseado no ponto
    de corte `test_size`.
    """
    shape = y.shape
    n = len(y)
    c = shape[1] if len(shape) > 1 else 1
    dataset = concat(X, y)
    # dataset embaralhado (shuffled)
    np.random.shuffle(dataset)
    X_s, y_s = dataset[:, :-c], dataset[:, -c:]

    test_index = round(test_size * n)
    X_train = X_s[test_index:]
    y_train = y_s[test_index:]
    X_test = X_s[:test_index]
    y_test = y_s[:test_index]

    return X_train, X_test, y_train, y_test
Exemplo n.º 3
0
def kfold(X, y, k=5):
    """Separa o conjunto de dados na forma de train/test em k partições (folds).

    Cada elemento da lista possui (X_train, X_test, y_train, y_test).
    O dataset de treinamento possui (k-1) folds participantes e o de
    teste apenas um dos folds.

    """
    shape = y.shape
    n = len(y)
    c = shape[1] if len(shape) > 1 else 1
    dataset = concat(X, y)
    np.random.shuffle(dataset)
    splits = np.vsplit(dataset, k)

    folds = []
    for i in range(k):
        fold_test = splits[i]

        train_index = list(range(k))
        train_index.remove(i)

        train_list = []
        for j in train_index:
            train_list.append(splits[j])

        fold_train = np.concatenate(train_list)
        X_train = fold_train[:, :-c]
        y_train = fold_train[:, -c:]
        X_test = fold_test[:, :-c]
        y_test = fold_test[:, -c:]
        fold = (X_train, X_test, y_train, y_test)

        folds.append(fold)

    return folds