我正在测试自组织映射神经网络算法来执行模型回归。
我使用somoclu工具箱在Python中执行了基本测试(计算时间非常有效)。我使用x²函数作为测试函数。然后,我尝试创建一个50x50点的SOM。我绘制了一系列曲线,你可以看到原始点与SOM。插值对我来说并不令人满意,因为如果我学不够,就会有异常值,如果我学得太多,那就很适合原点。我想要的是在我的方形曲线的点之间有点。
据我所知,在这种情况下,异常值并非“愚蠢”,因为它们会尝试连接点。但它不能在状态中用作模型回归。
你可以向我解释我的调音参数错在哪里吗?或者如何删除异常值?
我的代码:
import numpy as np
import matplotlib.pyplot as plt
import somoclu
import pandas as pd
data = pd.read_csv('10_samples.txt', sep='\t', header = 0)
data = data.as_matrix()
epoch_size = np.linspace(2,100,99)
for j in epoch_size:
som = somoclu.Somoclu(n_columns=50, n_rows=50, data=data, kerneltype = 0, initialization = 'pca')
som.train(epochs=int(j))
a=som.codebook
dim=a.shape
som_ncodebook = [[]]
for i in range(dim[2]):
param = a[:,:,i]
param = param.reshape(1,dim[0]*dim[1]) # raboute ligne à ligne
param = param.reshape(dim[0]*dim[1],1) # transforme en colonne
if i == 0 :
som_ncodebook = param
else:
som_ncodebook=np.append(som_ncodebook,param,axis=1)
codebookplot = som_ncodebook
plt.plot(codebookplot[:,0],codebookplot[:,1],'ob')
plt.plot(data[:,0],data[:,1],'.r')
plt.title('codebook epoch = '+str(j))
plt.savefig('test_'+str(int(j))+'.png')
plt.close()