我想在python中绘制代码plot,这是r中som的结果

ruarlubt  于 2021-07-14  发布在  Java
关注(0)|答案(0)|浏览(164)

在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
如果有人能给出解决这个问题的见解,我将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题