Matrix Completion、Dual Random Projection (对偶随机投影) [iDST 金榕 2015.12中国大数据技术大会]
一、TensorFlow线性模型
使用TF.Learn API来解决二分类问题。给定人口统计数据例如:一个人的年龄、性别、教育程度、职业[特征],我们尝试预测该人是否年收入大于5万美元[标签]。使用TF来构建LR模型,模型输出0到1之间的值,代表该人年收入大于5万美元的概率。
使用https://archive.ics.uci.edu/ml/datasets/Census+Income提供的数据集。特征可以分为categorical和连续两大类。categorical特征包括:公司属性、教育程度、婚姻状况、职业、家庭角色、种族、性别、原籍国家;连续特征包括:年龄、资本增益、资本损失、每周工作小时数。
1. 首先由数据创建tensors。在创建TF.Learn模型时,输入数据通过Input Builder function指定。该builder function直到TF.Learn的fit和evaluate方法调用的时候传入数据。该函数的目的是创建输入数据,形式是tf.Tensor或者tf.SparseTensor。该函数返回一个pair:feature_cols[dict类型特征名到Tensors或者SparseTensors的键值对,label:包含label列的Tensor]。input_fn将在创建TensorFlow图的时候调用,而不是计算run图的时候,返回表示输入数据的基本的TensorFlow计算单元Tensor或者SparseTensor。模型创建一个constant tensors,意味着将所有的数据作为一个常量。其它更高级的方法包括创建Inputs and Readers表示一个文件或者其它数据源,然后在run图的时候迭代遍历文件。每个连续特征列将被转换成Tensor,categorical特征将表示成SparseTensor。
2. 特征选择和特征工程。选择和制作正确的特征列是学习有效模型的关键。特征列可以是原始数据集中的原始列,也可以是基于一个或者多个原始特征列转换生成的新的列。连续特征bucketization。bucketization是将连续特征转换成连续bins/buckets的过程。
二、机器学习策略总结
三、异常检测算法调研
在数据挖掘领域,异常检测是确定数据库中不满足期望的模式或者和其他项不同的物品、事件或者观察点。通常异常检测会针对特定的问题,例如银行欺诈、结构缺陷、医疗问题或者文本错误。异常点通常和如下单词对应:anomalies、outliers、novelties、noise、deviations、exceptions。特别地,在网络入侵检测中,感兴趣的目标不是那些稀有的,而是活动中突然出现的突发事件。此时异常点的定义不再坚持是通常统计分布中稀有的对象,很多异常检测算法在此类数据上将会失效。通常有3大类异常检测方法:无监督的方法在无标注数据集上发现异常,其基本假设是:数据集中大部分样例是正常的,通过寻找和其余的数据拟合最差的样例标记为异常;有监督的方法要求需要标注正常和异常的样本以训练一个分类器,和其他统计分类问题的最大的差别可能在于内在的正常和异常样本数量的不平衡问题;半监督的异常检测方法基于部分标注的样本训练模型。异常检测应用于入侵检测、欺诈检测、故障检测、系统健康监控、传感器网络事件检测、生态系统扰动检测。此外异常检测还可用于数据预处理中移除数据集中的异常数据,在有监督学习中,移除异常点数据对统计准确率有大幅度的提升。
四、强化学习
强化学习适用于需要权衡长期回报和短期回报的问题,使用样本优化性能,同时使用函数近似应对大环境。
五、numpy工具
基本操作函数:numpy的基本数据类型为ndarray,对array的基本操作都是基于每个元素的,结果创建一个新的数组。矩阵相乘运算采用dot函数。+=和*=运算直接修改现有的数组,不会新创建。很多一元操作函数,例如:sum、min、max直接作用于array的所有元素,可以通过指定axis参数沿数组的某个轴计算。
通用函数:例如sin、cos、exp直接作用于数组的每个元素,返回一个新的数组。
索引、切片、迭代:一维数组和list类型一样支持索引、切片、迭代。多维数组支持多维同时索引,当后续axis没有提供索引时默认认为为取所有元素。当axis比较多时,可以采用(…)表示尽可能多的列,例如x[4,…,5,:]。多维数组的迭代默认是按照第一个axis,如果需要对每个元素迭代,可以使用array的flat方法,返回逐个元素的迭代器。
数组形状改变:reshape改变数组形状生成新的数组,resize直接改变现有数组,如果造型中某个纬度为-1则表示该axis维度通过自动计算得到。
多个数组折叠:vstack按axis=0,hstack按axis=1对两个数组进行折叠。大数组切割成多个小数组:vsplit、hsplit
拷贝和视图:简单的赋值不会拷贝数组对象和数据,函数调用不会拷贝数据;不同的数组对象可能共享一份数据,view方法创建一个新的对象对应同一份数据;copy函数创建新的数据和对象
广播规则:如果通用操作作用在不同shape的array上,会在叫嚣的数组自动填充值1。数组在某一个维度size为1和在该维度具有最大size的array等价。
索引:numpy提供了除整数和切片之外的索引支持,例如支持整数数组、boolean数组。