机器学习:原型聚类-学习向量量化LVQ算法浅析(附代码实现)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_35732969/article/details/81141005

微信交流:

学习向量量化算法(以下简称LVQ)和k均值算法(k-means)都属于原型聚类的典型算法,它跟k均值算法最大的不同是,LVQ的样本带有类别标记,利用这些标记辅助聚类,属于监督学习范畴。

LVQ的目标是学得一组n维(样本维数)原型向量{P1,P2,...,Pq},每个原型向量代表一个聚类簇。算法描述如下:

第6-10行表示,当距离最近的原型向量与所选样本标记相同,则该原型向量向样本方向靠拢;当距离最近的原型向量与所选样本标记不同,则向远离该样本的方向移动:

样本将被划入与其距离最近的原型向量所代表的簇中。

注意:原型向量的个数跟类别标记的种类数不一定要相等。例如,某数据集类别标记有两种c1和c2,学习目标可以是找到5个原型向量p1,p2,p3,p4,p5,并假定它们对应的类别标记分别为c1,c2,c2,c1,c1。最终的学习结果会产生类似如下的簇划分(圆点表示不同类别标记的样本点,加号表示原型向量):

python代码实现LVQ:

#迭代轮数
for i in range(loops):
    #随机产生样本
    index = np.random.randint(0,30)
    min_dist = sum((q[0] - x[index])**2)
    q_index = 0
    #搜索里样本最近原型向量
    for j in range(1,len(q)):
        dist = sum((q[j] - x[index])**2)
        if dist < min_dist:
            min_dist = dist
            q_index = j
    if q_label[q_index] == y[index]:
        #样本标记和原型向量标记相同,该原型向量向样本方向移动
        #eta为学习率
        q[q_index] += eta*(x[index]-q[q_index])
    else:
        #样本标记和原型向量标记相同,该原型向量远离样本方向
        q[q_index] -= eta*(x[index]-q[q_index])
#画图
for i in range(len(x)):
    if y[i] == 0:
        plt.plot(x[i,0],x[i,1],'or')
    else:
        plt.plot(x[i,0],x[i,1],'o',color='black')
for i in range(len(q)):
    plt.plot(q[i,0],q[i,1],marker='*',color='blue')

某次迭代300次的图:

if "自我介绍":

print("我现在研究生在读(2018),计算机视觉方向,是江苏南通人,这里最大产业就是家纺产业,是中国家纺中心,所以我现在更具体的研究方向也在往家纺产业靠。可以看到淘宝上80%以上的家纺产品出自南通,见下图:")

io.imread(

)

print("所以,人生苦短,我不但用python,还可以给到你相同品质下价格最低的家纺宝贝。")

elif "情怀":

print("作为南通家纺城本地人,我清楚的知道那些家纺的成本,而淘宝上的商家真是提价无底线。大概看了下,超过80%的卖家提价超过拿货价的60%,很多提价达到百分之一两百!什么概念,一件200的四件套卖到500,一天卖出一套就是一个普通工人累死累活干一天的工资,而那些卖家轻轻松松在家点下鼠标就开心赚大钱了,黑心卖家的贪婪令人发指!习大大说,幸福是奋斗出来的,但那些黑心卖家靠剥削普通老百姓的血汗钱为乐!作为一个敲代码的耿直boy,更是看不下去自己辛辛苦苦敲了一天的代码比不上那些卖家在家舒舒服服点一下鼠标值钱(/摊手┑( ̄Д  ̄)┍)!所以,没啥好说的,不服就干!")

if "believe me":

print("我的家纺淘宝店(哈皮家纺):https://shop490250690.taobao.com/")

print("店里的全部宝贝提价永远永远永远不超过20%(运费+油费+服务费!,长期合作,互利共赢")

if "没有喜欢的款式":

                       print("淘宝上看到喜欢的款式发给我(微信:hellobcl),我给你找。保证相同的质量,价格比你看到的便宜,就是这么自信!")

else:

print("可以买两件做比较,如果我的宝贝质量比那些贵的差,直接退货")

print("全世界无产阶级程序猿等等联合起来,抵制躺着赚钱的黑心家纺卖家,买一件好家纺送(zhui)女友!")

print("劳动光荣,coding光荣,分享关荣,买家纺送(zhui)女友更光荣!")

纯分享地址:全世界无产阶级程序猿等等联合起来,买一件好家纺送(zhui)女友

参考资料:周志华《机器学习》

相关博文:

机器学习:原型聚类-k均值算法k-means(附代码实现)

机器学习:聚类-性能度量指标简介(附代码实现)

机器学习:聚类-闵科夫斯基距离和无序属性的VDM距离计算

没有更多推荐了,返回首页