自组织映射(Self-Organizing Maps,SOM)
自组织映射(Self-Organizing Maps,SOM)是一种无监督的机器学习方法,被广泛用于高维数据的降维和可视化。SOM依据输入样本之间的相似性将其映射到一种通常为二维的网格结构,从而保留了原始空间中样本的拓扑关系。在这个过程中,空间接近的网格单元代表相似的样本或特征。
自组织(竞争型)神经网络
自组织映射(Self-Organizing Map,SOM)是自组织神经网络的一种特殊形式。自组织神经网络是一个广泛的类别,其中包含了许多不同的模型和算法,包括SOM,反向传播(Counterpropagation)网络,自适应共振理论(Adaptive Resonance Theory)网络等。
自组织(竞争型)神经网络的基础:
自组织(竞争型)神经网络的设计灵感来源于生物神经系统的某些特性。在生物神经系统中,神经元会响应外界的特定输入,相近的输入会引起相邻的神经元活动,而不同的输入会引起远离的神经元活动。此外,一个神经元的活动会抑制周围神经元的活动,这就产生了一个竞争机制,只有响应最强的神经元(或一组神经元)会被激活,其他神经元则被抑制。这些特性在学习和记忆过程中起着重要作用。
自组织(竞争型)神经网络的结构:
自组织神经网络通常由输入层和竞争层(也被称为输出层或映射层)组成,输入层和竞争层之间的神经元是全连接的。有时,竞争层的神经元之间也会有连接,这些连接可以实现神经元之间的相互抑制。
自组织(竞争型)神经网络的学习规则:
自组织神经网络的学习规则是基于竞争机制的。当输入模式被呈现给网络时,竞争层的所有神经元都会对其进行响应,响应最强的神经元(或一组神经元)会成为胜者,胜者的权重会被调整以更好地匹配当前的输入模式,同时,胜者神经元会抑制其他神经元的活动。通过这种方式,网络能够学习并记忆输入模式,并且输入模式的拓扑结构也会被保留在竞争层中。
聚类和自组织(竞争型)神经网络的关系:
自组织神经网络的这种工作方式使其能够对输入数据进行聚类。每个神经元都可以看作是一个聚类中心,相应的聚类则由响应这个神经元的所有输入模式组成。通过这种方式,网络不仅可以对数据进行分类,还可以保留数据的拓扑结构,这在某些应用中可能非常有用。
例子
通过一个简单的例子来理解SOM。假设你是一位图书馆管理员,需要整理大量不同类别的书籍。这些书籍可以根据各种属性(例如,作者、出版日期、主题、页数等)进行分类,每种属性都可以被认为是一个维度。在这个高维空间中,相似的书籍(即具有相似属性的书籍)会靠得更近。
然而,将这些书籍放在书架上时,你面临着一个问题:书架是一个二维的空间(由行和列组成),而你需要在这个二维空间中尽可能保持书籍在高维空间中的相似性。这就是SOM可以发挥作用的地方。
在SOM的训练过程中,你会开始随机地将书籍放在书架上,然后重复以下的步骤:
- 从堆中随机选取一本书。
- 在书架上找到与这本书最相似(即属性最接近)的书的位置。
- 将这本书以及其周围的书籍稍微移动一下,使它们更靠近刚刚选中的书。
- 重复上述步骤,直到所有的书都被放在书架上。
经过多次迭代,你会发现,虽然开始时书籍的放置是随机的,但最终,相似的书籍会被放在一起,形成一个"地图"。例如,所有的科幻小说可能会聚集在书架的一个角落,而历史书籍可能会聚集在另一个角落。这就是SOM的基本思想。
和聚类的区别
虽然自组织映射(SOM)和聚类都是无监督学习的一种,用于数据的模式识别和分类,但他们之间存在一些基本的区别。
聚类 是将数据集划分为若干个组或"簇",使得同一簇内的数据点彼此相似,不同簇间的数据点尽可能不同。聚类算法通常只关注数据点之间的相似性或距离,而不关注数据点在低维空间中的位置或拓扑结构。一些常见的聚类算法包括K-means、层次聚类、DBSCAN等。
自组织映射(SOM) 是一种特殊的神经网络,它降低数据的维度并保留数据的拓扑结构。SOM会生成一个通常为二维的网格,其中每个节点(或神经元)都表示输入空间中的一个区域。SOM不仅关注数据点之间的相似性,还关注数据点在低维空间中的位置或拓扑结构。因此,SOM不仅能进行聚类,还能在结果中保留和展示原始高维数据的拓扑和空间信息。
比如自组织映射神经网络(SOM)与K-means聚类算法之间的一些主要区别。:
-
聚类数量的设定:在K-means算法中,我们需要事先确定聚类的数量(即K的值)。对于SOM,我们通常设定一个较大的神经元网格,但实际的聚类数量可能会小于神经元的总数,因为有些神经元可能不会成为任何输入数据的最佳匹配单元。这种灵活性使得SOM能够更好地适应数据的分布。
-
更新策略:K-means算法在每次迭代中只更新与当前输入数据最近的聚类中心,而SOM不仅会更新胜者神经元,还会更新其邻域内的神经元,这使得SOM能够保持输入数据的拓扑结构。
-
对噪声和离群值的敏感性:K-means算法可能会受到噪声和离群值的影响,因为它们可能会显著地改变聚类中心的位置。相比之下,由于SOM更新策略的特性,它对噪声和离群值的敏感性通常较低。
-
结果的解释和可视化:SOM的一个优点是结果可以直观地用二维地图来表示,这使得结果的解释和理解变得更加容易。这在高维数据的情况下尤其有用,因为它能够将高维数据映射到二维空间。而K-means算法虽然也能进行聚类,但没有这种直观的可视化表示。
这些区别意味着SOM和K-means算法可能在不同的应用场景下表现优劣不同。例如,当需要保持数据的拓扑结构时,SOM可能是更好的选择;当数据的分布和聚类数量较为明确时,K-means算法可能会更有效。
总的来说,聚类和SOM都可以对数据进行分类,但SOM提供了额外的信息,即数据的拓扑和空间信息,这在某些应用中可能非常有用。例如,在可视化高维数据,或者需要保留原始数据空间关系的情况下,SOM可能是一个更好的选择。
R语言
Kohonen网络和自组织映射(SOM)是同一种类型的网络。Kohonen网络是由芬兰科学家Teuvo Kohonen在1982年提出的,因此,自组织映射也常常被称为Kohonen网络或Kohonen地图。
Kohonen网络是一种无监督学习的神经网络,它通过学习输入模式来形成一种拓扑保持的映射,这意味着输入空间中接近的模式在输出空间(即Kohonen网络)中也会被映射到接近的区域。
所以,当你听到Kohonen网络或SOM时,它们实际上是指的同一种类型的网络。这种网络的主要特点是它能够自我组织和学习,以及保持输入数据的拓扑结构。
# Load necessary library
library(kohonen)
# Load iris dataset
data(iris)
# Normalize iris data
iris_norm <- scale(iris[, 1:4])
# Set SOM grid
som_grid <- somgrid(xdim = 5, ydim = 5, topo = "hexagonal")
# Train SOM
som_model <- som(iris_norm,
grid = som_grid,
rlen = 100,
alpha = c(0.05, 0.01),
keep.data = TRUE)
# Plot the SOM
plot(som_model, type="mapping", pchs = 20, main = "Iris SOM",
labels=rownames(iris), cex=0.7)
python
from sklearn.datasets import load_iris
from sklearn.preprocessing import MinMaxScaler
from minisom import MiniSom
import matplotlib.pyplot as plt
# Load iris dataset
iris = load_iris()
data = iris.data
# Normalize the data
scaler = MinMaxScaler()
data = scaler.fit_transform(data)
# Initialize and train SOM
som = MiniSom(x=5, y=5, input_len=data.shape[1], sigma=0.5, learning_rate=0.5)
som.random_weights_init(data)
som.train_random(data, 100)
# Visualize the SOM
plt.figure(figsize=(7, 7))
for x, t in zip(data, iris.target):
w = som.winner(x)
plt.text(w[0], w[1], iris.target_names[t], color=plt.cm.rainbow(t / 10.), ha='center', va='center')
plt.axis([0, som.get_weights().shape[0], 0, som.get_weights().shape[1]])
plt.show()