2

从坐公交车想到的和看到的

 2 years ago
source link: https://changkun.de/blog/posts/%E4%BB%8E%E5%9D%90%E5%85%AC%E4%BA%A4%E8%BD%A6%E6%83%B3%E5%88%B0%E7%9A%84%E5%92%8C%E7%9C%8B%E5%88%B0%E7%9A%84/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

昨天做公交准备回学校的时候照常在车上掏出手机把玩,不过手机已经只剩下10%的电了,所以没耍几分钟手机就彻底牺牲了。

一路上人非常的挤,没有座位,所以开始猜测面前坐着这哥们儿啥时候下车。不料这哥们儿居然是做到倒数几站的位置,所以还是妥妥站了一路。感觉一路上没玩手机脑子想了很多收获还是挺大的,遂写篇日志记录一下好了。

一、想到的

一路上实在是发呆和蛋疼,脑子着实无聊,便顺带初步构思了一下如何给一个城市部署公交预测系统。

想法的起点源自上车时没抢到座位。公交车来的时候,看着车上空位非常多,可是还是没有抢到座位(丫的全挤在这上了)。一路上车上的人不但没有减少,反而越来越多越来越挤。这要是在前一站上车岂不是还能坐一路回来?所以有了下面的构思。

我们可以考虑“挖掘”一天中一条公交线路上的乘客数据啊,对一些重要的指标进行预测(当然,如果这套系统能够做到实时更新,那么就是最完美的状态了,这时候系统的预测将变得无比的精确,甚至给出一天中任意时刻任意站台的等车方案、最优乘车时间、最优乘车地点、最优……):

  1. 任意时刻某站的下一辆公交车到达的等车时间
  2. 任意时刻所等站台下一辆公交车的乘客数量
  3. 任意一辆公交车在某站的上车、下车人数预测
  4. 一天中任意时刻,在某站上车,有空闲座位的概率(这才是重点啊)

那么,哪些特征能作为数据挖掘的样本呢?也就是说我们可以记录哪些数据呢?首先,如果我们的人力、物力、财力实在是有限,可以一步一步的来,先做好一步,再考虑进一步挖掘下一步的数据:

  1. 一条路线上,每个站点Ai(i=1,2,…,m)Ai(i=1,2,…,m),在一天中,公交车到达时间的时间序列,Ai=(ti1,ti2,ti3,…,tin)Ai=(ti1,ti2,ti3,…,tin),这样呢,我们就把一天中的整个公交车的时间分布变成了一个mnmn的“时间矩阵”。
  2. 我们来进一步细化tijtij的特征,我们可以视tijtij为一个四维向量,这个四维向量tij=(arriveTime,getOnNum,getOffNum,emptySeatNum)tij=(arriveTime,getOnNum,getOffNum,emptySeatNum),第一个维度是公交车在站台i的第j个到达时间,第二个维度是上车的人数,第三个维度是下车人数,第四个维度是空位的数量(其实可以考虑减掉这个维度来优化数据集,这样的话海量数据挖掘起来更快,另一个原因是由于每辆车的座位数是定值,那么空闲座位数就可以被算出)。当我们把第一步的“时间矩阵”扩张为以向量为元素的矩阵时,我们的数据集一下子就扩大了4mn倍,在数据逐渐猛涨的系统下,挖掘出的结果将会更加刺激。
  3. 前两个步骤的数据挖掘我们只考虑了一条公交路线,如果我们要把整个城市的公交路线都考虑进来,我们可以继续给tijtij增加维度,比如说当前站还未上车时的等车人数(这样的话便可以预测出大概有多少人在等哪一路的车,大幅增加了预测的准确度),又比如说,增加当前站台在城市中的地理坐标,引入城市小区的地理位置,这样的话可以预测出上车的人从哪儿来(小区直接等车?转车导致的等车?)、上车的人要去哪里(回家?还是换乘?)、这条路线上大部分上车的人喜欢在哪儿上车、大部分的人都在哪里下车、等等等等……

当然我们还可以在人力物力财力允许的情况下进一步优化我们的数据集,这只是最初步初步的想法,限于篇幅这里就不继续展开我的思路了…

那么,我们有了这些数据又怎么样呢?一方面,我们可以更加精确的预测整个城市的人口流动情况,另一方面,我们可以这些数据为蓝本,给城市公交建设提出一些可靠的意见和建议,再有,把这个数据集成到一个app中,给人们提供参考,也是很棒的。

二、看到的

在构思上面系统的同时,还观察了旁边一个妹子在刷空间的互动行为。这个妹子确实勤快,我看了她一路,居然每条说说都回复了,确实强大…不过,根据对妹子表情的观察,我更好奇这个妹子的每条回复究竟是什么心态。

假设我们发了一条说说,如何判别一条别人的回复对这条说说的态度是持“点赞”多一点?还是反面多一点?

解决这个问题其实很简单,一个非常非常平凡的思路就是:我们可以先收集一堆已经被标记为正负面的评价的回复作为数据挖掘的数据库。

那么,第一个问题就是,怎样量化回复的正负面?

所以我们可以尝试准备一个词汇向量(这个向量的维度可以很大很大,甚至囊括所有的词汇),比如假设我们构造一个非常基本的向量:a = (“好”,“差”,“喜”,“讨”,“欢”,“厌”),然后对一个回复,比如回复了一句“好喜欢”对应01向量就是:(1,0,1,0,1,0),把一条回复转化成的向量记为a=(a1,a2,…,an),怎么表达正反面呢?既然只有两个层次,问题就变得非常简单了:找一个函数f能够使得f(a)>0,那么我们就认为是正面的回复,如果f(a)<=0,就认为是负面回复了。

怎么找这样的函数?最简单的办法自然是利用向量的点乘了,用点成来界定向量,我们可以尝试寻找一个标准向量X = (x1, x2, …, xn),如果我们将回复转化成的向量a∙X^T>0,那么这条回复就更倾向于点赞,相反,a∙X^T≤0的回复就更负面一些。

至于具体如何求出x1,x2,…,xn这些参数,那就是另一个话题了


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK