自组织映射 Python - 代码错误
我一直在使用这段代码来为一个小数据集生成自组织映射(SOM)。但是它出现了一个我搞不懂的错误。
from mvpa2.suite import *
data = np.array(
[[1,0,0,1,1,0,1,0,1,0],
[1,0,0,0,1,0,1,0,1,1],
[1,0,1,0,1,0,0,0,1,0],
[0,1,1,1,0,1,0,1,0,0],
[1,1,0,0,1,0,1,1,1,1],
[0,0,1,0,1,1,0,1,0,0],
[1,1,0,1,0,1,0,0,1,0],
[1,0,0,0,1,0,1,1,1,1],
[0,1,1,0,1,0,1,0,0,0],
[1,1,0,1,0,1,0,1,1,0]])
data_names = \
['u1', 'u2', 'u3', 'u4',
'u5', 'u6', 'u7', 'u8',
'u9', 'u10']
som = SimpleSOMMapper((10, 10), 100, learning_rate=0.05)
som.train(data)
pl.imshow(som.K, origin='lower')
mapped = som(data)
pl.title('DATA SOM')
for i, m in enumerate(mapped):
pl.text(m[1], m[0], data_names[i], ha='center', va='center',
bbox=dict(facecolor='white', alpha=0.5, lw=0))
pl.show()
错误信息:
pl.imshow(som.K, origin='lower')
TypeError: Invalid dimensions for image data
有没有人能帮我理解一下这个错误?
1 个回答
1
pl (pylab) 在告诉你,它无法显示10维的图像数据,因为这种数据是用颜色编码的。而像这个例子中,只有3维的图像数据,pylab可以把它编码成rgb格式。
通过这段代码,我成功地对数据进行了聚类,并生成了一些合理的结果(见下文)。
from mvpa2.suite import *
q = [[1,0,0,1,1,0,1,0,1,0], [1,0,0,0,1,0,1,0,1,1], [1,0,1,0,1,0,0,0,1,0], [0,1,1,1,0,1,0,1,0,0], [1,1,0,0,1,0,1,1,1,1], [0,0,1,0,1,1,0,1,0,0], [1,1,0,1,0,1,0,0,1,0], [1,0,0,0,1,0,1,1,1,1], [0,1,1,0,1,0,1,0,0,0], [1,1,0,1,0,1,0,1,1,0]]
q2 = []
for item in q:
ri = []
for x in item:
ri.append(float(x))
q2.append(ri)
data = np.array(q2)
data_names = ['u1', 'u2', 'u3', 'u4', 'u5', 'u6', 'u7', 'u8', 'u9', 'u10']
som = SimpleSOMMapper((10, 10), 100, learning_rate=0.05)
som.train(data)
mapped = som(data)
pl.title('DATA SOM')
pl.ylim([0,9])
pl.xlim([0,9])
for i, m in enumerate(mapped):
print m[1],m[0],data_names[i]
pl.text(m[1], m[0], data_names[i], ha='center', va='center',
bbox=dict(facecolor='white', alpha=0.5, lw=0))
pl.savefig('b.png');
结果如下: