特征工程之_筛选
特征工程之 _ 筛选
1. 说明
本文并非介绍某个成熟算法或者工具,只是个人的一点感悟,写得可能不正确,不全面,希望能给大家带来一些启发,也欢迎各位回复讨论。
2. 特征工程
大数据相关的工作可简要地归纳为:模型部分和数据部分,在模型部分,目前大家的做法主要是拿现成的模型来用,对其做内部修改或重写的很少,主要工作在选型和调参。
相对来说,对数据部分做的工作更多,在比赛中数据都是固定的,且很多时候数据已脱敏,特征工程能做的不太多,而真实场景中,往往能从复杂数据中提取更多信息,因此如期何提取以及筛选信息就变得尤为重要。
3. 筛选
筛选分为筛选实例和筛选特征,如果把整体数据看成一张表,就是删行或者删列。
在实际应用时,常遇到的一个难题是:怎么把人的经验和算法结合起来,特征工程是一个重要的入口,一方面我们可以用经验构造更多特征,另一方面,也可以通过经验选择合理的实例代入模型,以及分配权重。
4. 特征筛选
(1) 为什么筛选
对特征的筛选主要是去掉无关特征,无关特征一般有两种影响:在数据量大的情况下,影响训练速度,在数据量少的情况下,带来更多误差。像天池的汽车上牌赛和 ...
Swagger和Python配合使用
Swagger 和 Python 配合使用
1 简介
先来看一个应用场景:
我写了一段功能性的程序(可能是 Java 的,也可能是 Python
的),供他人调用(调我程序可能是其它编程语言,或者直接运行,如果调用者对我使用的工具不熟悉,直接调用可能很麻烦),这个程序需要传入多个参数,需要结构化的输出,我以什么方式提供给比较好呢?
我们可能会选择 BS 的结构,建立一个 Web-Server,然后把功能性的程序放在
Web-Server 上并向外暴露接口,其它程序用 Http 协议调用该接口,以 POST 或
GET 的方式转入参数,然后得到返回结果。
于是我们就需要定义一些交互协议,写接口描述文档,在调用出错时,联调是哪一端的问题,总之,沟通成本很高。
Swagger
可以很好地解这一问题,一方面,它能按规范自动生成接口文档(以网页形式提供),这样编写
API
和编写文档同时完成,几乎不用考虑文本和代码版本不同步的问题;另一方面,它能提供测试界面,我们只需要在网页上填写相应的参数,点击调用(网页由
swagger
生成),就可以轻松调用接口,使得服务端的开发者,不使用客户端,就可以完 ...
SOAP协议及Python调用
SOAP 协议及 Python 调用
1. 什么是 SOAP 协议
SOAP 是一种简单的基于 XML 的协议,它底层通过 HTTP 来交换信息。SOAP
的优点是可以传递结构化的数据。
客户生成的 SOAP 请求会被嵌入在一个 HTTP POST 请求中,发送到 Web
服务器。Web 服务器再把这些请求转发给 Web service
请求处理器,它解析收到的 SOAP 请求,调用 Web service,处理后再生成相应的
SOAP 应答。Web 服务器得到 SOAP 应答后,会再通过 HTTP
应答的方式把它送回到客户端。
从 HTTP 协议的角度看,最基本的四种操作是
GET(查),POST(改),PUT(增),DELETE(删),我们用的比较多的是 POST
和 GET 方式。而 SOAP 可视为 POST 的一个专用版本,遵循一种特殊的 XML
消息格式。
最常见的场景是:Server 端使用了 SOAP 协议,而 Client
端也必须遵从该协议才能交互,本文介绍一下,如何在 Client 端使用 SOAP
协议,以及如何配置 SOAP 测试环境。
2. 什 ...
全文搜索引擎ElasticSearch
全文搜索引擎 ElasticSearch
1. 介绍
ElasticSearch 简称 ES。
先来看它的用途:如果只是在多个机器同步,存储和检索大量数据,它与数据库的差别在哪儿,为什么非要使用
ES 呢?
ES
是目前全文搜索引擎的首选。全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,指明该词在文章中出现的次数和位置,当用户查询时,检索程序就根据事先建立的索引进行查找,并将查找的结果反馈给用户的检索方式。简单地说它的优势在于文本检索。ES
还可搭建成集群,有良好的扩展性。
如果把 ES 和数据库相比,ES 中包含多个索引
index(相当于数据库中的库),索引又包括多个类型
type(相当于数据库中的表)。
Kibana 是一个开源的分析与可视化平台,设计出来用于和 Elasticsearch
一起使用的。
2. ES 环境搭建
(1) 安装 8 以上的 Java 版本
ES 是由 java 编写的,所以先要安装与其版本匹配的 JAVA 工具
在以下网址下载 Java8 版本:
http://www.oracle.com/technetwork/ja ...
实战A股上市公司季度营收预测
实战 A
股上市公司季度营收预测
1. 说明
FDDC2018 金融算法挑战赛 01-A
股上市公司季度营收预测,是天池最近的一个算法比赛,7 月 15 是初赛提交的
deadline,就最后两天了,也没法做得太细,看看怎么用最短的时间,抓住最关键的值,搭个简单的架子。
2. 数据分析
1) 预测目标
2018 年二季度的营业收入。
2) 已知数据
题目提供的除了报表数据,提交格式以外,还有一些说明文档,这些文档都需要看一遍,很多对题目的疑问都可以从中找到答案。
3) 分析
营业收入 REVENUE 在利润表 Income_Statement.xls
中,先来看看这个文件,它把金融,保险,银行和一般工商业分成四个 sheet
分别存放。
下面分析一下其中占比最高的一般工商业(General Business)公司,数据约
20 万条左右。涉及 3500 多家公司。时间范围是 2009 年 4 月到 2018 年 7
月。
一般报表中的所有项目都是一起发布的,所以预测营收时,同期的其它数据也不知道。相对于用上期的其它数据预测本期的营收,还不如用历史的营收数据预测本期营收。
...
Docker集群
Docker 集群
#Docker
1. 说明
一般情况下,我们用 Docker run 命令将 docker
启成普通进程。有时候我们有多台运行 docker 的机器,希望 Docker
以集群方式运行。与手动启动不同
Docker,集群涉及统一管理,各服务的状态监控,负载均衡,日志文件,重启,统一向外暴露端口等等。
本篇介绍一些 Docker 集群相关的内容:包括集群管理工具 Smarm,卷
Volume,图形化管理工具 Portainer。
2. 安装 Docker 的最新版本
如果 ubuntu 版本较低,用 apt-get 只能安装 docker 的早期版本,像
docker service, docker volume 等工具都无法正常使用,需要下载 docker
较新的版本,方法如下:
123$ curl -fsSLO https://get.daocloud.io/docker/builds/Linux/x86_64/docker-17.05.0-ce.tgz$ sudo tar --strip-components=1 -xvzf docker-17.05 ...
Docker进阶
Docker 进阶
#Docker
说明
之前,基本是在单机上用
Docker,在不影响当前环境的前提下,创建和使用一些特殊环境。最近,涉及到多
Docker
的协作,比如:在同一服务器上启动和管理多个容器;在一台服务器上使用类似的镜像版本,在不同的机器之间复制镜像等等,积累了一些
docker 使用方法,和大家分享一下。
##环境搭建
要想了解整个流程,还是在自己机器上搭建环境,从头到尾过一遍,最为直接。
1$ sudo apt-get install docker.io
安装好之后,就可以使用 docker 命令了。此时还只能用 root
身份,如果想让某个用户操作 docker,则需要将其加入 docker 组。
12345$ sudo usermod -aG docker $your-user # 将新成员加入docker组$ sudo service docker restart # 重启docker服务$ newgrp - docker # 刷新docker成员从官网拉下ubuntu镜像$ docker run -it ubuntu bash # 如果本地不存在 ...
Python爬虫
Python 爬虫
1. 说明
做数据挖掘常常需要抓取网页内容,有些工具能通过分析 url
中的链接,把整个网站抓下来,也就是我们常说的爬虫工具。
有时候需要把交互网页的内容抓下来,比如:在 input
框中输入想查的内容,服务器端实时计算结果,或者从数据库中查询后返回结果。像整句翻译功能,查询食物的热量等等。下面介绍
Python 用 GET 和 POST 方式抓取实时内容的方法。
2. GET 方式
GET 方式把要查询的参数放在 url 地址中,非常简单。下例用 Python
程序,查询运单信息,写法如下:
123456import urllib.request url = 'http://cha.xxx.cn/?stype=kd&q=123456'req = urllib.request.Request(url) html = urllib.request.urlopen(req).read()print(html.decode("utf8"))
GET
方式,用问号和等号“addr?key=value”的方式 ...
数据挖掘之_后处理
数据挖掘之 _ 后处理
常常听说数据预处理,后处理相对少见,本篇来说说何时需要后处理,以及后处理的一些简单方法。
数据挖掘的流程一般是:输入数据 ->特征工程 ->模型训练/预测
->导出结果。后处理是将模型预测的结果进一步处理后,再导出。
先看一个例子:比如我们网购小包装的咖啡,一般的购买习惯是,在少量购买时,需要多少买多少:一包,两包,三包;买的较多的时候,可能是六包,八包,十包;买得更多的情况下,可能是十包,十五包,二十包;再往上是三十包,四十包,五十包,一百包……以此类推。
也就是说:数量大的时候,我们可能更倾向于取整,双数,五的倍数,十的倍数等等。如果不是针对人数买的话,一般不会出现
7, 19, 113
这样的购买数量。如下图示意:横轴代表购买数量,纵轴代表该数量出现的次数。蓝色为实际购买数据,橙色为预测数据。注意本图是结果
y 的分布图。
想在模型和预测处理中优化比较困难,因为对于测试集,并不知道预测的结果是多少,于是也无法将它是否靠近
2,5,10 的倍数作为特征代入模型。
此时可使用后处理,让橙线靠近蓝线,最简单的方法是手写判 ...
自然语言处理之_SentencePiece分词
自然语言处理之
_SentencePiece 分词
#自然语言处理
1、说明
SentencePiece 是一个 google
开源的自然语言处理工具包。网上是这么描述它的:数据驱动、跨语言、高性能、轻量级——面向神经网络文本生成系统的无监督文本词条化工具。
那么它究竟是干什么的呢?先举个例子:假设在数据挖掘时,有一列特征 T
是文本描述,我们需要将其转成枚举型,或者多个布尔型代入模型,即:需要从文本中提供信息构造新特征。
首先,我们可以用标点将长句长分成短句,以短句作为关键词,看每个实例的特征
T
中是否包含该关键词,从而构造新的布尔型特征。但有时候表达同一个意思所使用的文本并不完全一致,比如“买三送一”和“买三送一啦!”是一个意思。
此时,我们可以用 SnowNLP 或者 jieba 分词把描述拆成单个词,看 T
是否包括该关键词。但这样用也有一个问题:可能把一个意思拆成了多个特征,比如“袖子较短,领子较大”被拆成了四个独立的特征“袖子”“较短”“领子”“较大”,组合效果没有了。
我们想要的效果是:如果“袖子较短”这个组合经常出现,就把它当成一个词处理。jieba ...