自组织神经网络(SOM)的Python第三方库minisom分类功能实现
【摘要】
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)
这是一个简单的分类函数,它使用分配给相关获胜神经元的标签对数据中的样本进行分类。一个标签 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
文章来源: blog.csdn.net,作者:府学路18号车神,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/weixin_44333889/article/details/118215770
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)