题目一:
按照平常认识,不管哪个班,哪个老师教的,都统一用原始分数进行比较,这道题目的要求可能是想在去掉教师的影响的情况下,比较两个班学生的能力。
对于这个问题,我的方法是对各个绩点的层次所占的比率进行规定,以下是假设:
(表一)绩点满分为4.0,分数从高到低排下去:
1. 7% 的人绩点为4.0
2. 9% 的人绩点为3.5
3. 11%的人绩点为3.0
4. 13%的人绩点为2.5
5. 20%的人绩点为2.0
6. 13%的人绩点为1.5
7. 11%的人绩点为1.0
8. 9% 的人绩点为0.5
9. 7% 的人绩点为0.0
这种简单的假设方式是为了让人数相对于绩点的分布满足正态分布的方式,也可以根据需要有其他的假设方法。但是这种方法的前提是:在去除不同老师教学的影响下,两个班的各能力层次的学生的人数分布方式基本相同的。
假如还要上面的前提是不成立的,就是说即使教师一样,两个班的各能力层次的学生的人数分布方式不相同。那么需要利用原始的分数来区分。又有下面的假设:
(表二)
1. 90分以上的人绩点为4.0
2. 80分以上的人绩点为3.5
3. 70分以上的人绩点为3.0
4. 60分以上的人绩点为2.5
5. 50分以上的人绩点为2.0
6. 40分以上的人绩点为1.5
7. 30分以上的人绩点为1.0
8. 20分以上的人绩点为0.5
9. 20分以下的人绩点为0.0
结合表一表二,可以利用式子aX+ bY来比较两个班的成绩。
其中X是表一中的值,Y是表二中的值,a和b是大于0小于1的变量,且a+b=1,可以根据不同的需要来取值。
参考文献:
http://baike.sogou.com/v4574279.htm;jsessionid=05E8F28DE52B5EB3F671BA4B8BBB17F2.n2
题目二:
汽车实时GPS表:
车辆ID, 时间, 经纬度
车辆信息表:
车辆ID, 车型号
整合之后的表:
车辆ID, 车型号, 时间, 经纬度
数据无法完全载入内存,可以理解为最不好的情况,就是无论“汽车实时GPS表”,还是“车辆信息表”,还是最后整合的表,都无法整个表载入内存。在这种情况下,可以有下面的算法:
1. 本方法将用hash映射的方法把“汽车实时GPS表”分解成多个表,并且保证分解后的每个表都能完全载入内存。为了下面代码描述的简洁,我们假设分解为2个小文件之后(a0 , a1),每个小文件都能完全载入内存。当然,大规模问题下,需要分出更多的文件,可能是1000甚至更多,但是解法跟本题目是一样的。
2. 读取“汽车实时GPS表”中每一项的“车辆ID”项目
3. 取“车辆ID”% 2,然后根据该值将“车辆ID, 时间, 经纬度”存入分解之后的小文件中。
4. 对于“车辆信息表”采取跟“汽车实时GPS表”一样的方法,把文件分解为2个小文件(b0 , b1)。填入“车辆ID, 车型号”。
5. 合并文件a0 和b0,a1 和b1,将“车辆ID”相同的两项合并一起为“车辆ID, 车型号, 时间, 经纬度”
6. 最后将所有文件合并。
代码随文件。这里说明一下程序是怎么样的。
参考文献:http://blog.csdn.net/v_july_v/article/details/7382693
题目三:
将此题目简化为只有两辆车后,我的理解是:两辆车用了同样的车辆ID后,两辆车传回的数据在图上描出点后,所有点将混合在一起而无法辨别是哪辆车的。我们要做的工作是把这些点区分开来画出两条轨迹。
根据题目,对于两条轨迹来说,可以找到条件有:对于一条轨迹来讲,两个点之间的时间间隔为15~30 秒(设这个时间段为T);因为车辆行驶的速度有限,两个点之间的距离不能超过某个长度(设这个距离为L);从一个点到另一个点只能有一条路径,二不能有多条;算法是建立在有并轨的情况下的,假如两条轨迹在相距很远的地方,则可以直接描出来不同轨迹。
在这里,车辆可以使运动的,也可以是停止的话,当车辆停止时,则会有重叠的点,但是不影响下面的算法。题目需给出车的起点位置,否则无法确定起点位置。
我提出的算法是这样的:
1. 设起点位置为A1和B1,时间分别为a和b,假设a>b
2. 两条轨迹可以形成的集合为A={A1, A2 ……An}和B={B1, B2 …..Bn}
3. 找出所有时间比a小的点,作为B的部分轨迹行成的轨迹为{B1, B2 …..Bt},A1>Bt
4. 设Aend为集合A里面最后一个元素,Bend为集合B里面最后一个元素
5. while (还有点没有被放入集合) {
6. if (Aend >= Bend) {
7. //找出可以添加到B集合里面的点
8. 在表里查找出和Bend的时间间隔在T以内并且距离在L以为的点
9. if (找到的点有两个以上) {
10. 分析这些点,找出和Aend的时间间隔不满足T或者距离不满足L的点
11. if (找到的点只有一个) {
12. 这个点加入集合B
13. }
14. else if (找到的点有多个) {
15. 这些点将被标记为无法确定是属于哪条轨迹的点,
16. 这时候可以存入这些点,并且尝试性地选择一个点然后进行下面的程序,
17. 直到程序无法运行下去的时候,回到此处选择另一个点
18. }
19. }
20. elseif (找到的点只有一个) {
21. 将这个点添加入集合B里面
22. }
23. else if(没有找到) {
24. 无法确定轨迹,回滚节点让14行或者34行选择另一个点
25. }
26.
27. //找出可以添加到A集合里面的点
28. 在表里查找出和Aend的时间间隔在T以内并且距离在L以为的点
29. if (找到的点有两个以上) {
30. 分析这些点,找出和Bend的时间间隔不满足T或者距离不满足L的点
31. if (找到的点只有一个) {
32. 这个点加入集合A
33. }
34. else if (找到的点有多个) {
35. 这些点将被标记为无法确定是属于哪条轨迹的点,
36. 这时候可以存入这些点,并且尝试性地选择一个点然后进行下面的程序,
37. 直到程序无法运行下去的时候,回到此处选择另一个点
38. }
39. }
40. else if (找到的点只有一个) {
41. 将这个点添加入集合A里面
42. }
43. else if(没有找到) {
44. 无法确定轨迹,回滚节点让14行或者34行选择另一个点
45. }
46.
47. }
48. else if (Aend < Bend){
49. 这部分的算法可以参考上面的算法。之所以要分开Aend 和 Bend大小不同的情况,
50. 是想尽量减少找到错误点的可能性。
51. }
52. }
算法是建立在起点确定的情况下的,要是起点不确定,则需要对每一个点的临近节点是否满足条件T和L来选择,尝试能否构成两条路径,就是两个集合。但是这样准确性明显降低。
假如人工的手段手动把一部分发生并车的轨迹区分开了,上面的算法可以利用这些数据来精确查找的过程,比如算法里14行和34行可能找到无法确定属于哪条轨迹的点,这些点要是可以被人工区分,程序将可以更高效运行。同时,确定了一部分轨迹的话,这部分就不用再寻找轨迹了,也可以节省程序运行时间。
题目四
1. Restricted Boltzmann Machines简介:
Restricted Boltzamnn Machines(RBMs)是一种典型的随机性神经网络。
这里的神经网络(类神经网络/Artificial Neural Networks)是指人工神经网络,是一种模仿生物神经网络的结构和功能的数学模型或计算模型。神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统。现代神经网络是一种非线性统计性数据建模工具,常用来对输入和输出间复杂的关系进行建模,或用来探索数据的模式。
这里所说的随机表示该神经网络神经元的状态/输出是以概率的方式生成的,例如神经元表示为二元(0,1),0表示该神经元未激活,1表示激活,则神经元处于激活或未激活状态是以一定概率产生(计算)的。即神经元的状态是一服从某概率分布的样本。
2. Restricted Boltzmann Machines的构成
1) 观测单元:为网络的输入,例如图像像素值,语音的音频值等。
2) 隐藏单元:如想学习得到的抽象特征,类别等。
3) 偏移单元:通过该单元可以对各个隐藏单元输出进行调节,其状态始终处于激活状态。
3. Restricted Boltzmann Machines的作用
RBM的用途主要是两种,一是对数据进行编码,然后交给监督学习方法去进行分类或回归,二是得到了权重矩阵和偏移量,供BP神经网络初始化训练。第一种可以说是把它当做一个降维(概念可以在[7]找到)的方法来使用。第二种用途里,神经网络是要训练一个权重矩阵和偏移量,但是如果直接用BP神经网络,初始值选得不好的话,往往会陷入局部极小值。根据实际应用结果表明,直接把RBM训练得到的权重矩阵和偏移量作为BP神经网络初始值,得到的结果会非常地好。另外还有其他两种用途,第三种,RBM可以估计联合概率p(v,h),如果把v当做训练样本,h当成类别标签(隐藏节点只有一个的情况,能得到一个隐藏节点取值为1的概率),就可以利用利用贝叶斯公式求p(h|v),然后就可以进行分类,类似朴素贝叶斯、LDA、HMM。说得专业点,RBM可以作为一个生成模型(Generative model)使用。第四种,RBM可以直接计算条件概率p(h|v),如果把v当做训练样本,h当成类别标签(隐藏节点只有一个的情况,能得到一个隐藏节点取值为1的概率),RBM就可以用来进行分类。说得专业点,RBM可以作为一个判别模型(Discriminative model)使用。
4. Restricted Boltzmann Machines的使用
RBM是deep learning中的一种网络结构,而且deep learning中的一个重要网络结构DBN可以由RBM网络叠加而成。一个简单的RBM网络结构图如下:
可以看到RBM网络共有3层,其中第一层称为可视层(VisibleUnits),一般来说是输入层;第二层是隐含层(Hidden Units),也就是我们一般指的特征提取层;第三层是偏移层(Bias Unit)。在一般的文章中,都把前两层的节点看做是二值的,也就是只能取0或1,当然了,RBM中节点是可以取实数值的,这里取二值只是为了更好的解释各种公式而已。在我们设计一个网络结构后,接下来就应该求解网络中的参数值。而这又一般是通过最小化损失函数值来解得的,那么在RBM网络中,损失函数的表达式是什么呢,损失函数的偏导函数又该怎么求呢?下面将一步步对这个问题进行求解。
波尔兹曼网络是一种随机网络。描述一个随机网络,总结起来主要有两点:
第一,概率分布函数。由于网络节点的取值状态是随机的,要描述整个网络,需要用三种概率分布来描述系统。即联合概率分布,边缘概率分布和条件概率分布。要搞清楚这三种不同的概率分布可以参考张连文所著的《贝叶斯网引论》。
第二,能量函数。随机神经网络是根植于统计力学的。受统计力学中能量泛函的启发,引入了能量函数。能量函数是描述整个系统状态的一种测度。系统越有序或者概率分布越集中,系统的能量越小。反之,系统越无序或者概率分布越趋于均匀分布,则系统的能量越大。能量函数的最小值,对应于系统的最稳定状态。
RBM能量函数的定义如下:
从能量函数可以推到出RBM的概率函数如下:
关于这两个函数的推导及其意义,可以参考[1][5][6]。另外,关于RBM的使用可以参考更多的论文,比如[9]给出了利用RBM对表格数据(比如用户对电影的评价)进行建模,由于使用场景不明确,本文无法给出更多的内容,只给出了RBM的基本知识。
5. 用 Gibbs sampling 实现 RBM 训练
有关Gibbs抽样的相关内容可以参看文献[8]
参考文献:
[1] http://blog.csdn.net/bluebelfast/article/details/17253973
[2] http://baike.baidu.com/view/5348.htm
[3]http://zh.wikipedia.org/wiki/%E4%BA%BA%E5%B7%A5%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C
[4] http://www.docin.com/p-678011934.html
[5]http://www.cnblogs.com/tornadomeet/archive/2013/03/27/2984725.html
[6] http://blog.csdn.net/mytestmy/article/details/9150213
[7] http://www.baike.com/wiki/%E9%99%8D%E7%BB%B4
[8] http://www.52nlp.cn/lda-math-mcmc-%E5%92%8C-gibbs-sampling1
[9] Salakhutdinov,Ruslan, Andriy Mnih, and Geoffrey Hinton. "Restricted Boltzmann machinesfor collaborative filtering." Proceedings of the 24th internationalconference on Machine learning. ACM, 2007.