Please contact me about any legal issues.
声明
课程笔记,授课教师:
李影 大数据系统核平台 NoSQLDB 大数据计算引擎spark/tensorflow
刘宏志 分析、算法
张齐勋 3案例设计:数据收取分析,搭建大数据平台,平台调优
引言
柯达→索尼(数码领先)→诺基亚(手机=照相机)(被微软收购合并,大量裁员)→苹果(smart phone)→手机大战-三星领先
传音手机 解决African People拍照的人脸识别,小而美
大数据中很多都是非结构数据,e.g.图像
“如果网络能够解决人与企业之间沟通的问题,那么会带来两场革命,一是计算,二是商务。” ——by ==Louis ?==
预言准确
数据中心系统:性能差的机器、故障是常态。
基于此基础设施,实现高性能支撑,并可进行机器学习、人工智能等
Gartner 市场咨询企业
新兴技术成熟度曲线
e.g. 去年深度学习“寒冬”,每种技术都会经过反省期,后来形成方法论指导(也可能消失被取代),逐渐发展
2018年AI普惠,区块链,生化芯片等处于热潮
知识图谱未来对机器学习可能有很大推动
技术不断创新,树立全局观
从技术创新长波理论看新一代信息技术
IT正在颠覆传统行业
能力 应用 成本 是IT发展的3大目标
追求能力的提高,迫切要求应用的广度、深度,成本的要求
摩尔定律:晶体管数量每18-24月增长一倍
梅特卡夫定律:网络价值随用户数量的平方数而增加(用的人越多价值越高-流量)
贝尔定律:计算机每10年更新一代,面向新应用,价格更低
香农定理:信道最大传输速率与?的关系==?==
早期面向能力和成本
“注意力的经济” 互联网商业价值开始体现
Backrub→Google
后摩尔时代:①质变:改进/替换图灵机、冯诺依曼结构……量子计算机、类脑芯片…… ②量变引起质变:资源聚合,云计算、泛互联网……
梅特卡夫定律和贝尔定律成为主导,取代摩尔定律和香农定理
未来形成 新平台、新模式、新思维
互联网+移动互联网(人)+物联网(物)
开源机器学习平台 tensorflow …
量子计算机,类脑计算机(比特大陆)
人类智能 vs 人工智能 差距仍然很大
符号主义 逻辑推理
连接主义 神经网络、深度学习
行为主义 ==?==
小样本学习,基于贝叶斯程序学习等概率学习方法,应该是下一代人工智能的重要方向
深度学习探索we don’t know what we known
传统算法总结 we know what we know
情感、意识的深度学习模拟 we know what we unknown 脑科学继续探索
大数据是新一代信息技术的业务引擎
《大数据时代》
数据产生方式:运营式系统数据(数据仓库,知识系统)+用户原创数据(Web2.0 带动大数据e.g. Hadoop发展)+感知式系统数据(物理世界-互联网)
数据资源:可再生,待挖掘
特点
- 数据量巨大
且增长迅速 - 数据类型繁多
10%结构化数据,存储在数据库中
90%非/半结构化数据,与人类信息密切相关 e.g.简历=半结构化数据
e.g. 结构化数据 远程监督学习 类自然语言中挖掘信息 👈互补 - 数据处理速度快,价值密度低
时间窗口变小,仅在极短时间内具有价值 - 密度低 - 数据不确定性
e.g. 自动驾驶:①先检测车辆、行人,再规划路径,再控制方向②端到端学习将视频、雷达、激光测距都丢给学习算法,直接控制方向 但是干扰因素很多,小的扰动就会造成波动-深度学习的模式规律难以总结应用
Jim Gary 实验归纳→模型推演(公理)→仿真模拟(理论指导下 计算机)→数据密集型科学发现(没有明确目标,从中总结)
- 描述性分析
- 预测性分析 pattern👉套用
- 规范性分析 优化/决策
e.g. 银行客户保留 根据描述性分析的结果,不正常行为的pattern,进行预测性分析,采取关系策略
仅进行数据分析是不能产生价值的,要将分析结果应用于现实~
e.g. 微软城市计算 高维数据,速度块,稀疏性→分析城市道路网中的不合理规划,划分城市功能区域,连锁店布局,出租车扒活/拼车,自行车空气质量细粒度检测……
e.g. 医疗领域的发展前景最优 患者相似性分析→疾病特征
e.g. ==OpenAI==
风险
- 大数据有预测失误
e.g. Google 流感预测-依赖搜索 效果不佳 - 数据可能说谎
e.g. 飓风前夜 - 食品大量采购 推特数最多 - 飓风中心?wrong!
==产生数据的可能是特权阶层== - 盲点
自主智能系统无法找到真正能评估其持续性影响的方法
与训练集有关
e.g. Uber L4自动驾驶车辆车祸致人死亡 - 偏见
e.g. 面部图像自动犯罪概率推断技术挑战
- Raw data
- 关联 不等于 因果
- 弱智能:不同数据集、不同特征集合、不同应用领域迁移的问题
- 理解性(可解释性)差:图片加扰动可以大幅影响结果
- 可拓展性差:算法、数据、算力 推动AI发展的3大动力 AI算力每3.43个月需求增长一倍(超过摩尔定律)∴深度神经网络精确度接近饱和,每增长一点对算力的要求提高很多,投入产出比很低,应该考虑3个主义中的==行为主义?==
大数据平台的挑战
大数据平台
数据量大,数据模型规模(参数)大
==Big Data, Big Model and Big System==层次
操作框架
数据集成
数据分析
计算框架//资源管理器&?
数据存储//
文件系统
大数据系统中算法只占核心一小部分,依赖数据收集、可视化、机器资源管理、存储……
Fine Lab
重点讲计算框架和数据存储
李影-大数据平台,NoSQL…
讲座: 联通研究院-大数据平台
刘洪志-机器学习算法 金融应用
张启勋-课程项目报告-决定成绩
- 大数据平台搭建,优化 benchmark
- 收集数据,简单分析预测分类
大数据平台
最底层-文件系统 HDFS
数据存储-
Lenovo: Spark-大批量大量查询无法满足, Pycum仿照angel
ZooKeeper-资源协调器:协调计算框架+数据存储
过去:
运营系统-产生数据
底层小型机+关系数据库+中间件Apache(J2EE事务型)+在线数据分析挖掘-与现在算法差不多-数据量小
问题: 海量数据,大量并发,实时,拓展
用一个集群的资源-仿佛一台机器-可扩充
分布式: 可扩展性 指标
单节点-scale up-针对机器修改-难度高-AIX操作系统-
scale out 单节点不变, 数量增加-软件目前<8000
云计算-scale out-弹性拓展
文件系统
对操作系统存储空间的抽象,对下屏蔽物理设备,对上提供用户统一的对象化接口
分类
本地,网络,分布式
分布式文件系统
分布在多节点-对上统一管理
常用Client/Server模式
能力
存储管理,容错(分布式中重要),高可扩展,高可靠,高可用(7*24可用-重要-99.99%=每年6hdown)
实例
GFS HDFS(GFS简化实现) TFS(淘宝) Ceph(块+文件 集大成) RCFile(Facebook)
GFS
组件component(网络,硬盘-所有硬件中最易坏)故障是常态
逻辑块-可以无限大-存到硬盘时则有IO等很多的限制
HDFS < GFS
主控服务器NameNode Master
数据服务器 DataNode ChunkServer
文件块 BLock CHunk
数据包 经过IO操作,对性能影响大-累计一定再写 Packet /
HDFS-单点故障-NameNode-对其备份-Secondary NameNode(DataNode已经相互备份
Append-GFS多客户端并发模型…等
HDFS
分Block-每个BLock至少3份,对硬件检测
适合批量:一次写入,多次读取(一般读>>写),更强调吞吐量(单位时间),低延迟(每个请求处理时间-高性能计算机强调),成本-强调资源利用率,要求数据均衡
基于TCP/IP
DataNode启动时向NameNode报告,定期向NameNode心跳,接收客户端读写
Replication:写冗余-机架感知策略 1 2另一机架 32的机架另一机器 防止整个机架网络down;读-client最近块
心跳包
数据完整性验证
删除-仅目录
TFS
对开源的改造,企业会使用开源作为基础,定制
1.0
NameServer-文件目录信息
DadaServer-块
Client向NameServer查询,与DataNode传输
2.0
+RootServer 分配MetaServer
+MetaServer 对目录再做一层缓存
+ResourceServer 管理应用(权限,统计),管理集群(扩容)…-很多NameServer+DataServer集群
Ceph
三种存储服务-三种接口
- 块存储
- 文件存储
- 对象存储
示例
社交媒体存储
关注列表 join 活动列表 join 活动列表 …
实时统计-每天点赞量-二级缓存
数据存储
(目前前4名都是SQL no.q Oracle, no.5 MongoDB,虽然大数据发展迅猛)
SQL适合数据规模小,对事务要求高
数据结构简单,规模大,适合 Key-Value; column-based, Document, graph 逐渐适合数据结构变复杂,规模变小; 不知道用什么的时候适合MongoDB,更类SQL,与之处于同一y=kx线
关系型
读写压力大,存储量有限
可以分库分表
横向扩展难,表结构
分库分表
分库分表
管理难,需要修改代码
Master-Slave
NoSQL = BASE数据库
分布式数据管理系统
(简化存储,加强管理)
不完全遵循ACID
最大区别不事先定义Schema(表结构),易拓展
事务
A原子性,C一致性,I隔离性,D持久性
e.g.银行转账
隔离:若没有隔离,则时间顺序可能穿插,可能钱款没有到账就开始转出.一个事务完成另一个事务才能执行 简单实现方法-加锁
DBMS中的基本单位
C一致性
强一致性 ACID
分布式难以做到,且分布式基于网络协议
弱一致性
最终一致性
不一致性窗口
分布式
取决于:1)交互延迟2)系统负载3)复制中replicate
CAP
一致性,可用性,分区容忍性 Partition tolerance
分布式系统-网络+节点不可靠 -需要分区容忍性(可能数据不一致)
e.g.强事务型不允许读到历史值,分布式系统中易由于网络故障读到不一致数据
3选2 APnotC
BASE
最终一致性,一定P
基于CAP演化
牺牲强一致性-基于网络-必修AP
基本可用A:出现故障时可损失部分可用e.g.降级页面,保证可用
柔性状态:
BASE数据库 = NoSQL AP CP均有
分类 (按最小单位)
Key-Value
ordered key-value
colume列族(big table): 层层嵌套 key-value (3key-行列时间戳)
document: 半结构化 +schema+index
graph: +order,key可以为map/document 可多层深度查询-好友 具有节点之间关系,又像SQL靠近
Key-Value: Dynamo (Amazon) Cassandra 键值对
Ordered Key-value 增加key之间连接
Colume Oriented: BigTable 读取快速 HBASE 三维键值对
Document: MongoDB 多个键值对有序组织在一起
Graph: Neo4j 强调节点之间关系
Key-Value数据库
Dynamo
Amazon云服务提供,API
key叫做attributes
可无限拓展-云服务
读写很快
容错
可以与Map-Reduce(Amazon提供)直接
列数据库
Big Table
建立在GFS Clubby table 之上
HBASE 列数据库
适合读操作密集型的应用,
行数据库:按记录存,存储所有列,读取时会读取不必要的列
列数据库:e.g.价格作为一列,存在一个store中
HBASE
数据模型类似big table
族-family-列的聚合
store-family的聚合
互联网应用-一般单次写,多次读-按列读-根据colume name即可→若为行数据库-会读取大量无关信息
Document DB
MongoDB
模式自由,数据结构松散
支持类SQL语言操作
自动分片:支持动态,自动化扩展-当表扩大后-在机器间分片
(适合网站动态数据,不适合事务-原子性-回滚,不适合传统商业数据)
基本单元-Document文档,类似SQL中的行
Collection-SQL中表
MongoDB-Collection-Document-键值对
文档
多个键有序存放
不能有重复的键,键名区分大小写
键值可以是内嵌的文档
_id不是其中一个key,是Document的唯一标识符
读操作
类SQL语句
e.g. db.student.find({name:”Tim”,age:20}).sort({sex:1,grade:-1}) .limit(5)//1正序 -1倒序 取前5个结果
.count()//计数
写操作
.insert({…})
.update({find…},{modify…})
聚合操作
db.student.group({key})?
集群
shard server: primary DB secondary DB
config server: 集群元数据 逻辑与物理数据映射
route server: 客户端访问接口-将client请求发送给集群;含有balancer-负载均衡(迁移)
分片 Sharding
物理磁盘不够/放到内存中提高性能/写数据性能要求
数据并行:分割数据
scale out 增加机器 -适应上层高吞吐量
scale up 提高单机性能
How to ?
指定key对collection分片,放到多个chunk(默认64MB)上
chunk分布保存在多个Shard上-根据Shard资源放置多个chunk
chunk大小可能改变-当超过chunk size后自动分片(只会分裂,不会合并)
chunk在shard之间迁移-shard之间不均衡时
(chunk size↑ sharding↓ shard数目↓ 不均匀 网络传输次数↓)
图数据库
属性图形property graph: 节点+关系+节点 三元组,均带有属性
GCN 图神经网络
Neo4j
基于Java
数据结构不是必须的
适合几度好友的查找
计算框架
分布式机器学习平台
机器学习的程序与普通程序的区别:
容错 容许中间结果的错误
e.g. 深度学习中间层
动态依赖的结构
模型参数间依赖关系变化
非统一的收敛
不同次数迭代才能收敛
收敛是评判的指标
分布式异构环境-特点-现状:
计算节点能力差异
网络带宽有限
消息同步-若占用大量带宽-可能训练很慢
集群中经常出现故障-硬盘最容易故障
并行-加速计算
均涉及参数同步问题
- 数据并行
- 模型并行
- 混合并行
同步协议
BSP bulk synchronous parallel
整体同步,worker之间需要等待-barrier-进行communicate-结束后再次compute
收敛性好,处理速度慢
ASP asynchronous synchronous parallel
完全无同步线,节点独立更新模型参数
执行速度快,收敛性差 (没有计算资源浪费)
SSP stale syn… 有限异步同步协议
设定staleness - 最长等待的迭代轮数
保证理论收敛性的同时加快执行速度
同样时间内准确度,stale 32 最优
####框架演变
MapReduce同步,数据并行
参数服务器 同步+异步 数据并行+模型并行
MapReduce
Master将user program fork到worker(mapper/reducer),map作业数量与split个数对应
map结果默认对key hash-patition-reducer,由moaster执行,并通知reducer
对文件系统读写:至少3次,影响性能:1中间结果写2中间结果读3最终结果写
Map - shuffle - Reduce
shuffle:对map结果分区排序分割(根据patition的key),若没有shuffle,reducer得到的数据分片数很大
user program被fork到workers上
map - 分割数据,实际就是数据并行,\
中间结果读写磁盘(文件系统)
(环形数据结构)
Spark
基于内存的计算 Hadoop(mapreduce)基于磁盘
Spark提供了多种数据集操作模型,60%内存缓存结果-RDD; Hadoop则只有map,reduce,不能缓存结果
适合实时大数据量,不适合增量计算/…
RDD
DAG-计算前构造的数据模型-内存中
数据抽象为RDD
只读的分区记录集合,不可修改 -数据分区
属性:
- 一组分区(partition) 按key分
- 一个计算每个分区的函数
- 依赖dependencies 描述RDD之间的lineage
Rdd1从HDFS中读出(多个)数据文件得出,Spark默认一个block一个分区patition; 对rdd1做filter,生成新的数据集合rdd2;则rdd1与rdd2之间的依赖关系为filter(rdd只读,做修改只能生产新的rdd)
RDD操作(前面提到比MapReduce支持操作多):
transformation
数据集内容修改
action
计算,将内容规约为一个值返回给驱动程序
e.g. collect()
惰性调用 只有执行到action操作才真正计算,其他只是记录RDD生成的轨道-DAG图
DAG
依赖关系(根据依赖划分stage):
窄依赖关系
父子关系1:n/1
从父出来只有一条线
一个stage
宽依赖
从父出来的为多条线
换分stage的依据,需要patition-shuffling
Job 多层分解
job=n stage
each stage 对应一个 taskset(一组无shuffle依赖的task组成)
Scheduler
Storage
管理缓存的RDD
三层结构
- 与外对接task
- task管理
- task物理执行
Standalone
Yarn
与standalone类似,与spark配合,也可与MapReduce兼容,可以跑MapReduce/Spark,商业环境中常用
Shuffle
跟MapReduce差不多
其他 Mlib GraphX
流式计算
2个经典: Spark Streaming & Storm
Spark Streaming
按照时间(设定值)切块-RDD
多个RDD组成Spark Job(内部切分stage-task…跟前面大数据计算一样)
通过DStream的接口进行操作?
Storm
延时低,吞吐量小 - 相比Spark
Topology
相当于MapReduce中的Job
Spout & Bolt 执行不同功能的节点
Spout
产生数据流,定义如何读取数据
实现 nextTuple()函数,可以规定每隔100ms读取一次
Bolt
执行和处理
可以调用外部Python函数,e.g.Split Bolt可以规定按照work向外发送;Workcount Bolt可以规定如何进行计数
ack函数-可靠性API 已经写好,可以直接使用/继承
弹送结果-可以规定有更新即弹送
Tuple
一次消息传递的基本单元
由field(键值对)组成
n个组成Stream
Stream Grouping
消息传递/分组方式
6种
示例 WordCount
Spout(读取句子) Bolt1(split单词) Bolt2(count)
组件并行数-几个同时做(spout/bolt)
tuple是键值对-bolt中可设置程序进行读取及操作
运行结构
Nimbus
负责资源分配&运行调度-放到那个节点
Supervisor
接收Nimbus的任务,在每个节点有一个,管理其上所有worker
是一个进程,管理并行数-进程(worker)-线程(executor)
并行数-有几个bolt/Spout线程,不一定在哪个/Supervisor上,但每个Worker只会执行一个topology,通常一个executor执行一/n个task(spout/bolt)
(为什么可以n个:(可拓展性))
Worker
进程,运行具体处理逻辑
每个Worker只会执行一个topology
worker数在集群启动时设定,也可在程序中修改(扩展)
示例
Green并行数2-线程(executor),但setNumTasks(4),所以一个线程具有两个task
两者对比
Spark Streaming 处理对象是RDD(一段时间数据),延迟度秒级,但吞吐量高,不支持动态调整
Strom 数据流,对每一条数据实时处理 实时性高,吞吐低,支持动态调整并行度,适合对实时要求高的,纯计算型,不能(类SQL)交互性查询
分布式计算框架
Pregel
图计算框架
e.g. 传播最大值,被传播完后变为inactive
深度学习
黑盒
典型:
CNN-空间相关性
RNN/LSTM-时间相关性,自然语言常用,需要时间上的关系
编程语言:
- 命令式 明确指定流程
- 声明式
框架:TensorFlow Caffe Torch Theano MXNet
TensorFlow
Tensor 张量 N(>=3)维数组
Flow 流
图 边表示张量(数据) 节点表示操作 数据流过操作 数据流
没有数据流过的是控制依赖
线性回归:
张量
- 阶 rank
- 形状 shape [ , , ]
0维张量=纯量
线性回归
Y=Wx+b
若用TensorFlow,需要两个计算节点(乘,加)
- 定义图,规定图中有哪些操作,如何计算
- 定义Session,run session
- 定义损失函数,使之逼近结果?
learning rate: 步长,太小-训练慢;太大-可能无法达到最小值无法收敛
换模型,主要是定义图的部分需要变-定义每层的计算节点
1 epoch-对所以数据训练一次
读文件系统中的图片,calssify一次就是一次epoch,文件名列表每次epoch产生一个
TensorFlow 可以单机:client Master worker同一机/分布式-多个worker分开
session.run Master接收图,裁剪子图-不同worker(worker&ps参数parameter server..)
参数同步:BSP ASP SSP
TensorFlow支持: 数据并行(between grapg replication)/模型并行
数据并行
同步数据并行
保证了一致性,但会被一个拖累
异步数据并行
三个model分别
模型并行
计算量大的单独分配GPU
另一种并行对模型切分要求对模型了解高,一般采用第一种
TensorFlow的计算速度很快,single/2 layer NN效果较好,异步效果比同步好
资源管理 Yarn
Yarn: resource negotiator
Hadoop 1.0 单个jobtracker 独占,可伸缩性差
Paxos
对提案达成一致,包括proposer&acceptor fail的情况
总结
整个大数据平台的框架
存储:HDFS文件存储,NoSQL(4 types)(CAP BASE),
计算平台:Spark(SDD…) Storm(Spout bolt Stream-grouping)
TensorFlow(定义图,Master图切割,worker,数据/模型并行)
刘宏志老师部分
王志军 电信运行商大数据平台现状分析及发展趋势
电信运营商的数据
(使用人数>中国总人口)
服务:网络(固定电话~,移动~,宽带接入~) Internet(互联网的基本设施又运营商主导构建 教育网连接到国外网络时也是通过运行商)
宽带IP网络(包括固定接入的网络,和移动?一般的网络)
标准化交换组织 ITU(3GPP 实际上4G 5G 都由 3GPP制定) ETSI(欧洲使用的标准) GSMA
电信运营商与网络
1G最早 使用 modem固定电话网 PC
2G WAP+拨号-手机 ADSL-PC
2.5G/2.75G GPRS/Edge(更快)-手机 FTTH(光纤)
3G 2005年开始, 标准: TD-SCDMA WCDMA CDMA2K(移动联通电信) 实际上说的速率(42Mbps;5G 10Gbps是基站速率,需要共享)
4G/4Gs 主流协议(TD-BPS FDD-LTE) (基础设施->)云 + 管 + 端
网络与系统架构
Restful API 接口 能力开放平台-提供 给上层云端(第三方)应用
下面是支撑系统+网络+IDC+数据 支撑系统(好几个子系统,几十个小系统)中计费账务系统是难点(出账期间无法进行其他业务,国外计费);
底层:终端+终端应用
现在其实5G标准只是制定了部分
运营商中的数据:信令面(好多点采集),用户面(采集S-GW/P-GW和GMSC两点),管理面
(寻呼数据:接电话时已经知道在哪个区域中(不是没变化一个基站都需要知道,会对终端耗电,可能包含几十个基站),该区域中寻找手机所在IP)
3G 电话 GMSC server端口,连接到其他运营商网络
流量采集 光纤中复制一份 / DPI(深度报文检测 wireshark,能将HTTP TCP IP层的数据都打开看,知晓流量)
运营商采集数据-用户画像(实际都是包头数据,不会侵犯隐私)终端IP,访问IP,基站(位置),使用的流量…
运营商数据
基于通话记录(时间,频次)可分析身份,上网,位置,社交,支出,通信,终端,时序
BAT等互联网公司的数据相互割裂,运营商是数据管道(无法获取内部数据);运营商通过唯一ID整合各类数据
中国联通-98+PB数据存储规模(仅包含最重要的数据,有存储周期
解决流量透明消费问题
流量消费不如语音消费透明,没有明确感觉
上网记录是典型的大数据,流量巨大 采用何种方式存储和检索是一个问题
Hadoop刚开始运营商不敢用,需要解决很多具体的问题,需要输入一个key查到上网记录,可以将时间包含到key中,录入HBASE详单库,向用户提供自动查询Portal
而且HBASE中的数据可以做用户分析(实际上查询的请求并不多)
大数据应用
上下文context信息库
经营分析系统
旅游大数据
信息核验-支付二维码-位置判断异常
数据治理平台
5G
一个用户有1G带宽,VR需要4K 8K支持(才能舒适地使用)
超大带宽,超低延时,超密连接(物联网用户-每个传感器都有连接)
基于云的网络,X86架构上的云设备
IoT和大数据是
大数据软件技术栈
云资源调度管理-Kubernetes
短时任务管理-YARN
现在SQL On Hadoop 是一种新兴
大数据安全
运营中数据泄露
数据出境-需要申报
用户隐私问题
数据脱敏后将数据给别人,需要数据溯源
区块链-用户确权,交易中防篡改,区块链技术需要找场景
总结
云-资源弹性分配,数据太多
后来 需要大数据挖掘产生价值,云ABC耦合性越来越高
数据安全,隐私保护
机器学习
为什么需要机器学习?哪些场景?
人工处理成本高/处理困难(数据量很大)
e.g. 手写数字识别-邮编
e.g. 垃圾邮件识别-根据词-邮件服务器完成;互联网欺诈;信用风险预测—人难以处理
机器学习 根据历史经验-形成模型(通常一个模型只能用于处理一个问题),评价标准通常也是只针对一个问题
学习形式分类
有监督学习:通过历史输入&输出,生成映射函数 e.g. 分类,回归
无监督学习:直接对输入(没有输出,即正确答案未知)进行建模 e.g. 聚类
半监督学习: 少量标注样本+大量未标注样本
增强学习: 学习从环境状态到行为的映射 带时间序列,(前三种都是静态) e.g. 自动驾驶中图像识别
天气/湿度/刮风-是否打球的例子
分类 - 贝叶斯算法
观察样本,求后验概率
因素均独立&等价
决策树算法
推理被观察者的决策过程,利用训练数据构造决策树
各因素不是独立等价的,不同人的优先级考虑不同
逻辑回归 LR
直接利用训练数据估计P
半监督学习
如何把未标记数据变为有标记数据?
模型假设
平滑假设
稠密区,距离近的,类标签相似
聚类假设
同一簇,标签相同
流形假设
…
自训练
最关键的是从预测结果中选取置信度最高的K个样本-认为其标签准确,但实际上是包含错误,将其认为父样本-误差迭代放大->自训练次数不能太多 (优点:简单易行)
协同训练 Co-Training
用特征分为两个集,独立同分布
单独训练一个分类器,将置信度高的样本加入另一分类器的训练集
认为两个分类器的错误不同,避免错误的迭代
期望最大化算法 EM
最早的半监督学习
(第二次课)
大数据革命
1.0 社会大数据
2.0 消费大数据
3.0 金融大数据 直接使用虚拟的数据-金融获利
金融大数据
数据来源
证券期货业
实时行情+历史+外部统计数据+新闻资讯
银行业
交易数据+采集视频+网站行为数据+媒体社交网络中信息
保险业
保单理赔电话等传统数据+定价(保险业最重要的)
量化投资
以数学模型代替人为的判断
利用计算机技术 从历史大数据中
传统投资
巴菲特-价值投资 ->均为 定性投资 (对个人素质,经验要求高)
多因子选股模型
课堂派 - 作业
本课主题: 大数据
获取数据:开源数据集/自己获取真实数据-爬虫
爬虫作业 40’
至少爬一个网站的数据
电影平台
最后一次课 5.7/5.14小组项目验收
成都 2核4G CentOS 应用在华为云上展示
老师代码里使用的是自己搭建的数据库
- 爬一次等一秒
- IP池,随时更换
模拟真实用户访问,变换HTTP请求头
华为云
构建&发布 标签 可以将流程写成流水线,自动化
可以用华为云主机实验这样的平台,也可以使用开源工具自己搭建这样的平台,
基于Scrapy框架的爬虫实践
单页面
将HTML格式的数据抓取下来,根据标签定位,for循环
遍历每页,分析每页的URL,找规律
Scrapy:专门用来爬取结构性数据的Python应用框架,定制开发几个模块即可
使用Twisted,看不懂图,可以先写一个最简单的HelloWorld,就能看懂了
只需要写requests请求,解析response(可以解析出实体item/URL,进一步爬取),管道pipelines存储(可以不存,文件/数据库 items.py设置数据存储模板)
scrapy1.6.0 MySQL5.6/MongoDB
1 | scrapy startproject xproject #创建项目,自动生成框架 |
步骤:
- 新建项目
- 设置items(需要存储的字段,设定即可)
- 设置pipelines.py存储方式(文件/数据库),在settings中修改存储方式
- 新建爬虫,设置爬取规则
爬单页面,只需要一个URL请求即可
分析页面,scrapy shell调试,看能否抓取成功
def parse #解析规则
多页面-修改请求URL
e.g. movie.douban. tag
只需要修改Request URL中start(在爬取程序中设为变量)
绕过 反爬
伪造header 修改referer跳转的来源,user-agent浏览器信息
循环获取URL
每页生成一个下一页的链接,作为下一个URL
解析parse函数中,判断是否有下一页,获取下一页构造Request
反爬
防止被禁IP,可以用华为服务器,可以找老师换
代理IP
IP池,每次从中随机取一个访问
UA池
user-agent 中浏览器信息
延迟
每执行一次休息1s
拓展,如何下载网页图片
大数据系统
张齐勋-第二讲
搭建Hadoop生态环境 Spark生态系统
推荐系统-算法库中找合适的直接使用