纽约出租车计费问题:一个简单的线性模型
机器学习案例详解的直播互动平台——
机器学习训练营(入群联系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坐标作为预测变量。
排除离群点。
使用完整的数据集。
纽约出租车计费问题:一个简单的线性模型相关推荐
- 出租车计费程序php,一个出租车计费的程序
class 出租车(): def __init__(self,参数1,参数2,参数3): self.每公里费用 = 参数1 self.最低公里 = 参数2 self.最低费用 = 参数3 def 计费 ...
- taxi计费器c语言程序,毕业论文:出租车计费系统(全文完整版)
<毕业论文:出租车计费系统.doc>由会员分享,可免费在线阅读全文,更多与<毕业论文:出租车计费系统>相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索. ...
- Java出租车计费问题
Java出租车计费问题,一个简单小程序助你学会流程控制 出租车问题 出租车计费标准(表1) 任务实施 实现功能 出租车问题 某市出租车计费标准如表1所示. 请根据此标准完成一个出租车计费模拟功能. 能 ...
- 转:大数据处理与开发课程设计——纽约出租车大数据分析
大数据处理与开发课程设计--纽约出租车大数据分析_LHR13的博客-CSDN博客_出租车大数据分析 一.设计目的 综合应用所学的Hadoop/Spark/Storm/Mongdb等技术,设 ...
- 一个简单的线性拟合问题,到底有多少种做法
一个简单的线性拟合问题,到底有多少种做法 相信大家都做过线性拟合问题吧,其实就是给很多点,来求线性方程的斜率和截距.早在高中数学就有这类问题,我记得很清楚,如果出现在试卷中,一般出现在解答题的第二题左 ...
- 什么是量子计算机?用一个简单例子来解释
译者:王亮 作者:YK Sugi 原文:http://t.cn/EZAElk0 Hi,大家好! 不久前,我参观了加拿大温哥华的D-Wave Systems公司,这是一家制造前沿量子计算机的公司. ...
- 量子运算 简单通俗例子_什么是量子计算机? 用一个简单的例子解释。
量子运算 简单通俗例子 by YK Sugi 由YK Sugi 什么是量子计算机? 用一个简单的例子解释. (What is a quantum computer? Explained with a ...
- 简单的线性模型实现tensorflow权重的生成和调用,并且用类的方式实现参数共享
首先看文件路径,line_regression是总文件夹,model文件夹存放权重文件, global_variable.py写了一句话. save_path='./model/weight' 权重要 ...
- 单片机c语言出租车计时程序,基于单片机的出租车计费(c语言).doc
基于单片机的出租车计费(c语言) 基于单片机的出租车计费(c语言) 基于proteus仿真 一.设计要求: 1.用实现出租车计费器的设计. 出租车起步开始计程和计费,计程系统按实际公里数计程,计费系统 ...
- python 北京出租车收费3.45_北京出租车计费标准和价目表
北京出租车计费标准和价目表 2008-03-17 09:20 北京出租车的价目表是这样的: 1 .每公里 2 元,基价为 3 公里,起价 10 元: 2 .单程 15 公里以上的部分加收 50% 空驶 ...
最新文章
- ASP.NET清除页面缓存的方法
- KMP(字符串匹配)算法 O(m+n)
- 剑指offer 包含min函数的栈
- ubuntu 国内源
- Java Stream API进阶篇
- html中加粗的字体如何改细,css怎么把字体变细?
- jquery与checkbox的checked属性的问题
- Python中的map、zip、filter、reduce函数使用
- eclipse上svn创建分支、合并、切换
- Win10下如何清理优化C盘
- 使用javaw在windows上部署jar包在后台运行,并关闭
- 简洁明了的单例模式及其五种写法
- 链表节点被删除时的资源释放
- matlab 直方图
- 网络编程学习_TCP协议
- mybatis mysql 关于调用存储过程获取查询结果
- 超级详细解析——字模
- 伦敦银实时走势图决胜关键
- [OfficeExcel] OfficeExcel2010 第16讲 文本处理函数
- 微信公众号添加word文件
热门文章
- 在ASP.NET中使用ObjectDataSource数据控件和GridView显示数据(2)
- SQLServer2005 中 XML类型方法中 XQuery中变量的参数化--匆忙整理
- Github使用技巧
- 游戏开发之动态创建对象及构造函数、析构函数的执行(C++基础)
- WLAN定义和基础架构
- ELK详解(十五)——ELK+Redis配置实战
- IoT实时数据可视化方案(进阶版):Worldmap Panel使用详解及使用Node-RED进行流程管理...
- OpenStack、CloudStack、Eucalyptus和vCloud Director四大主流云平台怎么选?
- php zmq demo1
- ALSA driver --PCM 实例创建过程