ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

自然语言处理实验—用K-means的方法对样本特征分类(含python代码和详细例子解释)

2021-11-15 22:06:40  阅读:178  来源: 互联网

标签:matrix item python means print cluster user np 自然语言


自然语言处理实验—用K-means的方法对样本特征分类

一、算法简述

本次博客我们介绍一下机器学习里经典的聚类算法K-means,它属于典型的无监督学习算法。其核心思想也非常的简单,大致思路如下:

  1. 要选取 K ( K = 1 , 2 , . . ) K(K=1,2,..) K(K=1,2,..)个簇的质心,这决定了我们最终聚类的簇(每一类被分为一个簇)。
  2. 对每一个待分类的样本,我们都计算该样本到每个簇质心的距离,然后将该样本归类到最小距离的簇。
  3. 更新每个簇的质心,每个簇的新的质心等于所有位于该簇的样本的均值。
  4. 以此类推,重新归类样本,更新簇的质心。直到簇的质心不再改变为止。

二、情景介绍

下面我们举个栗子,记录有某音乐网站6位用户点播的歌曲流派,给定用户名称和九种音乐类型的播放数量,通过K-means将6位用户分成3簇(把播放数量当成数组或者向量进行簇质心的迭代运算)

用户/项目项目1项目2项目3项目4项目5项目6项目7项目8项目9
用户11064000000
用户2000890000
用户3000004400
用户4000960020
用户5403000003
用户6001008000

三、python代码实现

import numpy as np

user_item_matrix = np.array([[10,6,4,0,0,0,0,0,0],
                             [0,0,0,8,9,0,0,0,0],
                             [0,0,0,0,0,4,4,0,0],
                             [0,0,0,9,6,0,0,2,0],
                             [4,0,3,0,0,0,0,0,3],
                             [0,0,1,0,0,8,0,0,0]])
print("初始矩阵为:")
print(user_item_matrix)
K1 = user_item_matrix[0]
K2 = user_item_matrix[1]
K3 = user_item_matrix[2]
number = 0
while(1):
    number += 1
    print(f"\n############# cluster iter :{number} #############")
    cluster_one = []
    cluster_two = []
    cluster_three = []
    distance = []
    for item in user_item_matrix:
        distance.append([np.sqrt(sum((item - K1)**2)),np.sqrt(sum((item - K2)**2)),np.sqrt(sum((item - K3)**2))])
    distance = np.array(distance)
    print("compute distance result\n",distance)
    num = distance.argmin(axis=1)
    print("cluster result\n",num)
    for i in range(len(num)):
        if(num[i]==0):
            cluster_one.append(i)
        elif(num[i]==1):
            cluster_two.append(i)
        else:
            cluster_three.append(i)
    K1_new = np.mean([user_item_matrix[i] for i in cluster_one ])
    K2_new = np.mean([user_item_matrix[i] for i in cluster_two ])
    K3_new = np.mean([user_item_matrix[i] for i in cluster_three ])
    if(K1_new.all()==K1.all() and K2_new.all()==K2.all() and K3_new.all()==K3.all()):
        print("\n################ cluster result ################")
        print("cluster_one",cluster_one)
        print("cluster_two",cluster_two)
        print("cluster_three",cluster_three)
        break
    else:
        K1 = np.mean([user_item_matrix[i] for i in cluster_one])
        K2 = np.mean([user_item_matrix[i] for i in cluster_two])
        K3 = np.mean([user_item_matrix[i] for i in cluster_three])

标签:matrix,item,python,means,print,cluster,user,np,自然语言
来源: https://blog.csdn.net/qq_26274961/article/details/121344320

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有