自组织神经网络(SOM)的Python第三方库minisom分类功能实现

举报
府学路18号车神 发表于 2021/12/24 22:41:41 2021/12/24
【摘要】 minisom分类功能 这个例子展示了如何使用 MiniSom 来解决分类问题。分类机制将使用 MiniSom 实现,评估将使用 sklearn。 首先,让我们加载一个数据集(在本例中是著名的 Iri...

minisom分类功能

这个例子展示了如何使用 MiniSom 来解决分类问题。分类机制将使用 MiniSom 实现,评估将使用 sklearn。

首先,让我们加载一个数据集(在本例中是著名的 Iris 数据集)并应用归一化:


from minisom import MiniSom
import numpy as np

data = np.genfromtxt('iris.csv', delimiter=',', usecols=(0, 1, 2, 3))
data = np.apply_along_axis(lambda x: x/np.linalg.norm(x), 1, data)
labels = np.genfromtxt('iris.csv', delimiter=',', usecols=(4), dtype=str)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

这是一个简单的分类函数,它使用分配给相关获胜神经元的标签对数据中的样本进行分类。一个标签 C 如果映射到该神经元中的大多数样本具有标签,则与该神经元相关联 C. 该函数将分配数据集中最常见的标签,以防样本映射到未分配类别的神经元。

:
def classify(som, data):
    """Classifies each sample in data in one of the classes definited
    using the method labels_map.
    Returns a list of the same length of data where the i-th element
    is the class assigned to data[i].
    """
    winmap = som.labels_map(X_train, y_train)
    default_class = np.sum(list(winmap.values())).most_common()[0][0]
    result = []
    for d in data:
        win_position = som.winner(d)
        if win_position in winmap:
            result.append(winmap[win_position].most_common()[0][0])
        else:
            result.append(default_class)
    return result

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

现在我们可以 1) 拆分训练和测试集中的数据,2) 训练 som,3) 打印包含所有指标的分类报告以评估分类结果。

from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report

X_train, X_test, y_train, y_test = train_test_split(data, labels, stratify=labels)

som = MiniSom(7, 7, 4, sigma=3, learning_rate=0.5, 
              neighborhood_function='triangle', random_seed=10)
som.pca_weights_init(X_train)
som.train_random(X_train, 500, verbose=False)

print(classification_report(y_test, classify(som, X_test)))


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
        precision    recall  f1-score   support

  setosa       1.00      1.00      1.00        13

  
 
  • 1
  • 2
  • 3

versicolor 0.92 1.00 0.96 12
virginica 1.00 0.92 0.96 13

accuracy                           0.97        38

  
 
  • 1

macro avg 0.97 0.97 0.97 38
weighted avg 0.98 0.97 0.97 38

原文链接:https://github.com/JustGlowing/minisom/blob/master/examples/Classification.ipynb

文章来源: blog.csdn.net,作者:府学路18号车神,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_44333889/article/details/118215770

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。