自组织图(Self-Organizing Map,SOM),也称为Kohonen网络,是一种无监督学习算法,用于将高维输入数据映射到低维的拓扑结构中。它主要用于数据的聚类、可视化和特征提取。
SOM的主要特点是通过竞争和合作机制实现自组织,其中输入数据样本通过竞争选择最匹配的神经元作为获胜神经元,并通过调整与获胜神经元相邻的神经元的权重来更新模型。这样,SOM能够在保持输入数据的拓扑结构的同时,将相似的数据样本映射到相邻的神经元上。
以下是一个使用Python和NumPy库实现SOM的简单示例:
python
Copy
import numpy as np
class SOM:
def init(self, input_dim, output_dim, learning_rate=0.1, sigma=1.0):
self.input_dim = input_dim
self.output_dim = output_dim
self.learning_rate = learning_rate
self.sigma = sigma
self.weights = np.random.rand(output_dim[0], output_dim[1], input_dim)
def train(self, data, num_epochs):
for epoch in range(num_epochs):
for sample in data:
bmu = self.find_best_matching_unit(sample)
self.update_weights(sample, bmu, epoch)
def find_best_matching_unit(self, sample):
min_dist = float('inf')
bmu = (0, 0)
for i in range(self.output_dim[0]):
for j in range(self.output_dim[1]):
dist = np.linalg.norm(sample - self.weights[i, j])
if dist < min_dist:
min_dist = dist
bmu = (i, j)
return bmu
def update_weights(self, sample, bmu, epoch):
for i in range(self.output_dim[0]):
for j in range(self.output_dim[1]):
dist = np.linalg.norm(np.array(bmu) - np.array([i, j]))
lr = self.learning_rate * (1 - epoch / num_epochs)
sigma = self.sigma * (1 - epoch / num_epochs)
influence = np.exp(-dist / (2 * sigma**2))
self.weights[i, j] += lr * influence * (sample - self.weights[i, j])
示例数据
data = np.array([[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]])
创建并训练SOM模型
input_dim = data.shape[1]
output_dim = (2, 2) # SOM输出网格的维度
learning_rate = 0.1
sigma = 1.0
num_epochs = 100
som = SOM(input_dim, output_dim, learning_rate, sigma)
som.train(data, num_epochs)
输出SOM模型的权重
print(som.weights)
在上述示例中,我们首先定义了一个SOM类,其中包含了初始化权重、训练和更新权重的方法。在训练过程中,我们遍历数据集中的每个样本,通过find_best_matching_unit方法找到与样本最匹配的神经元,并通过update_weights方法更新权重。训练过程重复进行多个epochs。
在示例数据中,我们使用了一个3维的数据集,包含了3个样本。我们将输出SOM模型的权重,其维度为2x2x3,与定义的输出维度相对应。
请注意,这只是一个简单的SOM示例,实际应用中可能需要根据任务需求进行适当的调整和扩展。
以下是关于自组织图(Self-Organizing Map,SOM)的一些推荐学习资料:
《Neural Networks for Pattern Recognition》书籍:这本由Christopher Bishop撰写的书籍介绍了神经网络在模式识别中的应用。其中包括对SOM的详细介绍,包括其原理、训练算法和应用领域等内容。
《Self-Organizing Maps》书籍:这本由Teuvo Kohonen撰写的经典著作是关于SOM的权威参考资料。书中详细介绍了SOM的理论和应用,包括算法、数据可视化、聚类分析和特征提取等方面。
《Kohonen Maps》课程:这是赫尔辛基大学计算机科学系的公开课程,由Teuvo Kohonen教授讲授。该课程深入讲解了SOM的原理、算法和应用,并提供了实践项目和案例研究。
《Introduction to Self-Organizing Maps》教程:这是一份由Aurélien Géron编写的教程,介绍了SOM的基本概念和实现方法。教程使用Python和NumPy库演示了如何构建和训练SOM,并提供了示例代码和案例研究。
相关论文:你可以查阅关于SOM的经典研究论文,如Teuvo Kohonen的原始论文《Self-Organization of Associative Database and Its Applications》(1984)。这些论文对SOM的提出和发展有重要贡献,可以深入了解SOM的理论基础和应用领域。