机器学习案例详解的直播互动平台——
机器学习训练营(入群联系qq:2279055353)
下期直播案例预告:大数据预测商品的销售量波动趋势

案例背景

该案例是一个美国纽约市出租车的行程计费问题。给定乘客上、下车的位置信息,你要根据行程距离,建立模型预测出租车的车费。该模型可以扩展应用于出租车车费定价、阶梯价格设定等问题。

  • 案例来源: Google云课程

  • 代码实现: Python

数据描述

ID

  • key 行识别符字符串。

特征

  • pickup_datetime 出租车行程开始时间

  • pickup_longitude 出租车行程开始经度坐标

  • pickup_latitude 出租车行程开始纬度坐标

  • dropoff_longitude 出租车行程结束经度坐标

  • dropoff_latitude 出租车行程结束纬度坐标

  • passenger_count 乘客数

目标变量

  • fare_amount 车费

数据准备

我们想在训练集train.csv上建立预测模型,所以首先加载训练数据。由于整个训练集特别庞大,共有55M行。根据内存容量大小,我们选择加载100万行的数据子集。

# Initial Python environment setup...
import numpy as np # linear algebra
import pandas as pd # CSV file I/O (e.g. pd.read_csv)
import os # reading the input files we have access totrain_df =  pd.read_csv('../input/train.csv', nrows = 10_000_000)
print(train_df.dtypes)


我们想使用经度、纬度坐标定义一个行程向量。为此,我们产生两个新的特征,分别表示经度、纬度的距离。

# Given a dataframe, add two new features 'abs_diff_longitude' and
# 'abs_diff_latitude' reprensenting the "Manhattan vector" from
# the pickup location to the dropoff location.
def add_travel_vector_features(df):df['abs_diff_longitude'] = (df.dropoff_longitude - df.pickup_longitude).abs()df['abs_diff_latitude'] = (df.dropoff_latitude - df.pickup_latitude).abs()add_travel_vector_features(train_df)
print(train_df.head())

删除缺失行

我们看一看训练集里是否有缺失项(NaN)

print(train_df.isnull().sum())


由于缺失项很少,我们直接删除它们所在的数据行。

print('Old size: %d' % len(train_df))
train_df = train_df.dropna(how = 'any', axis = 'rows')
print('New size: %d' % len(train_df))


线性模型

我们在训练集上建立一个简单的线性模型预测车费。模型定义为

y=X⋅wy=X \cdot wy=X⋅w

其中,XXX是输入特征矩阵,由两个GPS坐标差和1向量组成。yyy是目标变量fare_amount, www是估计向量。我们写一个函数组建这些。

# Construct and return an Nx3 input matrix for our linear model
# using the travel vector, plus a 1.0 for a constant bias term.
def get_input_matrix(df):return np.column_stack((df.abs_diff_longitude, df.abs_diff_latitude, np.ones(len(df))))train_X = get_input_matrix(train_df)
train_y = np.array(train_df['fare_amount'])print(train_X.shape)
print(train_y.shape)



现在,我们使用numpy的lstsq库函数找到最优的权向量www.

# The lstsq function returns several things, and we only care about the actual weight vector w.
(w, _, _, _) = np.linalg.lstsq(train_X, train_y, rcond = None)
print(w)

它实际上等价于www的最小二乘估计:

w=(X′X)−1X′yw=(X'X)^{-1}X'yw=(X′X)−1X′y

w_OLS = np.matmul(np.matmul(np.linalg.inv(np.matmul(train_X.T, train_X)), train_X.T), train_y)
print(w_OLS)


现在,我们可以加载检验集,并将该模型用于检验集上预测车费。

改善的想法

  • 使用输入数据里的更多特征。

这里,我们仅使用了开始/结束的GPS坐标。可以尝试加入乘车时间、乘客数等特征改善模型。

  • 使用绝对坐标而不是相对坐标。

这里,我们仅使用了开始到结束点的距离。可以考虑上、下车的GPS坐标作为预测变量。

  • 排除离群点。

  • 使用完整的数据集。

纽约出租车计费问题:一个简单的线性模型相关推荐

  1. 出租车计费程序php,一个出租车计费的程序

    class 出租车(): def __init__(self,参数1,参数2,参数3): self.每公里费用 = 参数1 self.最低公里 = 参数2 self.最低费用 = 参数3 def 计费 ...

  2. taxi计费器c语言程序,毕业论文:出租车计费系统(全文完整版)

    <毕业论文:出租车计费系统.doc>由会员分享,可免费在线阅读全文,更多与<毕业论文:出租车计费系统>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. ...

  3. Java出租车计费问题

    Java出租车计费问题,一个简单小程序助你学会流程控制 出租车问题 出租车计费标准(表1) 任务实施 实现功能 出租车问题 某市出租车计费标准如表1所示. 请根据此标准完成一个出租车计费模拟功能. 能 ...

  4. 转:大数据处理与开发课程设计——纽约出租车大数据分析

    ​​​​​​大数据处理与开发课程设计--纽约出租车大数据分析_LHR13的博客-CSDN博客_出租车大数据分析 一.设计目的 综合应用所学的Hadoop/Spark/Storm/Mongdb等技术,设 ...

  5. 一个简单的线性拟合问题,到底有多少种做法

    一个简单的线性拟合问题,到底有多少种做法 相信大家都做过线性拟合问题吧,其实就是给很多点,来求线性方程的斜率和截距.早在高中数学就有这类问题,我记得很清楚,如果出现在试卷中,一般出现在解答题的第二题左 ...

  6. 什么是量子计算机?用一个简单例子来解释

    译者:王亮  作者:YK Sugi  原文:http://t.cn/EZAElk0 Hi,大家好! 不久前,我参观了加拿大温哥华的D-Wave Systems公司,这是一家制造前沿量子计算机的公司. ...

  7. 量子运算 简单通俗例子_什么是量子计算机? 用一个简单的例子解释。

    量子运算 简单通俗例子 by YK Sugi 由YK Sugi 什么是量子计算机? 用一个简单的例子解释. (What is a quantum computer? Explained with a ...

  8. 简单的线性模型实现tensorflow权重的生成和调用,并且用类的方式实现参数共享

    首先看文件路径,line_regression是总文件夹,model文件夹存放权重文件, global_variable.py写了一句话. save_path='./model/weight' 权重要 ...

  9. 单片机c语言出租车计时程序,基于单片机的出租车计费(c语言).doc

    基于单片机的出租车计费(c语言) 基于单片机的出租车计费(c语言) 基于proteus仿真 一.设计要求: 1.用实现出租车计费器的设计. 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统 ...

  10. python 北京出租车收费3.45_北京出租车计费标准和价目表

    北京出租车计费标准和价目表 2008-03-17 09:20 北京出租车的价目表是这样的: 1 .每公里 2 元,基价为 3 公里,起价 10 元: 2 .单程 15 公里以上的部分加收 50% 空驶 ...

最新文章

  1. ASP.NET清除页面缓存的方法
  2. KMP(字符串匹配)算法 O(m+n)
  3. 剑指offer 包含min函数的栈
  4. ubuntu 国内源
  5. Java Stream API进阶篇
  6. html中加粗的字体如何改细,css怎么把字体变细?
  7. jquery与checkbox的checked属性的问题
  8. Python中的map、zip、filter、reduce函数使用
  9. eclipse上svn创建分支、合并、切换
  10. Win10下如何清理优化C盘
  11. 使用javaw在windows上部署jar包在后台运行,并关闭
  12. 简洁明了的单例模式及其五种写法
  13. 链表节点被删除时的资源释放
  14. matlab 直方图
  15. 网络编程学习_TCP协议
  16. mybatis mysql 关于调用存储过程获取查询结果
  17. 超级详细解析——字模
  18. 伦敦银实时走势图决胜关键
  19. [OfficeExcel] OfficeExcel2010 第16讲 文本处理函数
  20. 微信公众号添加word文件

热门文章

  1. 在ASP.NET中使用ObjectDataSource数据控件和GridView显示数据(2)
  2. SQLServer2005 中 XML类型方法中 XQuery中变量的参数化--匆忙整理
  3. Github使用技巧
  4. 游戏开发之动态创建对象及构造函数、析构函数的执行(C++基础)
  5. WLAN定义和基础架构
  6. ELK详解(十五)——ELK+Redis配置实战
  7. IoT实时数据可视化方案(进阶版):Worldmap Panel使用详解及使用Node-RED进行流程管理...
  8. OpenStack、CloudStack、Eucalyptus和vCloud Director四大主流云平台怎么选?
  9. php zmq demo1
  10. ALSA driver --PCM 实例创建过程