sklearn聚类之kmeans以及增量聚类

使用kmeans聚类计算量较大,处理新添加到现有类别的数据时,若用全部数据训练耗时耗力。可采用sklearn,训练时保存模型,增量时加载模型并用predict预测。前提是新数据与训练时特征一致,如保存分词idf词典供新数据调用。

使用kmeans聚类时,计算量往往都比较大,当有新的数据要添加到现有类别,如果再用全部数据训练会耗时耗力。
使用sklearn简单做法就是训练时把模型保存,增量时加载模型,用predict预测就好了。
前提条件是新数据和训练时的特征要一致,比如在训练时使用的分词idf,把所有分词idf的词典保存下来,对于新的增量数据,调用该词典,使用前面训练时的特征。

#聚类类别数  
k_num = 50  
mydatas = [] #加载数据,每一条数据的分词用空格隔开,类似:[['aa bb'],['cc dd'],['ee ff']]   
  
idf_ret_file = "idf_ret.pkl"  
if os.path.exists(idf_ret_file):  
    input = open(idf_ret_file, 'rb')  
    idf_ret = pickle.load(input)  
    input.close()  
else:  
    idf_ret = cal_idf(mydatas) #计算tf-idf  
    output = open(idf_ret_file, 'wb')  
    #训练时把所有分词及idf值写入文件保存,以便在增量时调用  
    pickle.dump(idf_ret, output)   
    output.close()  
  
#计算数据的tf-idf值  
tfidf_ret = cal_tfidf(mydatas,idf_ret)  
  
doc_rows = len(mydatas) #数据条数  
word_rows = len(idf_ret) #分词个数  
  
  
#把每条数据每个分词的词频 转换成 矩阵[数据条数,分词数]  
X = np.zeros([doc_rows,word_rows])  
for i in range(doc_rows):  
    j = 0  
    for k,v in idf_ret.items():  
    X[i][j] = tfidf_ret[i][k]  
    j=j+1  
X = np.array(X)  
  
#模型文件  
cl_file = "kmeans.pkl"  
if os.path.exists(cl_file):  
    input = open(cl_file, 'rb')  
    cl = pickle.load(input)  
    input.close()  
else:  
    cl = KMeans(n_clusters=k_num, init='k-means++', random_state=30, n_init=1,verbose=False)  
    cl.fit(X)  
    #把模型文件保存,增量时使用  
    output = open(cl_file, 'wb')  
    pickle.dump(cl, output)  
    output.close()  
#聚类结果  
result = cl.predict(X)  
#print(cl.cluster_centers_)  
print(result)  
exit()  
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walk walk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值