机器学习概念

极大似然
使用极大似然的大的前提是模型已知,数据独立同分布;
他的价值在于可以通过局部数据来获取全局的参数,具体的实现就是通过求导数为零的方式来创造
 
评估方法
评估就是利用测试数据来评估一下用训练数据训练的模型。
评估方法牵涉到一个很重要的环节就是对数据集进行划分;主要有三种:第一种留出法(leave out),就是按照比例对数据集进行分割;第二种是交叉验证(cross-validation),就是将数据分成K份;每次用K-1个样本集合进行训练,用第K个样本集合进行测试;第三种就是自助法,用于数据集比较小的场景,就是放回采样法;取出数据作为训练数据,然后再放回去;最后总会有大约1/3的数据没有被训练过,这些数据将会被取出来做测试使用。
 
平均绝对误差(MAE,Mean Absolute Error)和(平方)根均方差(RMSE,Root Mean Square Error)
平均绝对误差:
 
根均方差的公式:
 
RMSE对应的是欧几里得范式(Euclidian norm),即使我们物理意义上面“距离”的概念,称之为l2范式,记做||·||2或者||·||
MAE对应的是l1范式,是物理意义上面的“曼哈顿距离”概念,记做||·||1
那么是麦哈顿距离和欧氏距离呢?红色的线就是麦哈顿距离,绿线就是欧氏距离。
 
通常情况,l(k)范式和和向量的关系如下:
 
对于l0范式而言(k=0)只是提供了最基本的向量信息,k值越高提供了值越确定。而且k值越高,向量也就越关注的大量数据,而忽略小量数据;所以RMSE对于极端值更加敏感;但是对于指数级别的罕见的极端值,RMSE通常表现的更好。
原文:The higher the norm index, the more it focuses on large values and neglects small ones. This is why the RMSE is more sensitive to outliers than the MAE. But when outliers are exponentially rare (like in a bell-shaped curve), the RMSE performs very well and is generally preferred.
 
混淆矩阵和查准查全
precision = TP / (TP+FP)
TP+FP代表的是所有的被认为是指定类型的,比如“猫”的数量,这个公式求得就是准确率,就是在所有的被识别是猫的样本中,有多少是准确的;
recall = TP / (TP+FN)
TP + FN代表所有的猫,正确的被识别为猫的数量以及所有的本来人家是猫,但是被识别其他动物的数量(FN),难道不是所有的猫的数量吗?存疑。这个公式表达的说就是有多少猫被正确是被出来,即查全率。
介于这两者之间有一个F1公式:
F1 = TP / [TP + (FN + FP)/2]
 
队列,获取方式和跨机器的variable类似,需要通过一大堆指定,尤其包括share_name(variable是anme)来进行获取、创建。
队列可以接收tuple的格式,但是注意返回的话,是每个维度单独返回。
  支持单个取以及批量取值(dequeue_many);关闭的时候如果是dequeue_many模式,将会导致如果不足一个batch的数据会丢失;如果采用dequeue_up_to访问模式;
  RandomShuffleQueue,随机队列;随机返回队列中的数据;可以指定最小数量之后才可以dequeue,以保证有充足的数量的元素进行处理。
  PaddingFifoQueue,返回的数组,位数不足,拿0补位。
 
  Preloading,就是在数据大小内存能够hold住情况下,将数据读入到tf的variable中;一校后用。
  如果数据量比较大,在内存中全部处理不了,则通过TextLineReader的方式,一行一行从物理文件中读取,这样内存几乎没有压力。
  多线程读取文件,每个线程负责一个文件的读取,然后放置到队列里面去;这个也是需要tuple的原因,key就是文件名+lineNo,value就是分割后的数组,这样消费者在处理的时候才能够正确处理。
并行化处理:
  In-Graph,client把图一次性全画好,然后一次性交给TensorFlow的master;master根据图进行分解,分配到各个Server中进行计算以及处理。
  Between-Graph Replication:各层之间通过队列进行数据传输;
  一个NN运行在多个设备,太极端了,不研究了。
 
  数据并行,就是讲mini-batch Data发送到各个Server上面,Server进行运算,然后把结果进行汇总;包括两种,一个同步更新,一个异步更新;后者因为数据腐败的问题,并不经常用。
 
关于Label(标签)
  这里面是把Label和预期变量(Predictor)分离开来,housing里面包含了要进行预测判断的数据;housing_labels里面放置的就是一些标签,就是根据housing里面的数据应该判断出来的“正确的”值。
1 housing = strat_train_set.drop("median_house_value", axis=1)
   2 housing_labels = strat_train_set["median_house_value"].copy()
 
中位数
  中位数(median),一组数据,从小到大排列,那么,中位数的值为:

回归和分类
  分类学习解决的问题“是什么”,回归学习解决的问题是“是不是”,其实所谓的回归本质就是根据现象(样本)来倒推出原始的函数,这个就是回归的意思。
关于fit/transform
  要使数据集中(使其具有零均值和单位标准误差),可以减去平均值,然后将结果除以标准偏差。To center the data (make it have zero mean and unit standard error), you subtract the mean and then divide the result by the standard deviation.

  fit的过程就是计算均值(mean)以及标准差的过程;
  transform的过程就是讲x'应用到数据集的过程。
  这里的fit和transform可以用于Standard Scale。同时你可以自定义transform,只要实现了fit和transform即可。
  其实在机器学习里面将对于特征值的(改变)操作统一使用称之为transform;对于求解公式中的变量过程称之为fit;将特征值带入到公式中进行计算,称之为tranform。
  transform其实可以是多个,这里就有了Pipeline以及FeatherUnion,都是用于类似于链式结构的那种,或者说过滤器模式/装饰器模式,层层对特征值进行处理。
  但是,在线性回归里面也是有fit函数,这里就是学习的过程,或者讲是确定模型和系数的过程;其实也和变形(transform)的fit有异曲同工之意义。
 
关于MinMax ScalerStandard Scaler
  首先特征值为什么要缩放,就是因为机器学习在处理数据范围不一致的数据容易导致异常;所以需要把数据缩放到统一维度进行处理,sk里面提供了两种缩放处理,一种是MinMaxScaler,另外一种是  StandardScaler;前者计算某个值的缩放值公式是:(value-min)/max;后者的公式见“关于fit/transform"里面的x‘的公式。
 
pipeline和FeatureUnion
  管道(pipeline就是对一组特征的处理),当样本的特征需要进行不同处理的时候,就需要设置两套Pipeline(比如一组特征需要LabelBinary,一组需要进行StandardScalar),然后通过FeatureUnion进行合并(相当于sql里面的join,合并列)
  featureUnion的fit_transform就相当于先调用fit,再调用transform
 

posted on 2018-05-25 16:40  下士闻道  阅读(363)  评论(0编辑  收藏  举报

导航