理解业务

一个需求:把相似的目的地整理出来,然后可以通过这些相似目的地做相关推荐,或者是相关目的地的推荐

准备数据

Word2Vec算法:可以学习输入的文本,并输出一个词向量模型

对数据进行清洗,去出异常的数据;对文本内容进行分词;把数据存储在文本文件中

训练Word2Vec模型

import gensim
import os
import re
import sys
import multiprocessing #引入多线程操作
from time import time class getSentence(object):
#初始化,获取文件路径
def __init__(self,dirname):
self.dirname=dirname #构建一个迭代器
def __iter__(self):
for root,dirs,files in os.walk(self.dirname):
for filename in files:
file_path = root +'/'+filename
for line in open(file_path):
try:
#清除异常数据,主要是去除空白符以及长度为0的内容
s_line = line.strip()
if s_line=="":
continue
#把句子拆成词
word_line = [word for word in s_line.split()]
yeild word_line
except Exception:
print("catch exception")
yeild ""
if __name__='__main__':
#记录一个起始时间
begin=time()
#获取句子迭代器
setences=getSentences("traindata")
#训练word2vec模型,使用句子迭代器作为语料的输入,设定的最终向量长度为200维;窗口长度为15;词的最小计数为10,词频少于10的词不会进行计算;使用并行处理
model=
gensim.models.Word2Vec(sentences,size=200,window=15,min_count=10,workers=multiprocessing.cpu_count())
#模型存储,这块记得预先新建一个model路径,或者增加一段代码来识别是否已经创建,如果没有则新建一个路径
model.save("model/word2vec_gensim")
model.wv.save_word2vec_format("model/word2vec_org",
"model/vocabulary",binary=False)
end.time()
#输出运算所用时间
print("Total processing time:%d seconds" % (end-begin))

训练k-means模型

import gensim
from sklearn.cluster import KMeans
from sklearn.externals import joblib
from time import time
#加载之前已经训练好的word2vec模型
def load_model():
model=
gensim.models.Word2Vec.load('../word2vec/model/word2vec_gensim')
return model
#加载城市名称词库
fd=open("mddwords.txt","r")
filterword=[]
for line in fd.readlines():
line=line.strip()
fliterword.append(line)
return fliterword
if __name__=="__main__":
start=time()
#加载word2vec模型
model=load_filterword()
#输出词汇表长度
print(len(filterword))
wordvector=[]
filterkey={}
#获取城市名称词库的词向量
for word in filterword:
wordvector.append(model[word])
filterkey[word]=model[word]
#输出词汇数量
print(len(wordvector))
#训练K-means模型,这里设置的聚类数为2000,最大迭代次数为100,n_jobs设置的是有多少个任务同时在跑,这样可以进行多组实验来消除初始化点带来的影响
clf=KMeans(n_clusters=2000,max_iter=100,n_jobs=10)
s=clf.fit_predict(wordvector)
#把模型保存下来
joblib.dump(clf,"kmeans_mdd2000.pkl")
labels=clf.labels_
labellist=labels.tolist()
print(clf.inertia_)
#把所有城市名称的聚类标签保存下来
fp=open("label_mdd2000",'w')
fp.write(str(labellist))
fp.close()
#把所有城市名称保存下来,其中顺序与聚类标签顺序一致
fp1=open("keys_mdd2000",'w')
for k in filterkey:
fp1.write(key+'\n')
print("over")
end=time()
print("use time")
print(end-start)

最终确定的聚类簇数是100

把这些数据存储到数据库中,并在具体的业务中进行应用

实践2:如何使用word2vec和k-means聚类寻找相似的城市的更多相关文章

  1. 机器学习算法与Python实践之(六)二分k均值聚类

    http://blog.csdn.net/zouxy09/article/details/17590137 机器学习算法与Python实践之(六)二分k均值聚类 zouxy09@qq.com http ...

  2. 机器学习算法与Python实践之(五)k均值聚类(k-means)

    机器学习算法与Python实践这个系列主要是参考<机器学习实战>这本书.因为自己想学习Python,然后也想对一些机器学习算法加深下了解,所以就想通过Python来实现几个比较常用的机器学 ...

  3. ML: 聚类算法-K均值聚类

    基于划分方法聚类算法R包: K-均值聚类(K-means)                   stats::kmeans().fpc::kmeansruns() K-中心点聚类(K-Medoids) ...

  4. 【转】算法杂货铺——k均值聚类(K-means)

    k均值聚类(K-means) 4.1.摘要 在前面的文章中,介绍了三种常见的分类算法.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别与之对应.但是很多时 ...

  5. 5-Spark高级数据分析-第五章 基于K均值聚类的网络流量异常检测

    据我们所知,有‘已知的已知’,有些事,我们知道我们知道:我们也知道,有 ‘已知的未知’,也就是说,有些事,我们现在知道我们不知道.但是,同样存在‘不知的不知’——有些事,我们不知道我们不知道. 上一章 ...

  6. 机器学习实战5:k-means聚类:二分k均值聚类+地理位置聚簇实例

    k-均值聚类是非监督学习的一种,输入必须指定聚簇中心个数k.k均值是基于相似度的聚类,为没有标签的一簇实例分为一类. 一 经典的k-均值聚类 思路: 1 随机创建k个质心(k必须指定,二维的很容易确定 ...

  7. Python实现kMeans(k均值聚类)

    Python实现kMeans(k均值聚类) 运行环境 Pyhton3 numpy(科学计算包) matplotlib(画图所需,不画图可不必) 计算过程 st=>start: 开始 e=> ...

  8. 机器学习理论与实战(十)K均值聚类和二分K均值聚类

    接下来就要说下无监督机器学习方法,所谓无监督机器学习前面也说过,就是没有标签的情况,对样本数据进行聚类分析.关联性分析等.主要包括K均值聚类(K-means clustering)和关联分析,这两大类 ...

  9. R与数据分析旧笔记(十五) 基于有代表性的点的技术:K中心聚类法

    基于有代表性的点的技术:K中心聚类法 基于有代表性的点的技术:K中心聚类法 算法步骤 随机选择k个点作为"中心点" 计算剩余的点到这个k中心点的距离,每个点被分配到最近的中心点组成 ...

随机推荐

  1. js中(function(){}()),(function(){})(),$(function(){});之间的区别

    1. (function(){}())与(function(){})() 这两种写法,都是一种立即执行函数的写法,即IIFE (Immediately Invoked Function Express ...

  2. js--事件流、事件委托、事件阶段

    前言 JavaScript 与 HTML 的交互是通过事件实现的,事件代表文档或浏览器窗口中某个有意义的时刻.可以使用仅在事件发生时执行的监听器(也叫处理程序)订阅事件.本文总结一下 JS 中的事件相 ...

  3. Selenium对应版本

    下面是谷歌浏览器与chromedriver的版本对应关系,供参考: ChromeDriver v2.45 (2018-12-10)----------Supports Chrome v70-72Chr ...

  4. JMeter使用流程

    JMeter使用流程 首先我们要新建一个线程组,线程组的作用模拟多个访问对象,对系统可以进行压力测试 添加"HTTP Cookie管理器": 添加"Http请求默认值&q ...

  5. VScode git无法使用,Error: command 'git.push' not found 源代码管理无法使用的问题及解决方法

    正常条件下,只要电脑中安装了Git,VScode就可以直接使用. 在开始界面有下图所示的功能: 在源代码管理栏目中: 如果没能正常工作,就看不到这些功能. 可能在用某些与git相关的功能时,如安装了G ...

  6. pytest(8)-参数化

    前言 什么是参数化,通俗点理解就是,定义一个测试类或测试函数,可以传入不同测试用例对应的参数,从而执行多个测试用例. 例如对登录接口进行测试,假设有3条用例:正确账号正确密码登录.正确账号错误密码登录 ...

  7. 《PHP程序员面试笔试宝典》——如何回答算法设计问题?

    如何巧妙地回答面试官的问题? 本文摘自<PHP程序员面试笔试宝典> 程序员面试中的很多算法设计问题,都是历年来各家企业的"炒现饭",不管求职者以前对算法知识掌握得是否扎 ...

  8. Solution -「CTS2019」珍珠

    题目   luogu. 题解   先 % 兔.同为兔子为什么小粉兔辣么强qwq. 本文大体跟随小粉兔的题解的思路,并为像我一样多项式超 poor 的读者作了很详细的解释.如果题解界面公式出现问题,可以 ...

  9. Python基础(Day1)

    一.Python的简介  1.Python的诞生 python的创始人为吉多·范罗苏姆(Guido van Rossum).1989年的圣诞节期间,吉多·范罗苏姆(中文名字:龟叔)为了在阿姆斯特丹打发 ...

  10. 黑客高端de浏览器使用秘籍

    搜索引擎已经成为上网必不可少的工具之一,聪明的黑客们发现,搜索引擎也能成为发动网络攻击的工具. Google Hacking,原指利用Google搜索引擎搜索信息来进行入侵的技术和行为,如今已不再局限 ...