思路就不多说了。。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
def LVQ(X,y,n_clusters,learning_rate=0.1):
#随机选择n_clusters个样本作为p向量
idx=np.random.choice(X.shape[0],n_clusters)
p=X[idx,:]
#获取p的标签
py=y[idx]
#画图用
fig,ax=plt.subplots(3,3,figsize=(12,12),sharex=True,sharey=True)
j=-1
for i in range(4501):
#随机选择一个样本xi
idx=np.random.choice(X.shape[0],1)
xi=X[idx,:]
#计算xi到各个p向量的距离
dist=np.sqrt(np.sum(np.square(xi-p),axis=1))
#找到最小距离p向量的索引
minIdx=np.argmin(dist)
#如果xi的标签与该向量的标签相等,则靠近,不然就原理
if y[idx]==py[minIdx]:
p[minIdx]=p[minIdx]+learning_rate*(xi-p[minIdx])
else:
p[minIdx]=p[minIdx]-learning_rate*(xi-p[minIdx])
#每循环500次画图
if (i>0) & (i%500==0):
j+&#