Open fdmartins opened 1 year ago
um outro fenomeno estranho é que quando aumento a quantidade de samples, por exemplo, para 2000, o fit fica ainda pior
Olá Fabio,
Esses resultados vão acontecer tendo 100, 2000, ou 10000 samples. Pois o Radial Basis Function tem chutes aleatórios no cálculo dos centróides dos polos. No seu caso o modelo está sofrendo do detalhe das casas decimais, se vc rodar várias vezes vai perceber resultados, como se pudesse observar que o modelo chegou no Otimo Local, ou Otimo Global.
Seu problema pode se resolver mudando o número de Polos/Neurônios do Radial (pois compensa a falta de atributos de forma virtual), mudando a Função de Base Radial(Função de Ativação), ou arbitrando Centróides fixo pré-definidos.
No momento programei as seguintes opções de Parâmetros do modelo:
A pergunta de 1milhão, é como definir os melhores parâmetros sempre!
Seu case é um bom teste, pois eu havia limitado o número de Polos baseado no número de Features de entrada(self.n_featurein). Então é um bug de código mesmo, na logica do if/else.
Vou atualizar o código e adicionar essa correção.
Obrigado pela atenção!
Att, Victor Venites.
Caro Victor,
Depois que reportei a issue que fui dar uma explorada no código e vi a flexibilidade de alguns parametros.
Pelo que vi no código, seu self.n_featurein é condicionado para no minimo 2. Como no teste que fiz só tem uma feature, me pareceu razoavel esta parte do codigo.
Todo modo, testei com Qtd_Polos com 10, 100, 1000... para overfittar mesmo, mas mesmo assim os resultados foram muito ruins.
Tentei usar para uma tarefa de classificação, com um dataset sintético com 2 variaveis e 2 classes. Teoricamente deveria ser resolvido com 3 polos, mas a matriz de confusão não foi satisfatória (e com resultados muito discrepantes para cada rodada do algoritmo)
Vou tentar investigar melhor debugando o código.
Abs Fábio
olá, parabens pelo esforço! nunca encontrei implementação do RBF "puro".
Fiz alguns testes com pequenos datasets sintéticos de uma curva, e os valores preditos (teste com os mesmos dados de treinamento) não foram bons. Estou errando em algo?
gerando dataset
import radial_basis_function import numpy as np import matplotlib.pyplot as plt
num_samples = 100 X = np.sort(2 np.pi np.random.rand(num_samples))
fator_ruido = 0.04
Y_true = np.sin(X) noise = fator_ruido * np.random.randn(num_samples) Y = Y_true + noise
plt.figure(figsize=(8, 6)) plt.scatter(X, Y, label='Dataset', color='b', alpha=0.5) plt.plot(X, Y_true, label='Curva Ideal', color='r', linewidth=2) plt.xlabel('X') plt.ylabel('Y') plt.title('-') plt.legend() plt.grid(True) plt.show()
fit
modelo_rbf = radial_basis_function.RadialBasisFunction()
modelo_rbf.fit(X, Y)
predicao = modelo_rbf.predict(X)
resultado com dados de treinamento
plt.figure(figsize=(8, 6)) plt.plot(X, predicao, label='Reconstruido', color='b', linewidth=2) plt.plot(X, Y_true, label='Real', color='r', alpha=0.5 ) plt.xlabel('X') plt.ylabel('Y') plt.title('-') plt.legend() plt.grid(True) plt.show()