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. Maven 警告 expected START_TAG or END_TAG not TEXT

    原因 在Maven警告提示区域存在空格等不规范字符,在网上复制到项目中时经常出现类似问题. pop.xml文件,setting.xml文件极易出现此类问题. 解决 将空格删除,规范一下格式就好了. 示 ...

  2. golang 获取当月最后一天日期

    now := time.Now() year, month, day := now.Date() //fmt.Println(year, month, day) //2021 September 1 ...

  3. uni showLoading 还有注意关闭 闭包, .finally

    uni.showLoading({ title:'正在提交...' }); let data = JSON.parse(JSON.stringify($this.sendData)); const r ...

  4. NSString 类介绍及用法

    1.NSString常见方法 NSString是 Objective-C 中核心处理字符串的类之一 创建常量字符串,注意使用"@"符号. NSString *astring = @ ...

  5. MySQL 主从复制与读写分离 (超详细图文并茂小白闭着眼睛都会做)

    MySQL 主从复制与读写分离 1.什么是读写分离 2.为什么要读写分离 3.什么时候要读写分离 4.主从复制与读写分离 5.mysql支持的复制类型 6.主从复制的工作过程 7.MySQL主从复制延 ...

  6. HMS Core 能力速配,唱响恋爱进行曲

    情人节,HMS Core 最具CP感的能力搭档来袭,浓浓爱意,表白各行业,你准备好了吗? 1.ML Kit +Signpal Kit 科技相助,恋爱提速.展现爱意的方式有千百种,你可以用文本翻译学习数 ...

  7. Spring 是怎么处理循环依赖的?

    Java语法中的循环依赖 首先看一个使用构造函数的循环依赖,如下: public class ObjectA { private ObjectB b; public ObjectA(ObjectB b ...

  8. LeetCode随缘刷题之最长回文子串

    这一题我用的相对比较笨的方法. 相对于大佬们用的动态规划法,比较复杂.但却更容易理解,我主要是通过记录下标来确定最长回文串的. package leetcode.day_12_06; /** * 给你 ...

  9. llinux_2

    1.显示/etc目录下,以非字母开头,后面跟了一个字母以及其它任意长度任意字符的文件或目录 [root@lhq ~]#ls /etc/ | grep "^[^[:alpha:]][[:alp ...

  10. 北京太速-611号-基于VU9P的5Gsps高速ADDA收发PCIe卡

    1    板卡概述 基于XCVU9P的5Gsps AD DA收发PCIe板卡.该板卡要求符合PCIe 3.0标准,包含一片XCVU9P-2FLGA2014I.2组64-bit/8GB DDR4.2路高 ...