XGB算法是决策树衍生出来的一种算法

场景:酒店的业务人员希望我们能够提供一个算法服务去为酒店信息做一个自动化的匹配,以通过算法的手段,找到那些确定相同的酒店和确定不同的酒店

以下代码为部分

理解业务

项目背景

当用户在马蜂窝打开一家选中的酒店时,不同供应商提供的预订信息会形成一个聚合列表准确地展示给用户。这样做首先避免同样的信息多次展示给用户影响体验,更重要的是帮助用户进行全网酒店实时比价,快速找到性价比最高的供应商,完成消费决策。

问题: 数据属性不同(比如酒店名有的是中文,有的英文,有的中英)、数据形态不同(比如有的是日语、韩语)、

数据量大,全部对比不现实、

消歧错误带来的风险

算法解决方案:

1.提供一个算法服务以计算两条数据是否属于同一家酒店

2.目标设定为提升运营效率,通过算法与运营人员的结合实现业务目标

3.计划先对中文的内容进行处理,而对其他语言暂时不做处理

准备数据与模型训练

#过滤掉最后面的英文字符,并进行数字转换(转换成阿拉伯数字),大小写转换(转成小写)
def ch2num(self,s)
s = list(s)
num = ['零','一','二','三','四','五','六','七','八','九']
ch_num = ['零','壹','贰','叁','肆','伍','陆','柒','捌','玖']
i,last,flag = len(s)-1,len(s),True
while i > -1:
if s[i] >= u'\u4e00' and s[i] <= u'\u9fa5' and flag:
last = i+1
flag = False
else:
if s[i] in num:
s[i] = num.index(s[i])
elif s[i] in ch_num:
s[i] = ch_num.index(s[i])
i -= 1
return ".join(str(it) for it in s[:last]).lower()

名称分词

地址分词

#三种距离计算方法
#计算Levenshtein距离
def levenshtein_vec(self,item1,item2):
vec = []
dist = Levenshtein()
for i in range(len(item1)):
vec.append(dist.distance(item1[i],item2[i]))
return vec #jarowinkler距离
def jarowinkler_vec(self,item1,item2):
vec = []
dist = jaroWinkler()
for i in range(len(item1)):
vec.append(dist.similarity(item1[i],item2[i]))
return vec #qgram距离
def qgram_vec(self,item1,item2):
vec = []
dist = QGram(len(item1) if len(item1) <= len(item2) else len(item2))
for i in range(len(item1)):
vec.append(dist.distance(item1[i],item2[i]))
return vec #经纬度距离相对特殊,使用haversine距离 专门处理经纬度与物理计算的
def haversine(self,item1,item2): #[经度1,纬度1],[经度2,纬度2](十进制度数)
'''
Calculate the great circle distance between two points on the earth(specified in decimal degree)
'''
#将十进制度数转化为弧度
lon1,lat1,lon2,lat2 = map(radians,[float(item1[0]),float(item1[1]),float(item2[0]),float(item2[1])]) #haveeersin公式
dlon = lon2 -lon1
dlat = lat2 - lat1
a = sin(dlat/2)**2 + cos(lat1)*cos(lat2)*sin(dlon/2)**2
c = 2asin(sqrt(a))
r = 6371 #地球半径,单位为公里
return [c*r*1000]

模型训练与评估

import xgboost as xgb
model = xgb.XGBClassifier(nthread=-1,max_depth=6,
n_estimators=30,learning_rate=0.01,colsample_bytree=.9,
gamma=1,reg_alpha=4,objective='binary:logistic',eta=0.2,silent=1,subsample=0.8).fit(X_train,Y_train)
fileObject = open('xgb_hotelmatch.pkl','wb') #保存模型
pick.dump(model,fileObject,protocol=4)
fileObject.close() #模型预测与混淆矩阵获取
prediction = model.predict(X_test)
cm = confusion_matrix(Y_test,prediction)

根据给出的“是”和“否”的概率值区间来判断是否足够置信

1.对于置信结果直接进入到合并或新增环节

2.对于不那么置信,仍然进入到人工审核环节进行二次校验

实践1使用XGB实现酒店信息消歧的更多相关文章

  1. 利用 pyspider 框架抓取猫途鹰酒店信息

    利用框架 pyspider 能实现快速抓取网页信息,而且代码简洁,抓取速度也不错. 环境:macOS:Python 版本:Python3. 1.首先,安装 pyspider 框架,使用pip3一键安装 ...

  2. Python 爬取美团酒店信息

    事由:近期和朋友聊天,聊到黄山酒店事情,需要了解一下黄山的酒店情况,然后就想着用python 爬一些数据出来,做个参考 主要思路:通过查找,基本思路清晰,目标明确,仅仅爬取美团莫一地区的酒店信息,不过 ...

  3. python爬取酒店信息练习

    爬取酒店信息,首先知道要用到那些库.本次使用request库区获取网页,使用bs4来解析网页,使用selenium来进行模拟浏览. 本次要爬取的美团网的蚌埠酒店信息及其评价.爬取的网址为“http:/ ...

  4. 使用requests、BeautifulSoup、线程池爬取艺龙酒店信息并保存到Excel中

    import requests import time, random, csv from fake_useragent import UserAgent from bs4 import Beauti ...

  5. C++模板”>>”编译问题与词法消歧设计

    在编译理论中,通常将编译过程抽象为5个主要阶段:词法分析(Lexical Analysis),语法分析(Parsing),语义分析(Semantic Analysis),优化(Optimization ...

  6. 学习笔记CB008:词义消歧、有监督、无监督、语义角色标注、信息检索、TF-IDF、隐含语义索引模型

    词义消歧,句子.篇章语义理解基础,必须解决.语言都有大量多种含义词汇.词义消歧,可通过机器学习方法解决.词义消歧有监督机器学习分类算法,判断词义所属分类.词义消歧无监督机器学习聚类算法,把词义聚成多类 ...

  7. 基于TF-IDF值的汉语语义消歧算法

    RT,学校课题需要233,没了 话说,窝直接做个链接的集合好了,方便以后查找 特征值提取之 -- TF-IDF值的简单介绍 汉语语义消歧之 -- 句子相似度 汉语语义消歧之 -- 词义消歧简介 c++ ...

  8. python网络爬虫(12)去哪网酒店信息爬取

    目的意义 爬取某地的酒店价格信息,示例使用selenium在Firefox中的使用. 来源 少部分来源于书.python爬虫开发与项目实战 构造 本次使用简易的方案,模拟浏览器访问,然后输入字段,查找 ...

  9. 使用requests、re、BeautifulSoup、线程池爬取携程酒店信息并保存到Excel中

    import requests import json import re import csv import threadpool import time, random from bs4 impo ...

随机推荐

  1. 线程池与Callable接口

    定义: 一个容纳多个线程的容器,其中的线程可以反复使用,省去了频繁创建线程对象的操作,无需反复创建线程而消耗过多资源. 使用方法 public void lockDemo() throws Inter ...

  2. Linux shell脚本之 if条件判断 (转)

    IF条件判断 1.基本语法: if [ command ]; then 符合该条件执行的语句 fi 2.扩展语法: if [ command ];then 符合该条件执行的语句 elif [ comm ...

  3. 1Python运行Appium测试的例子

    电脑系统配置:Windows7的64位 1.Python sample(Python示例)下载 https://github.com/appium/sample-code/tree/master/sa ...

  4. 使用纯swift代码文件制作framework

    因为最近我们公司的一个客户要求我们使用swift编写程序并且将API封装成framework的形式提供给他们,所以我就开始了swift实践之路. 程序编写完之后,我就琢磨怎么封装成framework的 ...

  5. 敲出的第一个python程序

    学习python第二天,终于照猫画虎编辑出第一个程序.程序要求如下: 1.输入用户名.密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 源代码如下: username = 'jackson'pas ...

  6. 面向过程编程+模块&导入

    面向过程编程+模块&导入 一.面向过程编程(理论+简单代码) 面向过程编程就好比在设计一条产品流水线 首先我们来认识下,什么是面向过程?如果咬文嚼字的话可以这样来理解,面向过程就是面向解决问题 ...

  7. 06.python语法入门--与用户交互、运算符

    与用户交互 输入 input    # python2与python3的区别        '''python3'''    # 将获取到的用户输入赋值给变量名res    res = input(' ...

  8. Solution -「CF 1586F」Defender of Childhood Dreams

    \(\mathcal{Description}\)   Link.   定义有向图 \(G=(V,E)\),\(|V|=n\),\(\lang u,v\rang \in E \Leftrightarr ...

  9. pytest(10)-常用执行参数说明

    pytest单元测试框架中可以使用命令行及代码pytest.main()两种方式执行测试,且可以加入各种参数来组织执行测试.接下来我们来了解常用的执行参数的含义及其用法. pytest中的执行参数根据 ...

  10. JAVA8学习——从使用角度深入Stream流(学习过程)

    Stream 流 初识Stream流 简单认识一下Stream:Stream类中的官方介绍: /** * A sequence of elements supporting sequential an ...