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

2023-12-19 11:08

本文主要是介绍fastai机器学习课程-甲骨文 ORADC-AIG学习公开课(Lesson1),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

首先,下载并安装一些在本地可能用到的工具Anaconda(python3.7),git。
接下来可以clone fastai的repo到本地,比较大,慢慢烤……
https://github.com/fastai/fastai
直接git clone就可以,因为根据StackOverflow有人问的:
from StackOverflow

课程教授方式采用Jeremy老师的自上而下教学法——先有宏观概念(应用),然后再深入需要的细节。刚开始时把精力放在”能做什么“上,而不是抽象概念上。

  学习方法:
  1.参加Kaggle竞赛
  2.创建Kaggle kernels


(假标题)随机森林:Blue Book for Bulldozer

Note| Kaggle

1. 薅Kaggle kernel羊毛

1.1 初始设定

创建Kernel;
在这里插入图片描述
添加数据;
在这里插入图片描述
启用GPU;
在这里插入图片描述

启用internet连接;
在这里插入图片描述
现在可以使用6个小时了(单次训练累计时间);

接下来可以上传导入ipynb文件,不过最好是自己敲一遍代码啦。
在这里插入图片描述

1.2 安装fastai库

!pip install fastai==0.7.0
!pip install torchtext==0.2.3

(对于fastai2018年的ML课程,要使用fastai 0.7版本。)接下来看看安装到哪里去了:

!pip show fastai

1.3 自动重新加载&导入(autoreload,%魔法命令)

%load_ext autoreload
%autoreload 2
%matplotlib inline
from fastai.imports import *
from fastai.structured import *
from pandas_summary import DataFrameSummary
from sklearn.ensemble import RandomForestRegressor, RandomForestClassifier
from IPython.display import display
from sklearn import metrics

数据科学 ̸ = \not= ̸=软件工程——在建模阶段更加注重交互、迭代的探索过程的便捷性。
如果想知道display函数的用法,可以通过多种方式:

  • 在一个cell中输入display,然后shift+enter,就可以输出其具体package路径:
    <function IPython.core.display.display>
  • 在cell中输入?display,然后shift+enter,就可以输出其doc文档。
  • 在cell中输入??display,然后shift+enter,就可以输出其源代码。

2. 特征工程

2.1. 查看数据

在进行数据科学工作的时候,查看并理解数据是至关重要的。要确保理解数据的格式,如何排序的,都有哪些类型,等等。

df_raw = pd.read_csv(f'{PATH}Train.csv', low_memory=False, parse_dates=["saledate"])
  • parse_dates——转成日期格式
  • low_memory=False——一次性读取csv中的所有数据,然后对字段的数据类型进行唯一的一次猜测。这样就不会导致同一字段的Mixed types问题了。但是一旦csv文件过大,就会内存溢出……
  • pandas是处理结构化数据最重要的库。通常import为pd。
def display_all(df):with pd.option_context("display.max_rows", 1000): with pd.option_context("display.max_columns", 1000): display(df)
display_all(df_raw.tail().T)

截取了最后5行数据并且转置行列进行显示。
在这里插入图片描述

display_all(df_raw.describe(include='all').T) #统计数据

在这里插入图片描述

df_raw.SalePrice = np.log(df_raw.SalePrice) #这个只能做一次哦,因为会直接替换原来的值。
  • np——Numpy是个好东西,可以让我们像处理python变量一样去处理数组,矩阵,向量,高维张量。通常import为np。

    df_raw.SalePrice.head()
    在这里插入图片描述

2.2 处理数据

  • scikit-learn ——Python上最流行而且重要的机器学习库。虽然不是不是在每个方面都是最优秀的(比如XGBoost比Gradient Boosting Tree好),但是也很好了。
  • RandomForestRegressor——用于预测连续变量的方法。
  • RandomForestClassifier——用于预测分类变量的方法。
  • 连续——值是用数字表示的,比如价格。
  • 分类——值用特殊数字表示,比如邮编,或者是字符,比如“large”,“medium”,“small”。
m = RandomForestRegressor(n_jobs=-1)
# The following code is supposed to fail due to string values in the input data
m.fit(df_raw.drop('SalePrice', axis=1), df_raw.SalePrice)

基本上scikit-learn里的东西都时这个形式:

  • 为机器学习模型创建一个对象实例。
  • 调用fit,把用于预测的独立变量和需要预测的依赖变量传进去。
  • axis=1表示去掉(某)列。
  • shift+tab 一次或者多次,可以出现类似?method的效果。

然后就报错了……因为创建模型必须用number类型的数据,有一个数据值是string型,这个必须转成number类型才可以。
在这里插入图片描述

关于日期数据的提取——year, month, quarter, day of month, day of week, week of year,是否是holiday? weekend? 是否下雨? 提取什么内容完全基于需要处理的业务。如果是预测啤酒的在某地的销售,就应该关注那里当天是否有足球比赛。从日期里发现发生了什么是特征工程一项很重要的工作。机器学习算法不会告诉你哪天有比赛,也不会告诉你比赛会影响啤酒销量。这些都需要行业经验,需要特征工程。

add_datepart函数用于从完整的日期时间数据里提取特定的日期项目,以构建分类数据。只要处理日期时间的数据,就应该考虑这个特征提取步骤。如果不把日期时间数据扩展成为这些额外的项目,就不能获取在这些时间粒度下的任何趋势/周期性的行为。

add_datepart(df_raw, 'saledate')
df_raw.saleYear.head()

在这里插入图片描述

df_raw.saleYear和df_raw[‘saleYear’]有啥区别?赋值的时候,用方括号的形式,如果没有这个属性,就会先创建、再给其赋值。

Pandas有category数据类型的概念,但是默认不会自动转换。Fast.ai库提供了一个train_cats函数,可以自动把String类型转换成分类变量。基本流程是,首先创建一个integer column,然后存储一个从integer到String的映射。之所以train_cats命名为“train”,是因为其专为训练数据集使用。对于验证数据集和测试数据集,由于要保持其分类映射的一致性,要使用apply_cats。

train_cats(df_raw)
df_raw.UsageBand.cat.categories #查看分类值

在这里插入图片描述

更改一下分类值的顺序,让它们更有意义,对决策树算法来说也更容易理解。

df_raw.UsageBand.cat.set_categories(['High', 'Medium', 'Low'],ordered=True, inplace=True)

有一种分类变量叫做“序数词(ordinal)”。序数词变量会自带顺序属性(比如 “Low” < “Medium” < “High”)。随机森林对此不敏感,但是大家了解一下也是好的。

接下来要处理缺失数据。

display_all(df_raw.isnull().sum().sort_index()/len(df_raw))

在这里插入图片描述

读取和处理CSV文件需要不少时间,所以现在我们可以把他们保存成feather格式,这样在硬盘和内存中使用相同格式,将大大节省加载时间。这也是目前为止保存和读取文件的最快方式。feather格式也逐渐在很多技术中成为标准。

os.makedirs('tmp', exist_ok=True)
df_raw.to_feather('tmp/bulldozers-raw') #保存一下
df_raw = pd.read_feather('tmp/bulldozers-raw') #读取回来

接下来继续处理,我们要替换分类变量的值为它们的数据值,处理缺失值,还要把依赖变量(要预测的变量)切到单独的变量里去。

df, y, nas = proc_df(df_raw, 'SalePrice')

对于数值类型的,首先检查是不是null,如果是,就创建一个列名代后缀_na的新列,缺失值用1表示,其他用0(1:True,0:False)。然后将会用中位数替代缺失值。分类类型的变量不需要此处理,因为Pandas已经自动把它们设为-1了,fastai库会给分类类型code+1,所以就是从0开始了。
在这里插入图片描述

2.3 预处理

现在终于可以给提交数据到随机森林了!

m = RandomForestRegressor(n_jobs=-1) #为每个cpu创建一个单独的job
m.fit(df, y)
m.score(df,y)

在这里插入图片描述

m.score返回的R2(决定系数),越接近1越好。

可能机器学习中最重要的观点就是要分开训练集和验证集。

如果不分割数据集,有可能:
在这里插入图片描述

最右侧的图的曲线机会完美的覆盖了所有的红叉,,但是不是最好的选择。为啥?如果再导入一些新数据,曲线就会慢慢像中间的图一样。

def split_vals(a,n): return a[:n].copy(), a[n:].copy()n_valid = 12000  # same as Kaggle's test set size
n_trn = len(df)-n_valid
#raw_train, raw_valid = split_vals(df_raw, n_trn)
X_train, X_valid = split_vals(df, n_trn)
y_train, y_valid = split_vals(y, n_trn)X_train.shape, y_train.shape, X_valid.shape

在这里插入图片描述

2.4 基本模型

def rmse(x,y): return math.sqrt(((x-y)**2).mean())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)

在这里插入图片描述

3.仍然没说随机森林

3.1 数据建模的两种方法

  • 决策树集成(例如随机森林和梯度提升决策树),主要用于结构化数据。
  • 学习随机梯度下降的多层神经网络(例如浅度、深度学习),主要用于非结构化数据。

3.2 评估指标 (机器学习中的一些COST函数的说明)

一个项目中的评估指标很重要。对于我们这个项目,kaggle中要求使用RMSLE去评估实际价格和预测价格之间的差距。所以我们要对价格取对数,然后应用RMSE得到最终需要的结果。
我们在处理数据时已经将原始价格替换为它的对数了。

3.3 两个Jeremy认为没用且很蠢的理论

  • 维数灾难(curse of dimensionality)
  • 没有免费的午餐定理(no free lunch theorem)

这篇关于fastai机器学习课程-甲骨文 ORADC-AIG学习公开课(Lesson1)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/511936

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa