在r中运行自组织Map(som)时,我可以绘制码本向量。
library("kohonen")
test <- iris
iris.sc <- scale(iris[, 1:4])
iris.grid <- somgrid(xdim = 5, ydim = 5, topo = "hexagonal")
iris.som <- som(iris.sc, grid = iris.grid, rlen=100, alpha = c(0.01, 0.05))
plot(iris.som, type="codes")
在此处输入图像描述
据我所知, type="codes"
表示在som中绘制码本向量。
和码本向量 iris.som$codes
有以下数据。
Sepal.Length Sepal.Width Petal.Length Petal.Width
V1 0.6846813 -1.19031311 0.8815229 0.67708990
V2 0.3442113 -1.89751803 0.4144023 0.16392316
V3 -0.2204200 -1.03335096 0.1455484 -0.05680691
V4 -0.7880007 -1.04498504 0.1981859 0.33258143
V5 -0.8069628 -1.64373569 -0.1855667 -0.18202228
V6 -0.1165271 -0.79014553 0.7300420 1.09409662
V7 0.5300082 -0.64964279 0.6171934 0.62650447
V8 0.3050851 -0.59420090 0.3423955 0.08002794
V9 -0.2826629 -0.31491830 0.2376237 0.18708333
V10 -1.4231993 -1.39700905 -1.1820463 -1.03371289
V11 0.7016798 -0.21246784 1.0084352 0.98244643
V12 1.0501095 -0.10340718 0.5438804 0.36175095
V13 0.3379137 -0.29141305 0.3740692 0.26213062
V14 -0.8911122 0.48019381 -1.1007621 -0.91508387
V15 -1.4170848 0.03660486 -1.3583661 -1.33140629
V16 1.8854277 -0.31362350 1.3883531 1.01056029
V17 1.1172988 0.09148794 0.9590755 1.38184741
V18 0.1966720 -0.12938787 0.6653491 0.78893180
V19 -0.3900588 0.55286190 -0.5739926 -0.53307222
V20 -0.9403071 0.88052555 -1.2788218 -1.24806871
V21 2.1434573 1.57564737 1.5295366 1.34551197
V22 0.7393520 0.58043211 1.0419395 1.55008897
V23 0.3298862 0.48262623 0.5060365 0.59125591
V24 -0.7531510 1.66281892 -1.2257431 -1.16008441
V25 -0.3565839 2.56056841 -1.3345338 -1.27646560
我使用minisom在python中运行som(https://github.com/justglowing/minisom)
我的问题如下:
中的值 iris.som$codes
有正值和负值。但是,代码图(饼图)可以表示正值。该算法如何在 plot(iris.som, type="codes")
?
如果我想在python中绘制相同的图形,我应该怎么做?我可以使用minisom计算som中每个网格的权重( get_weights
). 对于r中som的码本向量有相同的含义吗?
from minisom import MiniSom
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
if __name__ == "__main__":
iris = load_iris()
data_frame: pd.DataFrame = pd.DataFrame(data=iris.data, columns=iris.feature_names)
# data_frame = data_frame[data_frame.columns[:-1]]
# data normalization
data_frame = (data_frame - np.mean(data_frame, axis=0)) / np.std(data_frame, axis=0)
data: np.ndarray = data_frame.values
# Initialization and training
n_neurons: int = 5
m_neurons: int = 5
som: MiniSom = MiniSom(n_neurons, m_neurons, data.shape[1], sigma=1.5, learning_rate=.5,
neighborhood_function='gaussian', random_seed=0)
som.pca_weights_init(data)
som.train(data, 1000, verbose=True) # random training
我试着用 quantization
在minisom中。它有一个不同的维度。因此,我认为它不适合策划 plot(iris.som, type="codes")
在python中。 iris.som$codes
在r:4x25 quantization
在python(minisom)中:4x150 get_weights
在python(minisom)中:4x5x5
如果有人能给出解决这个问题的见解,我将不胜感激。
暂无答案!
目前还没有任何答案,快来回答吧!