fastai机器学习课程-甲骨文 ORADC-AIG学习公开课(Lesson2)

Hi,这是我们第2次公开课。之所以有这个分享课程是因为大家太忙(懒),没有时间看fastai在线视频和笔记。而且视频和笔记都是英文的,大家也不想费脑子(懒)。所以本课程的目的就是把Jeremy老师的视频用中文再给大家讲一遍,另外把Hiromi小姐的笔记翻译加工一下分享给大家。


深入随机森林

Notebook

1.评估方法

1.1 RMSE定义

上回讲到调用了一个基础模型,把train数据集传入并打印了结果评分。

def rmse(x,y): return math.sqrt(((x-y)**2).mean())

这里用到了df的mean()函数,用于返回平均值。另外,由于我们已经对传入的x,y取对数了,

df_raw.SalePrice = np.log(df_raw.SalePrice)

所以这里只需要计算rmse就可以啦。

%time可以记录cpu运行的时间。根据经验来说,一般运行时间超过10秒,就无法进行互动分析了。所以在调研阶段要控制其在一个合理的运行时间。而等到下班前把当天的特征工程、参数都做得差不多了,就可以跑一长时间的试试,第二天回来再看看结果。

def print_score(m):
    res = [rmse(m.predict(X_train), y_train), rmse(m.predict(X_valid), y_valid),
                m.score(X_train, y_train), m.score(X_valid, y_valid)]
    if hasattr(m, 'oob_score_'): res.append(m.oob_score_)
    print(res)
    m = RandomForestRegressor(n_jobs=-1)
%time m.fit(X_train, y_train)
print_score(m)

均方根对数误差,Root Mean Squared Logarithmic Error (RMSLE):
在这里插入图片描述
均方根误差,Root Mean Squared Error (RMSE):
在这里插入图片描述

然后我们把数据集里所有的数据都转换成数字:

  • add_datepart—获取日期特征。
  • train_cats—转换string为pandas的category数据类型。然后调用proc_df把所有category类型的列,都替换为其category codes值。
  • proc_df还可以把缺失值替换为中位数,添加[column_name]_na的列,然后通过设置其值(true/false)表示该列是否缺失值。

1.2 R²定义

**R²是什么?

在这里插入图片描述
yi是目标数据,ȳ 是平均值,SStot是数据的差异,fi是预测数据,SSres是实际模型的RMSE。
如果预测结果和平均值完全一样(fi=ȳ ),则SSres/SStot=1, R² = 0。
如果预测结果和实际值完全一样(fi=yi),则SSres/SStot=0, R² = 1。
其中R²的范围是1~-∞。如果值是负的,说明你的模型太差,全预测平均数也比你的模型好。

你不需要对R²进行调优,它更多是提供一个模型好坏的趋势参考。比如R²是0.8的时候模型是什么样的,R²是0.9的时候模型是什么样的。有时候可以用随机噪音数不同的数据集,创建一个2D散点图,看一下R²的值,感受一下这些和实际值的接近程度。
R²是衡量你的模型与全平均值模型 的比率。总要比无脑全预测平均值要好才行啊。
https://www.graphpad.com/guides/prism/7/curve-fitting/index.htm?r2_ameasureofgoodness_of_fitoflinearregression.htm

1.3 过拟合(Overfitting)

验证集和测试集的区别?

如果只有一个数据集,然后在其上尝试了各种超参数的组合,最后模型可能会在这个数据集上过拟合。所以如果有一个验证集,我们就可以在上面验证模型是否合适。如果结果在训练集上很精确,但是在验证集上很糟糕,说明模型过拟合了,需要调整超参数。
测试集则只是用于测试最终模型的好坏的。

在这里插入图片描述
可以看到,R²在训练集上是0.982,在验证机是只有0.886,说明我们的模型过拟合了,但是RMSE是0.25,所以过拟合的不是特别厉害。

为什么不随机选择数据生成验证集呢?

因为数据集里的日期是一个重要数据,如果任意选择一些日期组成验证集,实际上对于预测的计算来说就变得更容易了,因为我们要预测后面日期的数据,在训练集里已经出现了差不多日期的数据了,验证集里日期相近的数据很容易就能预测出来。但是对于测试集,用的是单独的日期期间的数据,预测结果就不会太好了。结论就是,通常如果建立的模型包含日期元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值