我的面试整理

目录

1.编程语言考察Java、python

Java方面

python方面

2.算法与数据结构

3.数据库、SQL与Linux

数据库

事务的ACID是什么?

传统关系型数据库和非关系型数据库HBase的区别,HBase删除数据怎么做(时间戳切入)?

比如侧重关系型数据库的可能会问你索引为何选B树、B+树,不选二叉树?

mySQL空间索引实现?

mysql对GIS空间数据的支持,包括创建空间索引

SQL问题

sql优化原则?

SQL语句自动规范化处理?

4.计算机网络

三次握手四次挥手(几乎每家公司面试都会提到)

Http协议

5.大数据与云计算

离线处理方向的可能会问你离线数据处理怎么做?

基于磁盘的离线处理和基于内存处理海量数据的区别?

MapReduce和Hive的区别,HBase和HDFS的区别等?

滴滴对服务端高并发的问题比较看重,例如,有技术人员被问到在打车高峰期流量较高的情况下,如何让客户省钱?

Hadoop提交作业的总体流程?

HDFS的基本原理?

Hadoop的shuffle过程?

spark

6.机器学习与数据挖掘

7.项目经历

IPv6:

什么是OPC UA

8.职业规划


1.编程语言考察Java、python

Java方面

https://blog.csdn.net/weixin_41835916/article/details/81413498

虚拟机内存模型?

https://blog.csdn.net/weixin_41835916/article/details/81434915

JVM:方法区、堆;本地方法栈、虚拟机栈、程序计数器

类加载机制?

类加载过程:验证(验证阶段作用是保证Class文件的字节流包含的信息符合JVM规范,不会给JVM造成危害)、准备(准备阶段为变量分配内存并设置类变量的初始化)、解析(解析过程是将常量池内的符号引用替换成直接引用)、初始化

双亲委派模型中方法双亲委派是指如果一个类收到了类加载的请求,不会自己先尝试加载,先找父类加载器去完成。当顶层启动类加载器表示无法加载这个类的时候,子类才会尝试自己去加载。当回到最早的发起者加载器还无法加载时,并不会向下找,而是抛出ClassNotFound异常方法:启动(Bootstrap)类加载器,标准扩展(Extension)类加载器,应用程序类加载器(Application ),上下文(Custom)类加载器。

类加载的意义是防止内存中出现多份同样的字节码 。

JAVA的初始化顺序:

父类的静态成员初始化>父类的静态代码块>子类的静态成员初始化>子类的静态代码块>父类的代码块>父类的构造方法>子类的代码块>子类的构造方法

注意:1.静态成员和静态代码块只有在类加载的时候执行一次,再次创建实例时,不再执行,因为只在方法区存在一份,属于一整个类。2.上述的是通用的加载顺序,如果没有则省略。

垃圾回收机制?

Java 的GC算法运行在jvm的堆空间中,管理着Java类实例对象对堆内存的使用,Java中每次new一个对象,都需要在堆中开辟相应的内存空间,当对象被程序调用结束,即对象消亡时应将对象占有的内存进行回收(垃圾回收)。对象存活判断-判断对象是否存活一般有两种方式:
1.引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收。此方法简单,无法解决对象相互循环引用的问题。引用记数法没办法解决循环引用的问题,所以用根搜索。
2.可达性分析(Reachability Analysis)-根搜索算法:从GC Roots开始向下搜索,搜索所走过的路径称为引用链当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。引用不可到达的对象被认为是可回收的对象。

python方面

2.算法与数据结构

(剑指offer、July面试题集)算法题目还是排序、递归、遍历等常见题目。

调度算法https://blog.csdn.net/GitChat/article/details/81703229

字符串全排列:http://www.cnblogs.com/wanghongsen/p/9208775.html

快速排序:http://www.cnblogs.com/coderising/p/5708801.html

冒泡排序(代码):https://www.cnblogs.com/shen-hua/p/5422676.html

深度、广度遍历搜索是出现频率最高的算法:https://www.cnblogs.com/toSeeMyDream/p/5816682.html

最后是对基础算法的现场编程,比如一个数1234,得到下一个比它大的即1243以此类推。

数据结构方面:堆:堆实际上是一棵完全二叉树https://jingyan.baidu.com/article/5225f26b057d5de6fa0908f3.html

红黑树:红黑树是一种近似平衡的二叉查找树,它能够确保任何一个节点的左右子树的高度差不会超过二者中较低那个的一陪。具体来说,红黑树是满足如下条件的二叉查找树(binary search tree):

  1. 每个节点要么是红色,要么是黑色。
  2. 根节点必须是黑色
  3. 红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色)。
  4. 对于每个节点,从该点至null(树尾端)的任何路径,都含有相同个数的黑色节点。

哈希表、二叉树是最重要被考到的概念。

3.数据库、SQL与Linux

数据库

事务的ACID是什么?

事务是由一组SQL语句组成的逻辑处理单元。

答:ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)所应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability).这是可靠数据库所应具备的几个特性。

Atomic(原子性):指整个数据库事务是不可分割的工作单位。只有使据库中所有的操作执行成功,才算整个事务成功;事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。

Consistency(一致性):指数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。例如对银行转帐事务,不管事务成功还是失败,应该保证事务结束后ACCOUNTS表中Tom和Jack的存款总额为2000元。

Isolation(隔离性):指的是在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。

Durability(持久性):指的是只要事务成功结束,它对数据库所做的更新就必须永久保存下来。即使发生系统崩溃,重新启动数据库系统后,数据库还能恢复到事务成功结束时的状态。

传统关系型数据库和非关系型数据库HBase的区别,HBase删除数据怎么做(时间戳切入)?

答:数据库(database)是有组织的数据集合。严格意义上地说是模式( schemas)表格( tables),查询( queries,,报告(reports),视图( views)和其他元素的集合。关系数据库用数学中的集合论来指导数据库的设计、存储和查询等过程。

关系数据库,结构严谨、符合关系理论,可以存储结构化数据;支持比较复杂的数据关系关联查询;支持事务,可以保障数据安全;支持SQL语言做操作。

NoSQL: 结构简单、健值对关系,而且大多数都是直接存内存的,所以具有很高的性能;而且结构简单支持水平扩展;大多数都是开源,可以免费试用。http://www.360doc.com/content/18/0313/23/11935121_736796498.shtml

对于传统数据库,增加列对于一个项目来讲,改变是非常大的。但是对于nosql,插入列和删除列,跟传统数据库里面的增加记录和删除记录类似

Hbase的优缺点 
1 列的可以动态增加,并且列为空就不存储数据,节省存储空间.

2 Hbase自动切分数据,使得数据存储自动具有水平scalability.

3 Hbase可以提供高并发读写操作的支持

Hbase的缺点:

1 不能支持条件查询,只支持按照Row key来查询.

2 暂时不能支持Master server的故障切换,当Master宕机后,整个存储系统就会挂掉.

补充 
1.数据类型,Hbase只有简单的字符类型,所有的类型都是交由用户自己处理,它只保存字符串。而关系数据库有丰富的类型和存储方式。 
2.数据操作:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,而传统数据库通常有各式各样的函数和连接操作。 
3.存储模式:HBase是基于列存储的,每个列族都由几个文件保存,不同的列族的文件时分离的。而传统的关系型数据库是基于表格结构和行模式保存的 
4.数据维护,HBase的更新操作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改 
5.可伸缩性,Hbase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松增加或减少硬件的数量,并且对错误的兼容性比较高。而传统数据库通常需要增加中间层才能实现类似的功能。

Mongodb用于存储非结构化数据,尤其擅长存储json格式的数据。存储的量大概在10亿级别,再往上性能就下降了,除非另外分库。Hbase是架构在hdfs上的列式存储,擅长rowkey的快速查询,但模糊匹配查询(其实是前模糊或全模糊)不擅长,但存储的量可以达到百亿甚至以上,比mongodb的存储量大多了。

比如侧重关系型数据库的可能会问你索引为何选B树B+树,不选二叉树

答:B+是一个树数据结构,通常用于数据库和操作系统的文件系统中,B+树的特点是能够保持数据稳定有序,其插入与修改拥有比较稳定的对数时间复杂度,B+树元素自底向上插入,这个和二叉树刚好相反。

mySQL空间索引实现?

mySQL优点-良好的安全连接,自带查询解析、sql语句优化,使用读写锁(细化到行)、事物隔离和多版本并发控制提高并发,完备的事务日志记录,强大的存储引擎提供高效查询(表记录可达百万级),如果是InnoDB,还可在崩溃后进行完整的恢复,优点非常多。

mysql客户端通过协议与mysql服务器建立连接,发送查询语句,先检查查询缓存,如果命中,直接返回结果,否则进行语句解析,有一系列预处理,比如检查语句是否写正确了,然后是查询优化(比如是否使用索引扫描,如果是一个不可能的条件,则提前终止),生成查询计划,然后查询引擎启动,开始执行查询,从底层存储引擎调用API获取数据,最后返回给客户端。

答:mysql默认使用的BTREE索引,并且一个大方向是,无论怎么折腾sql,至少在目前来说,mysql最多只用到表中的一个索引。而索引的实现也跟存储引擎,按照实现方式分,InnoDB的索引目前只有两种:BTREE索引和HASH索引。通常我们说的索引不出意外指的就是B树索引,InnoDB的BTREE索引,实际是用B+树实现的,因为在查看表索引时,mysql一律打印BTREE,所以简称为B树索引。使用了BTREE索引,意味着所有的索引是按顺序排列存储的(升序),mysql就是这么干的,mysl中的BTREE索引抽象结构如下图(参考高性能mysql)。

索引能加快访问速度,因为有了它无需全表扫描数据(不总是这样),根据查找的值,跟节点中的值比较,通常使用二分查找,对于排好序的数值来说,平均速度几乎是最快的。

https://wenda.so.com/q/1461176220722252?src=140

mysql对GIS空间数据的支持,包括创建空间索引

在最新发布的MySQL 5.7.4实验室版本中,InnoDB存储引擎新增了对于几何数据空间索引的支持。 
在此之前,InnoDB将几何数据存储为BLOB(二进制大对象)数据,在空间数据上只能创建前缀索引,当涉及空间搜索时非常低效,尤其是在涉及复杂的几何数据时。在大多数情况下,获得结果的唯一方式是扫描表。
新版本MySQL中,InnoDB支持空间索引,通过R树来实现,使得空间搜索变得高效。 
InnoDB空间索引也支持MyISAM引擎现有的空间索引的语法,此外,InnoDB空间索引支持完整的事务特性以及隔离级别。 

常用索引:主键索引-它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引;

组合索引-为了形象地对比单列索引和组合索引,为表添加多个字段

使用索引的注意事项:1.索引不会包含有NULL值的列2.使用短索引3.索引列排序4.like语句操作5.不要在列上进行运算6.不使用NOT IN和<>操作。

SQL问题

sql优化原则?


答:常见的简化规则如下,1.不要有超过5个以上的表连接(JOIN)2.考虑使用临时表或表变量存放中间结果。
3.少用子查询4.视图嵌套不要过深,一般视图嵌套不要超过2个为宜。
5.连接的表越多,其编译的时间和连接的开销也越大,性能越不好控制。
6.最好是把连接拆开成较小的几个部分逐个顺序执行。
7.优先执行那些能够大量减少结果的连接。
8.拆分的好处不仅仅是减少SQL Server优化的时间,更使得SQL语句能够以你可以预测的方式和顺序执行。

SQL语句自动规范化处理?

答:借助SQL*PLUS(或称sqlplus)实现。Oracle的sql*plus是与oracle数据库进行交互的客户端工具,借助sql*plus可以查看、修改数据库记录。在sql*plus中,可以运行sql*plus命令与sql语句。

linux基础操作

https://www.cnblogs.com/wj-1314/articles/7928562.html

http://blog.chinaunix.net/uid-21187846-id-252408.html

4.计算机网络

三次握手四次挥手(几乎每家公司面试都会提到)

TCP(Transmission Control Protocol) 传输控制协议

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:

位码即tcp标志位,有6种标示:SYN(synchronous建立联机)、ACK(acknowledgement 确认)、PSH(push传送)、FIN(finish结束)

RST(reset重置)、URG(urgent紧急)、Sequence number(顺序号码)、Acknowledge number(确认号码)

一个完整的三次握手也就是 请求---应答---再次确认。

由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

1.为什么建立连接协议是三次握手,而关闭连接却是四次握手呢?

这是因为服务端的LISTEN状态下的SOCKET当收到SYN报文的建连请求后,它可以把ACK和SYN(ACK起应答作用,而SYN起同步作用)放在一个报文里来发送。但关闭连接时,当收到对方的FIN报文通知时,它仅仅表示对方没有数据发送给你了;但未必你所有的数据都全部发送给对方了,所以你可以未必会马上会关闭SOCKET,也即你可能还需要发送一些数据给对方之后,再发送FIN报文给对方来表示你同意现在可以关闭连接了,所以它这里的ACK报文和FIN报文多数情况下都是分开发送的。

2.为什么TIME_WAIT状态还需要等2MSL后才能返回到CLOSED状态?

这是因为虽然双方都同意关闭连接了,而且握手的4个报文也都协调和发送完毕,按理可以直接回到CLOSED状态(就好比从SYN_SEND状态到ESTABLISH状态那样);但是因为我们必须要假想网络是不可靠的,你无法保证你最后发送的ACK报文会一定被对方收到,因此对方处于LAST_ACK状态下的SOCKET可能会因为超时未收到ACK报文,而重发FIN报文,所以这个TIME_WAIT状态的作用就是用来重发可能丢失的ACK报文。

3.为什么要四次挥手?

答:根本原因是,一方发送FIN只表示自己发完了所有要发的数据,但还允许对方继续把没发完的数据发过来。

        举个例子:A和B打电话,通话即将结束后,A说“我没啥要说的了”,B回答“我知道了”,但是B可能还会有要说的话,A不能要求B跟着自己的节奏结束通话,于是B可能又巴拉巴拉说了一通,最后B说“我说完了”,A回答“知道了”,这样通话才算结束。

https://blog.csdn.net/shuaicenglou3032/article/details/67634938

Http协议

https://blog.csdn.net/weixin_38051694/article/details/77777010

https://blog.csdn.net/weixin_41835916/article/details/81590826

1.说一下什么是Http协议

对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。

2.什么是Http协议无状态协议?怎么解决Http协议无状态协议?

(1)、无状态协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息
(2)、无状态协议解决办法: 通过1、Cookie 2、通过Session会话保存。

3.说一下Http协议中302状态

http协议中,返回状态码302表示重定向。这种情况下,服务器返回的头部信息中会包含一个 Location 字段,内容是重定向到的url。

4.Http协议由什么组成?

请求报文包括三部分:

(1).请求行:包含请求方法,URI,HTTP版本协议

(2).请求首部字段

(3).请求内容实体

响应报文包含三部分:

(1).状态行:包含HTTP版本,状态码,状态码原因短语

(2).响应首部字段

(3).响应内容实体

5.Http协议中有哪些请求方式?

 GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器

POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式

PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置

HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效

DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件

OPTIONS:查询响应URI支持的HTTP方法

5.大数据与云计算

离线处理方向的可能会问你离线数据处理怎么做?

 

基于磁盘的离线处理和基于内存处理海量数据的区别?

 

MapReduce和Hive的区别,HBase和HDFS的区别等?

HDFS:HDFS是GFS的一种实现,他的完整名字是分布式文件系统,类似于FAT32,NTFS,是一种文件格式,是底层的。

Hive与Hbase的数据一般都存储在HDFS上。Hadoop HDFS为他们提供了高可靠性的底层存储支持。

Hive:Hive不支持更改数据的操作,Hive基于数据仓库,提供静态数据的动态查询。其使用类SQL语言,底层经过编译转为MapReduce程序,在Hadoop上运行,数据存储在HDFS上。

Hbase:Hbase是Hadoop database,即Hadoop数据库。它是一个适合于非结构化数据存储的数据库,HBase基于列的而不是基于行的模式。HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据。

MapReduce是一种分而治之的计算模型(分为map与reduce),类似归并排序算法。

Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS(关系型数据库)数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

Pig:Pig的语言层包括一个叫做PigLatin文本语言,Pig Latin是面向数据流的编程方式。Pig和Hive类似更侧重于数据的查询和分析,底层都是转化成MapReduce程序运行。

区别是Hive是类SQL的查询语言,要求数据存储于表中,而Pig是面向数据流的一个程序语言。

Sqoop: Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

滴滴对服务端高并发的问题比较看重,例如,有技术人员被问到在打车高峰期流量较高的情况下,如何让客户省钱?

Hadoop提交作业的总体流程?

1.ResourceManager ------>yarn的老大
2.NodeManager        ------>yarn的小弟
3.ResourceManager调度器   a.默认调度器------>先进先出FIFO  b.公平调度器------>每个任务都有执行的机会
 4.心跳机制                 ------>NodeManager可通过心跳机制将节点健康状况实时汇报给ResourceManager,而ResourceManager则会    根据每个NodeManager的健康状况适当调整分配的任务数目。当NodeManager认为自己的健康状况“欠    佳”时,可让ResourceManager不再分配任务,待健康状况好转时,再分配新任务。                
5.NodeManager子进程------>独立于NodeManager,不在NodeManager内部

1.Client中,客户端提交一个mr的jar包给JobClient(提交方式:hadoop jar ...)

2.JobClient持有ResourceManager的一个代理对象,它向ResourceManager发送一个RPC请求,告诉ResourceManager作业开始,然后ResourceManager返回一个JobID和一个存放jar包的路径给Client。

3.Client将得到的jar包的路径作为前缀,JobID作为后缀(path = hdfs上的地址 + jobId) 拼接成一个新的hdfs的路径,然后Client通过FileSystem向hdfs中存放jar包,默认存放10份(NameNode和DateNode等操作)

4.开始提交任务,Client将作业的描述信息(JobID和拼接后的存放jar包的路径等)RPC返回给ResourceManager

5.ResourceManager进行初始化任务,然后放到一个调度器中

6.ResourceManager读取HDFS上的要处理的文件,开始计算输入分片,每一个分片对应一个MapperTask,根据数据量确定起多少个mapper,多少个reducer

7.NodeManager 通过心跳机制向ResourceManager领取任务(任务的描述信息)

8.领取到任务的NodeManager去Hdfs上下载jar包,配置文件等

9.NodeManager启动相应的子进程yarnchild,运行mapreduce,运行maptask或者reducetask

10.map从hdfs中读取数据,然后传给reduce,reduce将输出的数据给回hdfs

HDFS的基本原理?

HDFS的主要组成:NameNode,SecondaryNameNode,DataNonde;

HDFS的基本操作:读、写、均衡;

HDFS是一个主从结构,一个HDFS集群是由一个名字节点,它是一个管理文件命名空间和调节客户端访问文件的主服务器,当然还有一些数据节点,通常是一个节点一个机器,它来管理对应节点的存储。HDFS对外开放文件命名空间并允许用户数据以文件形式存储。内部机制是将一个文件分割成一个或多个块,这些块被存储在一组数据节点中。名字节点用来操作文件命名空间的文件或目录操作,如打开,关闭,重命名等等。它同时确定块与数据节点的映射。数据节点负责来自文件系统客户的读写请求。数据节点同时还要执行块的创建,删除,和来自名字节点的块复制指令。      

  名字节点和数据节点都是运行在普通的机器之上的软件,机器典型的都是GNU/Linux,HDFS是用java编写的,任何支持java的机器都可以运行名字节点或数据节点,利用java语言的超轻便型,很容易将HDFS部署到大范围的机器上。典型的部署是由一个专门的机器来运行名字节点软件,集群中的其他每台机器运行一个数据节点实例。体系结构不排斥在一个机器上运行多个数据节点的实例,但是实际的部署不会有这种情况。集群中只有一个名字节点极大地简单化了系统的体系结构。名字节点是仲裁者和所有HDFS元数据的仓库,用户的实际数据不经过名字节点。  

 HDFS是一个不错的分布式文件系统,它有很多的优点,但也存在有一些缺点,包括:不适合低延迟数据访问、无法高效存储大量小文件、不支持多用户写入及任意修改文件。                  

Hadoop的shuffle过程?

https://www.jianshu.com/p/998e0ff60ede

https://blog.csdn.net/jiutianhe/article/details/44592767

map task的输出结果有效地传送到reduce端。也可以这样理解, Shuffle描述着数据从map task输出到reduce task输入的这段过程。 

在Hadoop这样的集群环境中,大部分map task与reduce task的执行是在不同的节点上。当然很多情况下Reduce执行时需要跨节点去拉取其它节点上的map task结果。如果集群正在运行的job有很多,那么task的正常执行对集群内部的网络资源消耗会很严重。这种网络消耗是正常的,我们不能限制,能做的就是最大化地减少不必要的消耗。还有在节点内,相比于内存,磁盘IO对job完成时间的影响也是可观的。从最基本的要求来说,我们对Shuffle过程的期望可以有: 

  • 完整地从map task端拉取数据到reduce 端。
  • 在跨节点拉取数据时,尽可能地减少对带宽的不必要消耗。
  • 减少磁盘IO对task执行的影响。

如果是自己来设计这段Shuffle过程,那么你的设计目标是什么。我想能优化的地方主要在于减少拉取数据的量及尽量使用内存而不是磁盘。 

整个流程我分了四步。简单些可以这样说,每个map task都有一个内存缓冲区,存储着map的输出结果,当缓冲区快满的时候需要将缓冲区的数据以一个临时文件的方式存放到磁盘,当整个map task结束后再对磁盘中这个map task产生的所有临时文件做合并,生成最终的正式输出文件,然后等待reduce task来拉数据。

map端的所有工作都已结束,最终生成的这个文件也存放在TaskTracker够得着的某个本地目录内。每个reduce task不断地通过RPC从JobTracker那里获取map task是否完成的信息,如果reduce task得到通知,获知某台TaskTracker上的map task执行完成,Shuffle的后半段过程开始启动。 

 简单地说,reduce task在执行之前的工作就是不断地拉取当前job里每个map task的最终结果,然后对从不同地方拉取过来的数据不断地做merge,也最终形成一个文件作为reduce task的输入文件。

spark

6.机器学习与数据挖掘

https://www.cnblogs.com/chamie/p/4678409.html

https://blog.csdn.net/qq_40793975

https://blog.csdn.net/glodon_mr_chen/article/details/80392503

https://blog.csdn.net/qq_36232601/article/details/79721992

专栏文章:https://blog.csdn.net/column/details/26494.html

支持向量机:https://mp.weixin.qq.com/s/K4tH8hYhH0NxqyY0mjGzww

卷积神经网络:https://blog.csdn.net/vintage_1/article/details/17253997

https://www.cnblogs.com/skyfsm/p/6790245.html

DenseNet详解:https://mp.weixin.qq.com/s?__biz=MzU4MjQ3MDkwNA==&mid=2247486407&idx=1&sn=fc0bcb9f4dfed4c31a2fbd2b7aa36afd&chksm=fdb69650cac11f46987ef7c9cb031232ed2ce95356c08cfe5f8b1b1eaabd1d103e075fe07a23&mpshare=1&scene=23&srcid=0827lClz9lfzTN5lCQPaYXSu#rd

机器学习蓝宝书https://zhuanlan.zhihu.com/p/42862322?utm_source=qq&utm_medium=social&utm_oi=795041425376055296

(1)分类:可以应用到涉及到应用分类、趋势预测中,如淘宝商铺将用户在一段时间内的购买情况划分成不同的类,根据情况向用户推荐关联类的商品,从而增加商铺的销售量。很多算法都可以用于分类,如决策树,knn,贝叶斯等

(2)回归:市场营销中,回归分析可以被应用到各个方面。如通过对本季度销售的回归分析,对下一季度的销售趋势作出预测并做出针对性的营销改变。常见的回归算法包括:最小二乘法(Ordinary Least Square),逻辑回归(Logistic Regression),逐步式回归(Stepwise Regression),多元自适应回归样条(Multivariate Adaptive Regression Splines)以及本地散点平滑估计(Locally Estimated Scatterplot Smoothing)

(3)聚类:属于同一类别的数据间的相似性很大,但不同类别之间数据的相似性很小,跨类的数据关联性很低。常见的聚类算法包括 k-Means算法以及期望最大化算法(Expectation Maximization, EM)。

(4)关联规则:关联规则的挖掘过程主要包括两个阶段:第一阶段为从海量原始数据中找出所有的高频项目组;第二极端为从这些高频项目组产生关联规则。关联规则挖掘技术已经被广泛应用于金融行业企业中用以预测客户的需求,各银行在自己的ATM 机上通过捆绑客户可能感兴趣的信息供用户了解并获取相应信息来改善自身的营销。常见算法包括 Apriori算法和Eclat算法等。

(5)神经网络:典型的神经网络模型主要分为三大类:第一类是以用于分类预测和模式识别的前馈式神经网络模型,其主要代表为函数型网络、感知机;第二类是用于联想记忆和优化算法的反馈式神经网络模型,以Hopfield 的离散模型和连续模型为代表。第三类是用于聚类的自组织映射方法,以ART 模型为代表。

(6)Web数据挖掘:目前常用的Web数据挖掘算法有:PageRank算法,HITS算法以及LOGSOM 算法。这三种算法提到的用户都是笼统的用户,并没有区分用户的个体。目前Web 数据挖掘面临着一些问题,包括:用户的分类问题、网站内容时效性问题,用户在页面停留时间问题,页面的链入与链出数问题等。在Web 技术高速发展的今天,这些问题仍旧值得研究并加以解决。

(7)深度学习 :很多深度学习的算法是半监督式学习算法,用来处理存在少量未标识数据的大数据集。常见的深度学习算法包括:受限波尔兹曼机(Restricted Boltzmann Machine, RBN), Deep Belief Networks(DBN),卷积网络(Convolutional Network), 堆栈式自动编码器(Stacked Auto-encoders)。

(8)集成算法:常见的算法包括:Boosting, Bootstrapped Aggregation(Bagging), AdaBoost,堆叠泛化(Stacked Generalization, Blending),梯度推进机(Gradient Boosting Machine, GBM),随机森林(Random Forest)。

(9)降维算法:常见的算法包括:主成份分析(Principle Component Analysis, PCA),偏最小二乘回归(Partial Least Square Regression,PLS), Sammon映射,多维尺度(Multi-Dimensional Scaling, MDS), 投影追踪(Projection Pursuit)等。

有一篇文章中给出了一个简单的算法选择技巧:首当其冲应该选择的就是逻辑回归,如果它的效果不怎么样,那么可以将它的结果作为基准来参考,在基础上与其他算法进行比较;然后试试决策树(随机森林)看看是否可以大幅度提升你的模型性能。即便最后你并没有把它当做为最终模型,你也可以使用随机森林来移除噪声变量,做特征选择;如果特征的数量和观测样本特别多,那么当资源和时间充足时(这个前提很重要),使用SVM不失为一种选择。

通常情况下:【XGBOOST>=GBDT>=SVM>=RF>=Adaboost>=Other…】

7.项目经历

对项目中用到的相关算法、遇到的技术难点一定要心里有数。

(流程图、公式、关键技术难点、如何解决,细节,所用技术,架构、功能流程、如何实现,所用算法以及算法应用到其他领域的解决方案、从中学到了什么-以赛促学)

1.基于大数据的网络爱国主义教育机制研究

项目地点: 重庆邮电大学互联网大数据舆情研究实验室          项目角色:算法与应用平台设计

主要职责与业绩:1.关于爱国主义主题下的网民情感倾向分析,设计了一种能够用于大数据集上挖掘隐含情感语义的高效文本分类模型:基于组合语义深度特征与 FastText 神经网络的情感分类模型; 2.设计了一种基于网民言论数据情感分析的爱国素养评价策略; 3.设计了面向社交媒体场域的网络爱国舆情监测与爱国教育云平台,相关意识形态管理部门可依托该平台对社交媒体场域下的爱国主义教育对象实现爱国主题情感分析、爱国主义教育素养评判、爱国主义教育内容精准推送以及爱国舆情监测等工作。

项目背景:北京大学与南海大数据应用研究院联合主办的全国高校数据驱动创新研究大赛,主要研究成果以学术论文的形式呈现和提交。

参与成员:马院同学负责课题意义、目的、合理性、可行性方面的分析与论证;我主要负责课题中用到的情感分析算法的设计和模型的构建以及应用平台架构的设计;软件工程的同学负责完成了本次研究课题中算法实验测试与数据整理工作。

本课题主要提出的一种由开放社交媒体(微博、豆瓣、知乎、天涯、贴吧等相对于微信这种封闭式社交媒体)用户数据驱动的网络爱国主义教育机制:首先获取被监测站点日活跃用户的ID、所关注话题、地理位置、言论等数据,其中对言论数据实施主题抽取,利用构建的爱国主义主题词典只过滤出跟爱国主义主题相关的用户言论数据,对每一条爱国主题相关的用户言论依靠情感分析算法模型进行情感正负极性评判,一定时间窗口的用户正负情感言论比重将作为该时间段内用户爱国素养评价的依据,根据历史累计用户爱国素养评价结果采取不同的爱国主义教育措施(线上教育内容推送、线下应急纠偏),关于线上爱国主义教育内容的推送,基于用户关注话题、地理位置、言论等多维度数据对用户进行画像,找出用户的内容关注兴趣点,从而对用户推送与其兴趣点相关的爱国主义正面内容,使用户在浏览感兴趣内容同时潜移默化受到爱国主义熏陶和思想引导。(传统的舆情管理:对不良内容、敏感话题进行删帖、屏蔽过于粗暴,缺乏对网民的思想引导,同时对整个社交平台大面积的负面言论(网络喷子)无法有效检测识别)

课题难点、如何解决:主要难点倒不是技术的可行性和算法的实现问题,而是爱国主题词典的构建、爱国素养评判的尺度、在线爱国教育的有效如何度量以及社会言论自由方面的质疑、被检测开放社交媒体站点的数据获取政策(牵扯用户隐私-科技应用的弊端侵犯公民权益,如科幻剧《黑镜》)。

所设计的情感分析算法:像微博此类开放社交媒体的用户言论多为短文本形式,2016年Facebook 开源的FastText快速文本分类器在此类社交媒体用户文本正负情感识别方面有很好表现,理论上标准多核处理器情况下FastText可以在10分钟内训练超过10亿个词汇语料模型,并将训练时间由深度神经网络模型所需的几天缩短到几秒种。(实验在500万微博语料集训练FastText的时间只有几分钟远远少于支持向量机、朴素贝叶斯分类器的训练时间),为了进一步提高Fast Text对文本情感分类的准确率,我参考文献引入了文本的组合语义深度特征(传统机器学习情感分类方法受限于表面词形底层特征的特性,对文本中蕴含的语义层信 息却少有提示,甚至有可能导致一部分语义信息的丢失,而语义信息对文本的情感分析,尤 其对隐含情感的处理具有非常重要的作用。。组合语 义的意义在于一个复合表达式是由构成它的每个成分及其将这些成分组合在一起的句法规 则所描述。),设计了基于组合语义深度特征的FastText神经网络模型,使文本分类更加关注上下文语义和文本词性特征的深度表示,避免情感识别的断章取义。(如何获得组合语义深度特征?——算法过程主要是:首先是对输入文本进行预处理,汉语的分 词和词性标注利用 Stanford 的分词和词性标注工具包实现,依存句法分析采用 Stanford DependencyParsing 句法分析器实现;然后建立词语的分布式语义模型(DSM), 选择目标词语集V, 选择上下文信息集 C;最后,对语义空间模型(DSM)进行组合, 建立词-上下文信息的关联矩阵 F:V*C,根据构建的关联矩阵,建立词语向量查询表,将每个词语向量投射到d维空间,生成组合语义词向量模型。如何与FastText结合?把FastText自带的标准词embeding向量模型替换为通过语料库挖掘得到的组合语义词向量作为FastText的组合语义深度特征词embeding向量用于模型训练,实验表明相较于标准的FastText情感分类模型,基于组合语义深度特征的FastText情感分类准确率提升了3%左右,如果语料库够大准确率还能提升,实际上Facebook对FastText已经做了很好的优化。)

网民(用户)爱国素养评价:网民爱国素养指数以一个季度(三个月)为周期,对同一ID累计在线发布的正负言论情感次数结合话题权重进行加权计算。(p*w1-n*w2,p、n为正负言论次数)

关于应用平台设计:一个平台和两级支撑(国家部委层面网络意识形态监控部门管理平台运行、县区专职网络爱国主义教育宣传工作人员平台普通用户),统一部署和维护。架构:数据服务层-算法功能层-业务应用层。

2.基于OPC UA和IPv6的车间设备智能监控系统研究

项目角色:系统设计与算法优化     项目地点:重庆邮电大学智能工厂示范基地

主要职责与业绩:1.系统功能设计与智能决策算法模型的搭建; 2.系统数据库方面的设计; 3..项目文档资料的整理及撰写等。

项目背景:教育部经费支持的项目,属于重庆邮电大学“德贷”智能工厂项目的子项目,与北京赛尔网络公司开展合作,赛尔网络提供车间设备监控物联网搭建上的技术支持,我们主要负责设备监控系统的功能、架构设计以及设备故障诊断、能耗管控、预测性维护算法模型的研究,我主要在项目中负责设备预测性维护算法的设计与决策模型开发。

研究目标:结合建设示教型智能工厂的大背景针对智能制造车间设备监控的需求,研究并设计一种基于IPv6网络环境和OPC UA通信规范的车间设备智能监控系统,达到对设备运行数据的实时采集和工作状况的实时监控,实现车间设备的故障预警预测性维护以及能耗管控等目标。本课题所涉及的车间作业设备有:通用数控机床、立式数控加工中心、用于零件装配4轴机械臂、AGV自动导向小车。

技术路线:首先作业车间现场设备和所研究设备监控系统数据传输终端之间的数据交换通过OPC UA 规范的统一组件接口进行连接,并采用基于IPv6地址空间的各类设备传感器布局车间传感器网络,数据的传输使用IPv6网络环境下的通信协议其次建立车间设备信息模型,确定所采集设备数据参数种类和范围,同时针对不同类型的设备选用合适的数据采集方法以及设计高效地数据存取方案;接着研究构建一种车间设备数据处理的工程方法,并将数据处理的结果通过设备监控系统应用终端呈现给设备管理人员,进而可对设备运行做出优化调整和预测性维护,其中基于设备运行状态数据的设备预测性维护是本课题研究的重点(我负责的算法部分),我们采取机器学习的方法找出设备存在的潜在问题,从而设备管理人员可及时对设备进行维护和保养;同时将设备监控系统数据处理的历史结果传输给MES系统或ERP系统相应服务器以便于工厂其他生产管理人员信息共享;最后本课题研究的设备监控系统的应用程序部分采用JavaWeb技术开发,终端系统选用B/S架构。

本技术方案总体分为现场设备层、信息模型层、信息通讯层和用户层四个层次。现场层:主要做信息集成,对监控的所有底层智能设备信息构成进行分析,建立相应设备的信息模型(确定要采集设备的参数),并针对不同类别的信息,采用工控设备和传感设备两种方式进行设备信息采集利用工控设备主要采集封装在设备内部的信息如设备开停机状态、加工信息、电压、转速等,利用传感设备主要采集未封装在设备内部,但生产管理需要采集的信息,如刀夹具等工装信息以振动、压力数据、温度信息,通过基于 IPv6和OPC UA规范的车间物联感知网络将采集获取的信息上传至包括工厂生产人员、质检人员、管理人员等在内的本地和远程用户的管理终端,实现底层智能设备信息的集成共享, 支持生产管理者对设备运行进行实时监控,进而实现对车间运行设备的智能预警、预测性维 护、能耗管控。系统功能设计:实时监控设备运行、设备的智能预警、预测性维护、能耗管控。

IPv6:

IPv6的地址长度为128b,是IPv4地址长度的4倍。于是IPv4点分十进制格式不再适用,采用十六进制表示。IPv6有3种表示方法:

冒分十六进制表示法、0位压缩表示法、内嵌IPv4地址表示法。

IPv6报文的整体结构分为IPv6报头、扩展报头和上层协议数据3部分。IPv6报头是必选报文头部,长度固定为40B,包含该报文的基本信息;扩展报头是可选报头,可能存在0个、1个或多个,IPv6协议通过扩展报头实现各种丰富的功能;上层协议数据是该IPv6报文携带的上层数据,可能是ICMPv6报文、TCP报文、UDP报文或其他可能报文。

什么是OPC UA

OPC UAOPC Unified Architecture)是指OPC统一体系架构,是一种基于服务的、跨越平台的工业通信解决方案及其应用软件组件。是一种工业自动化标准就是机器之间的“对话”) OPC全称是OLE for Process Control。

OPC UA具有如下特点:

1)    扩展了OPC的应用平台。传统的基于COM/DCOM OPC技术只能基于Windows操作系统,OPC UA支持拓展到LinuxUnix平台。这使得基于OPC UA的标准产品可以更好地实现工厂级的数据采集和管理;

2)    不再基于DCOM通讯,不需要进行DCOM安全设置;

3)    OPC UA定义了统一数据和服务模型,使数据组织更为灵活,可以实现报警与事件、数据存取、历史数据存取、控制命令、复杂数据的交互通信;

4)    OPC UAOPC DA更安全。OPC UA传递的数据是可以加密的,并对通信连接和数据本身都可以实现安全控制。新的安全模型保证了数据从原始设备MES,ERP系统,从本地到远程的各级自动化和信息化系统的可靠传递

5)    OPC UA可以穿越防火墙,实现Internet 通讯

OPC UA解决数据采集的困境

工业通信分互联(硬件接口的连接)、互通(软件层面的数据格式与规范)、语义互操作(语义的定义与规范)几个层面,而各种总线解决的是连接问题,而互通解决了应用层的匹配,而OPC UA则解决不同系统之间的语义的互操作-包括应用行为与动态功能

我在课题中研究内容:设备预测性维护

传统设备维护缺点:当设备风险很高的时候,我们要对它进行常规性维护。譬如,车每几个月保养一次,飞机每天保养一次。但是这些方法会导致过度维护,造成资源的浪费。

预测性维护能预测设备故障发生的时间节点,监控未来的系统故障并提前安排维护时间表,进而有针对性的采取行动来维修、更换系统。它能极大地节省开销、带来高的可预测性和增强系统的可用性。它将检测异常和故障模式,早早地给出警报。这些警报能促使人们更有效地维护这些组件。减少设备维护频率最小化花费在某个被维护的设备上的时间,更充分地利用时间最小化维护费用。)企业希望提前预知可能发生的问题,评估设备的健康状况,并能够对风险进行干预,避免故障的发生;在故障发生时对维保人员提供决策性建议,降低维修保养门槛,有效缩短维保周期,帮助企业优化生产流程,提高质量,降低运营成本。

预测性维护有两种优化目标:1.避免或最小化故障停机时间。2.优化周期性的维护操作。

设备故障预测模型:采用基于设备运行数据的机器学习算法搭建预测模型,利用该模型监控设备未来的系统故障并提前安排维护时间表。主要借鉴了GitHub上的一个开源例子,在NASA引擎故障数据集上用回归模型来预测剩余使用寿命(RUL),进行引擎的预测性维护。

预测模型搭建步骤:1.所需数据来源:首先,通过设备上的传感器和工控装置监控和收集设备运行状态数据,预测性维护所需要的数据是时间序列数据数据包括时间戳、在该时间戳所收集的传感器读数以及设备号。预测性维护的目的是在时间节点“t”,使用截至到该时间节点的数据来预测设备在近期是否会发生故障。2.用Auto-Encoder(自编码神经网络)技术去除传感器所采集样本数据的噪声,对样本数据进行一定降维处理;实际可利用的样本数据有:故障运行模拟数据、企业提供的设备故障数据集、不良品数据、效能数据,同时设备出厂报警数据或故障码本身也是能够被利用的标注数据。

3.选用机器学习算法搭建预测模型:分类方法 - 预测在接下来的n步中是否有可能发生故障。需要较少的样本数据

回归方法 - 预测在下次故障发生之前的剩余时间,即剩余使用寿命(RUL)。需要更多样本数据)

这两类方法都需要做数据预处理和特征选择。分类方法只能提供一个由布尔值表示的答案,但是能从很少的数据上获得很高的准确率。回归方法可以提供关于故障发生时间的更多的信息,但也需要更多的数据

我设计的智能决策算法模型:在小样本数据情况下:主要是基于SVM 的分类模型构建模型,来预测后N步故障是否发生,比如预测机床是否会在接下来的30次循环中发生故障,将有故障的状态看作正面的(P),没有故障的状态看作正常的(N)。在预测后N(30)步内可能出现故障上的准确率是94%。

在大样本数据情况下:lightGBM/神经网络(深度学习,随机梯度下降法来训练神经网络,网格搜索来优化超参数)的 回归模型,预测剩余使用寿命(RUL)。预测RUL的目标是减小实际RUL值与预测RUL值之间的误差。均方根误差作为衡量值,因为它会严厉地惩罚大的误差,迫使算法预测结果接近实际RUL。最终解决方案在预测剩余使用寿命上的RMSE值是18.77。

课题自己遇到的难点:设备故障数据采集问题,基督式机器学习的预测方法需要大量包含足够多故障场景的训练数据。由于设备故障很少见,数据收集会需要很长的时间。这是应用预测性维护的一个极大的障碍,标注数据获得成本较高。一种可能的解决途径是使用机器学习的半监督学习方法、弱监督学习充分利用无标注数据并加以人类辅助经验搭建预测模型,降低对标注数据的依赖,主要借鉴清华大学RealAI团队的工业异常检测所用的弱监督概率机器学习成果。

3.阿里天池数据挖掘比赛工业AI :智能制造质量预测

阿里云与苏州高新区联合举办的天池工业AI大赛,大赛以工业智能制造中半导体产业为场景切入。半导体产业是一个信息化程度高的产业,高度信息化给数据智能创造了可能性。在机器学习、人工智能快速发展的今天,我们希望着由机器生产参数去预测产品的质量,来达到生产结果即时性以及全面性。更进一步的,可基于预先知道的结果,去做对应的决策及应变,对客户负责,也对制造生产更加敏感。

问题现状:  现有的解决方案是,生产机器生产完成后,对产品质量做非全面的抽测,进行产品质量检核。这往往会出现以下状况,一是不能即时的知道质量的好坏,当发现质量不佳的产品时,要修正通常都为时以晚二是在没有办法全面抽测的状况下,存在很大漏检的风险

需求:比赛提供了生产线上的数据,反应机台的温度,气体,液体流量,功率,制成时间等因子。通过变量因子,需要选手设计出智能的算法模型,准确预测与之相对应的特性数值,便于实现生产过程的实时监控和预警。

生产数据包含8029列字段,第一个字段为ID号码,最后一列为要预测的值Y。其余的数据为用于预测Y的变量X。这些变量由多道工序组成,字段的名字可以区分不同的工序。字段中的TOOL_ID或者Tool为每道工序使用的机台。

总体任务分析:

  1.   设计预测模型,解决异常值和盲特征情况下的痛点,提高模型的鲁棒性;2.   典型的回归问题,建立算法模型准确预测出特性值,便可以实现生产过程的实时监控和预警

我准备一个Excel专门存放自己每次在天池比赛平台上的提交记录和当天做法的总体思路,这对后面的模型融合,对比结果很有必要,简单的写上提交日期,线下成绩,线上成绩,整体思路,第二天再放提交的结果数据。

数据可以说是完全盲特征,想要自己通过看几万个数字得到特征,几乎不可能。

数据分析

最常用的数据分析手段就是绘制matplotlib,seaborn的各种图形,直方图,折线图,散点图,heatmap等等,或者用pandas中的VIEWING/STAISTICS中的info,describe可以大致知道数据集的分布,这里推荐一下pandas的Cheat Sheet拉到最下面下载PDF打印发现新大陆pandas-cheat-sheet。当然还有其他的sklearn,numpy的cheat sheet。数据分析的重点包括以下几个方面:数据类型,奇异点,相关性,数据分布。对于这道题目,数据有float,int,object,缺失特征中大于50%的也有上百列,总体特征间的差值有很大的时间列,有很小的负次方数值。数据中包括TOOL工序一系列的特征,按照题目要求,需要针对不同的工序,得到合理的特征分析结果

  1. 数据处理方案

对于缺失值过多的列没有必要保留,如果直接填充反而引入了较多的噪声,时间序列在原始数据集中属于远远大于其他值的数值,顾先剔除,在特征工程中在将其做特征处理,TOOL序列类属于object类型,在模型中有很多时候会引起报错,故按照one-hot编码,或者用sklean中的get_dummies作为编码工具剩余的值再用pandas中的fillna填充median值。

特征工程的重要性可以说决定着的比赛名次,两句“名言”:“特征工程决定模型的上限”,“特征做不好,参数调到老”

  1. 类别特征:变化较少,类似于类别的特征直接编码后加入训练集;
  2. 时间序列:时间的序列中有明显的时间错误,一道工序不可能持续很多年,首先修正时间,取出之前的时间序列,找到每个工序对应的最大最小时间,差值作为特征表示工序完成的时间,对于异常数据直接替换为中值

3.整体数据:处理方式有两种针对不同的模型使用不同的方式,一是原始数据,可以直接使用模型,例如XGB,LGB,GBR等等,二是归一化数据将数据的特征表现的更加明显,去除由于值的巨大差异而淹没值的特征。

4.特征筛选:特征筛选主要有三种方法:嵌入式embedded、过滤式filter、封装式wrapper。由于特征通过编码数量更大,而之前使用方差和相关性分析可知特征中冗余特征很多,特征筛选是一个关键的步骤,比赛中尝试了方差筛选,pearsonr系数阈值筛选,基于xgboost和随机森林的树模型筛选,xgboost中的feature_importance同样设阈值筛选(亚军大佬就是只用这个模型单模型做的很好的成绩)。为了去除冗余特征,采用多种方法,使用较大的阈值得到数目差不多的特征之后求交集,是一个很不错的选择。对MSE会有提升。最终保留三位数的特征,好的特征选择可以有效的防止过拟合。

5.工序特征:针对题目中再三强调的工序,行之有效的方法是将每个工序对应的特征首先做筛选,之后剩下的特征合并,现实意义是最大的,但是比赛成绩不一定好,很有可能是姿势的问题。

6.多项式特征:神器PolynomialFeatures在degree为2时,可以简单粗暴的把[a,b]变为[1,a,b,ab,a^2,b^3],三次同理,加入特征后筛选可得出其中重要性较高的特征加入训练集,这种方法的弱势就是特征解释性不强

7.样本问题:在复赛阶段,意外得知样本的不平衡对数据的影响是很大的,复制样本很有效的解决了,预测结果一边倒的情况,在本题中根据第一个TOOL做排序,得到J,K,L,M,N,O六类数据,分布从几到几百不等,简单粗暴的复制便可以有效解决问题,这个操作使得排名进步了20名左右,MSE从0.034提升到0.032。

8.log1p:对特征取log,可以有效的将特征转化为斜度更大的数据,由于很多模型都是假设数据为正态分布下产生的,也就是让数据分布更加符合模型,同理加入训练集中。

只要稍微着边的姿势就能大幅度提升成绩,一般的融合要求就是特征不同,模型不同,成绩相近。

  1. 回归模型设计

最终分析得到的较好的结果为xgb,lgb,gbr,abr,svr通过不断的调参融合,个人拙见,GridSearchCV挑出来的参数不是最好的,还很慢,所以一边都是手动调,调参基本的步骤就是先用基础模型,不用任何参数,直接训练,然后CV看MSE,如果偏差很大,可能就是参数设置有大问题,直接添加,回归到正常值附近后再做微调,例如调整xgb的参数,就可以先用默认的learning_rate和n_estimators调整其他参数,max_depth,min_child_weigh调整结果比较好后,在调整subsample,最后按照比例调整学习率和弱学习器的数目,基本得到的就是最优参数。

大值预测模型设计

  由于数据集分布的不均,大值往往预测不到,但是却对结果起着异常重要的影响,分类采用wepon大神的后处理方法,作为对回归模型的参考,xgbclassifier分类得到大值的位置,再采用回归模型预测大值的值域,采用的方法是大值的训练样本和随机取小值的等比例样本数之后训练,随机十次,再使用比大值大一倍两倍三倍四倍五倍,一共十五个预测结果,不看小值的结果,只看大值的位置和值域的不同模型交集,准确率有很大的提升。成绩也会有所提升,需要注意的是,这一步一定要谨慎。

  1. 融合

融合的三种方法:单模型自融合;加权融合;stacking融合

1.   单模型一般都是框架直接得到结果,通过循环改变随机种子数值,最后平均结果得到预测结果。这个模型是一般名次的大杀器,感觉进榜是没有问题的;

2.   加权融合,简单粗暴,通过不同的预测结果,根据取值分析,统计准确值出现的次数,再根据百分比得到权值,加权。如果线下比较稳定的时候,可以尝试改变权值;

3.   模型融合,通过多个模型预测结果作为第一层,预测的结果合并成训练集,再放进模型训练得到最终的预测值,姿势正确,效果也很好。

大神用的好的方法,给你都不一定用的好,在我看来决定一个比赛的质量的前提是能做到线上线下和稳定。

lightGBM:https://blog.csdn.net/niaolianjiulin/article/details/76584785

8.职业规划

 

  • 1
    点赞
  • 0
    评论
  • 3
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值