当前位置: 首页 > news >正文

angularjs 网站模板工作感悟及心得

angularjs 网站模板,工作感悟及心得,响应式网站可以做缩放图吗,优秀企业vi设计案例文章目录1. 实验概览2. 数据集下载3. 数据预处理3.1 异常点去除3.2 停留点检测与环绕点检测3.3 轨迹分段4. 基于轨迹信息的数据挖掘4.1 路口检测4.1.1 地图分割与轨迹点速度计算4.2 偏好学习通常#xff0c;我们将一个连续的GPS信号点序列称为一个轨迹#xff08;Trajectory我们将一个连续的GPS信号点序列称为一个轨迹Trajectory在拥有GPS数据轨迹的情况下我们能通过这些数据信息挖掘出哪些有效信息是数据挖掘在轨迹信息上的重要研究内容。在该实验中我们使用UCI上公开数据集利用该轨迹数据集尝试挖掘其中的隐藏信息在信息挖掘之前我们需要对原始数据信息进行数据预处理以保证算法拥有较为优质的输入数据。 1. 实验概览 通常我们将一个连续的GPS信号点序列称为一个轨迹Trajectory在拥有GPS数据轨迹的情况下我们能通过这些数据信息挖掘出哪些有效信息是数据挖掘在轨迹信息上的重要研究内容。在该实验中我们使用UCI上公开数据集利用该轨迹数据集尝试挖掘其中的隐藏信息在信息挖掘之前我们需要对原始数据信息进行数据预处理以保证算法拥有较为优质的输入数据因此整个实验一共分为以下几个步骤 下载轨迹数据集对轨迹数据集进行数据预处理相关信息挖掘 接下来我们按照该顺序进行依次讲解。 2. 数据集下载 本次实验我们选用UCI上的公开数据集链接数据集中共包括两个文件go_track_tracks.csv 和 go_track_trackpoints.csv两个文件内容分别如下所示 可以分析出go_track_tracks.csv 文件中存放的是每一条 trajectory 的全局信息例如该条 trajectory 的 id、该条 trajectory 是属于车辆的轨迹还是公共汽车的轨迹、平均速度等具体细节参考前文UCI链接而与之对应的go_track_trackpoints.csv 文件中存放的是每一条 trajectory 中每一个轨迹点的记录信息例如经纬度、时间戳等。 我们对轨迹数据进行解析利用 OSMNX 将数据集中的轨迹做可视化这里挑出其中一个轨迹可视化结果如下 通过可视化可以看出原始的轨迹信息十分杂乱甚至会出现一些因为GPS设备误差而生成的不合理轨迹点。如上图中所示可以看到一条轨迹中参杂了一个偏离非常远的轨迹点使得整个轨迹非常突兀因此在进行数据挖掘前我们首先需要对这些原始数据集做数据预处理工作。 3. 数据预处理 数据预处理是在进行数据分析之前非常重要的一个步骤对于轨迹数据的预处理该实验中一共经历了3个阶段 异常点去除停留点与围绕点的检测与去除轨迹分段 下面我们就依照这个顺序将数据集中的轨迹数据进行一步步的清洗。 3.1 异常点去除 异常点是指因为GPS设备误差或者其他原因等产生的不合理的一些噪声信号点识别异常点的一个方法是根据相邻两个点之间的间隔时间与间隔距离计算出行驶速度将明显不符合实际速度的轨迹点给清除掉部分代码如下 # 遍历计算坐标轨迹中所有相邻点的距离和间隔时间并计算出速度与最大速度阈值比较筛选出符合正常速度区间的轨迹点for i in range(1, len(origin_positions)):distance geodesic(origin_positions[i-1], origin_positions[i]).kmhours_used get_hours_from_two_time_string(time_list[i-1], time_list[i])speed max_speed_threshold if hours_used 0 else distance / hours_usedif speed max_speed_threshold:result_positions.append(origin_positions[i])result_time_list.append(time_list[i])result {track_id: {positions: result_positions, time_list: result_time_list, mean_speed: mean_speed}}下图是我们未进行异常点去除和进行了异常点去除之后的对比图可以看出经过最大速度值为 150km/h 的条件筛选后右下角的异常数据点已经被清除掉轨迹变得比清洗前连续性显得更好。 3.2 停留点检测与环绕点检测 在轨迹数据中我们需要分析用户在运动过程中在哪些地点进行了停留。“停留” 一共存在两种情况一种是用户在原地停留轨迹点间隔很近另一种是用户会围绕某一点进行徘徊例如景观点的附近会存在较多环绕点。我们需要分别对这两种类型的点进行检测筛选。 对于原地停留的情况比较容易检测我们直接判断轨迹点中相邻点之间的距离差即可但对于 “环绕停留” 的情况我们需要使用 Stop Point Detection 的相关算法完成检测论文链接参考这里。 如上图所示P3点为原地停留的情况而右侧 P5P6P7P8 四个点为 “环绕停留” 点红色 Stay Point 2 为这些环绕点的中心点。为了使得整个轨迹更加平滑我们通常会将使用红色点来代替原轨迹中的环绕点。那么环绕停留点如何去检测呢论文中采用了如下方法 我们定义一个步进距离阈值 distThreh 和一个间隔时间阈值 timeThreh遍历整个轨迹判断当后面某个点与当前点的距离超过了距离阈值且时间间隔大于了时间阈值时这个轨迹片段中的所有点都被判定为围绕停留点。举例来说假设当前点遍历到了P5则我们判断 P6P7P8 到 P5 的距离都没有超过距离阈值直到计算到 P9 点时发现 P9 和 P5 之间的距离超过了预设距离阈值此时判断 P9 点和 P5 点之间的时间间隔是否大于时间阈值若间隔时间大于了预设时间阈值则 P5P6P7P8 四个点均为环绕等待点使用四个点的中心点作为拟合路径点填入到原轨迹中去。 具体实现代码如下 points_without_around_points [points_without_stop_points[0]]time_list_without_around_points [time_list_without_stop_points[0]]i 0# 遍历所有轨迹点将点多个点围绕的情况替换成其中心点while i len(points_without_stop_points):j i 1# 从 i1 开始一直向后遍历找到距离大于最小阈值的最近轨迹点while j len(points_without_stop_points):distance geodesic(points_without_stop_points[i], points_without_stop_points[j]).km# 若当前点j点到i点距离大于预设判断距离则对该轨迹片段进行类型判断if distance min_delta_dist:# 求从i点到最近大于距离阈值点j共消耗的时间delta_time get_hours(time_list_without_stop_points[i], time_list_without_stop_points[j])# 若时间大于预设停留时间则代表该轨迹片段为围绕轨迹替换这些轨迹点为中心围绕点if delta_time min_delta_time:points_sequence np.array(points_without_stop_points[i:j1])centroid [np.mean(points_sequence[:, 0]), np.mean(points_sequence[:, 1])]# 只有该中心点与之前拟合出的中心点隔的比较远才将这个新的中心点加入中心点列表中 if len(around_points_centroids) 0 or get_distance(centroid, around_points_centroids[-1]) min_centroid_threshold:around_points_centroids.append(centroid)points_without_around_points.append(centroid)time_list_without_around_points.append(time_list_without_stop_points[j])# 若时间小于预设停留时间则代表该轨迹片段不是围绕轨迹保留该轨迹段中的所有轨迹点else:points_without_around_points.extend(points_without_stop_points[i1:j1])time_list_without_around_points.extend(time_list_without_stop_points[i1:j1]) i jbreakj 1if j len(points_without_stop_points):break下图为算法执行后的效果图图左为只执行停留点检测的结果蓝色标记处为存在长时间停留的检测点图右为使用了围绕停留点检测的结果图绿色标记为多个围绕点拟合出的中心标记点明显可以看出使用拟合点拟合围绕停留点后整个轨迹看起来要简洁明了许多。 3.3 轨迹分段 轨迹分段是数据预处理中比较重要的一个步骤从前两章可以看出一个完整的轨迹大多时候是比较混乱的。包含自相交、重复行走和突然变向等情况类似的情况会使得我们在做轨迹数据可视化的时候轨迹显得混乱不堪并不利于我们做数据分析。因此我们需要将一个完整轨迹按照某种规律切分为多个不同的轨迹段便于我们下一步的分析。 在轨迹分段中我们通常选用 “时间” 和 “转弯角” 这两个因素作为切割因素若一个轨迹段中出现 “急转弯” 、 “时间间隔较久” 或是 “空间间隔过大” 的这三种情况我们都将其切分为一个独立的子轨迹段。下图是我们进行轨迹分段后的结果图左为未进行数据分段的可视化效果图图右为执行数据分段后的效果图可以看出地图左半部分的区域在未执行数据分段之前较为较混乱执行分段后不再出现自相交的情况。 数据分段的部分代码如下 for i in range(len(origin_positions)):# 若该 segment 中轨迹点数目还不足2个则填满2个后再计算if len(temp_segment) 2:# 若新点和旧点之间的距离大于分割距离则把旧点给弹出删掉if len(temp_segment) 1 and geodesic(temp_segment[-1], origin_positions[i]).km segment_distance:temp_segment.pop(0)temp_time_list.pop(0)temp_segment.append(origin_positions[i])temp_time_list.append(time_list[i])continue# 求该 segment 中最后两个点形成的 headingrelative_pos Utils.get_relative_pos(temp_segment[-2], temp_segment[-1])temp_heading, _ Utils.transfer2polar(relative_pos[0], relative_pos[1])# 求新点与上一个点形成的 heading 以及从上一点到新点耗费的时间new_relative_pos Utils.get_relative_pos(temp_segment[-1], origin_positions[i])new_heading, _ Utils.transfer2polar(new_relative_pos[0], new_relative_pos[1])time_used get_hours_from_two_time_string(temp_time_list[-1], time_list[i])distance geodesic(temp_segment[-1], origin_positions[i]).km# 如果转向超过阈值或等待时间超过阈值则划分为新的一段 segmentif abs(new_heading - temp_heading) math.radians(segment_angle) or time_used segment_time or distance segment_distance:segments.append(temp_segment)segments_time.append(temp_time_list)temp_segment [origin_positions[i]]temp_time_list [time_list[i]]# 否则将该点加入到当前轨迹段中else:temp_segment.append(origin_positions[i])temp_time_list.append(time_list[i])4. 基于轨迹信息的数据挖掘 至此我们的数据预处理工作就暂告一个段落接下来我们就可以在现有数据集上尝试进行相关信息的数据挖掘尝试了。在该实验中我们主要从路口检测和偏好学习两方面进行入手接下来我们分别对两个实验做出相应的介绍。 4.1 路口检测 路口检测是指利用现有用户行径数据来判断哪些位置可能存在路口。路口检测通常可以用于地图的实时更新当挖掘出的路口与地图数据不匹配时可以帮助我们快速的发现一些现实世界的变更信息如某个地区新修建了一个路口等。通常在路口的时候汽车会存在转弯的行为因此路口处的速度方向应该比普通直行道路上的速度方向更加丰富。我们考虑利用聚类算法将各个区域的点按照速度方向进行聚类类别比较丰富的区域更有可能存在路口。 4.1.1 地图分割与轨迹点速度计算 首先我们按照 100mx100m 的正方形对地图进行分割并将每一个轨迹点分类到其对应的格子中。如下所示为验证轨迹点归类算法的正确性我们对每一个格子随机生成一种颜色同一个格子中的轨迹点使用相同颜色进行绘制 在确认归类算法无误后我们将整个地图中的点连同其速度矢量一起绘制到地图上线段方向代表速度方向线段长短代表速度大小 基于此我们依照速度的方向和大小使用 DBSCAN 算法对每个网格中的轨迹点进行聚类。DBSCAN 的好处在于不用人为定义类别个数同时GPS 的噪声也能正好被 DBSCAN 算法给融合。我们对同一个网格下不同类别的路径点使用不同颜色进行区分结果如下所示 值得一提的是在我们选择聚类时需要先选择聚类的指标也就是说我们需要使用哪些特征对轨迹点进行聚类。我们挑选出了3种待选的方案 使用速度的原始 VxVy将速度转换为方向角 r将速度转换为极坐标系即方向角 r 和速度标量 d由于rd数量级相差较大因此需要归一化 为了验证这3个指标哪一个更为合理我们挑选较有代表性的几个地图格并分别对这几个地图格使用上述三种指标进行可视化分析。我们首先选择一个可能存在路口的地图格使用该地图格中的轨迹点进行3种不同指标的聚类结果如图所示。 图中第一列、第二列、第三列分别为速度原始值、速度方向角、速度极坐标归一化后的数据分布图第一行和第二行分别代表各指标原始数据分布图和数据聚类后的结果图。可以看出在地图格当中我们可以看到轨迹点应该大致被分为3类从左到右、从右到左、从上到下而第一列使用原始速度和第二列速度方向角最后的聚类结果也在3类因此比较符合真实结果。但第三列使用方向角和速度值最后归一化出了5类不是很合理。因此在该次实验中我们选择速度原始值或速度方向角指标更为合理。 随即我们选择一个非路口地图格但该格中存在多种不同速度方向的轨迹点我们对地图格中的轨迹点进行3种不同指标的聚类并展示结果。 从地图格中我们可以看出速度应被分为两类从下到上、从上到下。对比前两列聚类结果按照速度原始值聚类结果为3类按照方向角聚类结果为4类-1类代表噪声类。因此我们可以发现再这种情况下使用速度原始值分类可以更加贴近真实结果如果只考虑方向角而步考虑速度大小可能会使得聚类结果偏多。对于第三列结果可以看到虽然聚类结果被分类为了2类但其实是噪声类有效类实际只被聚出了一类因此我们发现在两种实验场景下使用极坐标法归一化都不具备较好的效果。 最后我们进行潜在路口的筛选。我们筛选出所有网格中聚类数目大于 3 的网格DBSCAN 中会将异常类标志为 -1 类别将这些网格视为路口可能出现的潜在单元格并在地图中利用特殊矩形框标记识别出结果如下所示 我们挑选出几个潜在网格查看这些潜在网格中并不是所有网格的判断都是正确的。由于缺乏数据某些路口未能被正常识别出此外由于依赖速度转向做聚类结果某些双行道同样也有可能被判断为是路口网格。因此使用聚类方法只是为我们提供了哪些网格可能是包含路口的潜在网格具体是否确实包含路口还需要在预测结果的基础上进一步的进行判断。 4.2 偏好学习 Work In Process
http://www.zqtcl.cn/news/762881/

相关文章:

  • 福州 网站定制设计哈尔滨网站建设咨询
  • 酒吧网站模板创办网页
  • 外贸网站建设软件有哪些现在网站建设用什么语言
  • lnmp wordpress 主题不见高级seo课程
  • 成都哪家公司做网站最好杭州软件开发
  • 做网站多少宽带够wordpress编辑文章中图片
  • 无锡网站制作排名软件工程公司
  • 做网站国内好的服务器美食网站建设项目规划书
  • 三亚市住房和城乡建设厅网站江西电信网站备案
  • 联谊会总结网站建设对外宣传如何在家做电商
  • 360建站系统徐州建设银行网上银行个人网站
  • 网站域名在哪里备案石家庄站规模
  • 重庆南川网站制作公司电话工会网站群建设
  • 深圳高端建设网站忘了网站链接怎么做
  • 郑州做网站报价wordpress中文4.8
  • 网站维护费用一年多少跨境电商平台网站建设广州
  • 辽宁网站制作公司网店装修流程
  • html5可以做交互网站吗打开网站说建设中是什么问题?
  • 彩票网站开发制作需要什么wordpress 在线预览
  • 外贸平台app衡水seo排名
  • 怎样做网站表白墙东莞商城网站推广建设
  • 郑州郑州网站建设河南做网站公司哪家好爱站长尾词挖掘工具
  • dede网站地图文章变量网站qq 微信分享怎么做
  • 越南做网站网站建设以及运营方面
  • 广西建网站哪家好网站关闭与域名备案
  • 网站开发版本号婚庆网站建设策划案费用预算
  • 厦门建设网站制作中山市哪家公司做网站
  • 网站路径wordpress制作电商网站
  • 江西网站开发哪家专业装饰设计公司网站
  • 企业网站策划实训Wordpress 主题简化