Created
May 10, 2021 22:57
-
-
Save keizerzilla/b7f8e55c82346068c716362c25b766c6 to your computer and use it in GitHub Desktop.
Simples gerador de amostras sintéticas a partir de distâncias. Requisitos: numpy scikit-learn.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def gera_amostras(dados, k_vizinhos=5, k_amostras=5): | |
""" | |
Simples gerador de amostras sintéticas a partir de distâncias. A partir de duas | |
amostras P e Q do conjunto de k_amostras, gera uma terceira R igual ao ponto médido | |
de P e Q. | |
Requisitos: numpy scikit-learn. | |
Parâmetros | |
---------- | |
dados : - matriz numpy com de dimensão (n_amostras, n_atributos) | |
k_vizinhos=5 : - quantidade de vizinhos usados para amostragem | |
- quanto mais vizinhos maior a probabilidade de amostras esparsas | |
k_amostras=5 : - quantidade de amostras sintéticas a serem geradas | |
- a quantidade máxima possível é limitada por n_amostras | |
Retorno | |
------- | |
novo_dados : - matriz com (n_amostras + k_amostras, n_atributos) | |
""" | |
import numpy as np | |
from sklearn.neighbors import NearestNeighbors | |
p_indices = np.random.permutation(dados.shape[0])[:k_amostras] | |
p = dados[p_indices] | |
neigh = NearestNeighbors(k_vizinhos=k_vizinhos) | |
neigh.fit(dados) | |
kn = neigh.kneighbors(p, return_distance=False) | |
q_indices = kn[:,np.random.randint(1, k_vizinhos)] | |
q = dados[q_indices] | |
novo_dados = np.append(dados, (p + q) / 2, axis=0) | |
return novo_dados |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment