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

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)

这是一个简单的分类函数,它使用分配给相关获胜神经元的标签对数据中的样本进行分类。一个标签 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) 训练 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)))

        precision    recall  f1-score   support

  setosa       1.00      1.00      1.00        13

versicolor 0.92 1.00 0.96 12
virginica 1.00 0.92 0.96 13

accuracy                           0.97        38

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

  • 0
    点赞
  • 11
    收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:酷酷鲨 设计师:CSDN官方博客 返回首页
评论
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值