数据读取

气温预测的任务目标就是使用一份天气相关数据来预测某一天的最高温度,属于回归任务,首先观察一下数据集∶

# 数据读取
import pandas as pdfeatures = pd.read_csv('data/temps.csv')
features.head(5)



该项目实战主要完成以下 3 项任务。

  1. 使用随机森林算法完成基本建模任务∶包括数据预处理、特征展示、完成建模并进行可视化展示分析。
  2. 分析数据样本量与特征个数对结果的影响∶在保证算法一致的前提下,增加数据样本个数,观察结果变化。重新考虑特征工程,引入新特征后,观察结果走势。
  3. 对随机森林算法进行调参,找到最合适的参数∶掌握机器学习中两种经典调参方法,对当前模型选择最合适的参数。

数据可视化与预处理


输出结果显示该数据一共有348条记录,每个样本有9个特征。如果想进一步观察各个指标的统计特性,可以用 .describe()展示∶

# 统计指标
features.describe()

其中包括了各个列的数量,如果有缺失数据,数量就有所减少,这里因为并不存在缺失值,所以各个列的数量值就都是348了,均值,标准差,最大最小值等指标在这里就都显示出来了。 对于时间数据,我们也可以进行一些转换,目的就是有些工具包在绘图或者计算的过程中,需要标准的时间格式:

# 处理时间数据
import datetime# 分别得到年,月,日
years = features['year']
months = features['month']
days = features['day']# datetime格式
dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]
dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in dates]


为了更直观地观察数据,最简单有效的办法就是画图展示,首先导入Matplotlib 工具包,再选择一个合适的风格(其实风格差异并不是很大)∶

# 准备画图
import matplotlib.pyplot as plt%matplotlib inline# 指定默认风格
plt.style.use('fivethirtyeight')

接着我们设计画图的布局,这里我们需要展示4项指标,分别为最高气温的标签值,前天,昨天,朋友预测的气温最高值。既然是4个图,那不妨就2*2的规模来画吧,这样会更清晰一点,对每个图再指定好其名字和坐标轴含义就可以了:

# 设置布局
fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(nrows=2, ncols=2, figsize = (10,10))
# 设置下方日期文字显示倾斜度
fig.autofmt_xdate(rotation = 45)# 标签值
ax1.plot(dates,features['actual'])
ax1.set_xlabel(''); ax1.set_ylabel('Temperature'); ax1.set_title('Max Temp')# 昨天
ax2.plot(dates, features['temp_1'])
ax2.set_xlabel(''); ax2.set_ylabel('Temperature'); ax2.set_title('Previous Max Temp')# 前天
ax3.plot(dates, features['temp_2'])
ax3.set_xlabel('Date'); ax3.set_ylabel('Temperature'); ax3.set_title('Two Days Prior Max Temp')# 我的逗逼朋友
ax4.plot(dates, features['friend'])
ax4.set_xlabel('Date'); ax4.set_ylabel('Temperature'); ax4.set_title('Friend Estimate')
# tight_layout会自动调整子图参数,使之填充整个图像区域。这是个实验特性,可能在一些情况下不工作。它仅仅检查坐标轴标签、刻度标签以及标题的部分。
plt.tight_layout(pad=1)


各项指标看起来都还算正常,由于是国外的天气数据所以跟咱们的统计标准有些区别。接下来就要考虑数据预处理问题了,原始数据中在week列中并不是一些数值特征,而是表示周几的字符串,这些计算机可不认识,需要我们来转换一下:

# 独热编码
features = pd.get_dummies(features)
features.head(5)


这样就完成了数据集中属性值的预处理工作,默认会把所有属性值都转换成独热编码的格式,并且还帮我们自动添加了后缀看起来更清晰了。

这里我们其实也可以按照自己的方式来设置编码特征的名字的,如果大家遇到了一个不太熟悉的函数,想看一下其中的细节,有一个更直接的方法就是在notebook当中直接调help工具来看一下它的API文档,下面返回的就是其细节介绍,不光有各个参数说明,还有一些小例子,建议大家在使用的过程中一定要养成多练多查的习惯,查找解决问题的方法也是一个很重要的技能:

print (help(pd.get_dummies))Help on function get_dummies in module pandas.core.reshape.reshape:get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None) -> 'DataFrame'Convert categorical variable into dummy/indicator variables.Parameters----------data : array-like, Series, or DataFrameData of which to get dummy indicators.prefix : str, list of str, or dict of str, default NoneString to append DataFrame column names.Pass a list with length equal to the number of columnswhen calling get_dummies on a DataFrame. Alternatively, `prefix`can be a dictionary mapping column names to prefixes.prefix_sep : str, default '_'If appending prefix, separator/delimiter to use. Or pass alist or dictionary as with `prefix`.dummy_na : bool, default FalseAdd a column to indicate NaNs, if False NaNs are ignored.columns : list-like, default NoneColumn names in the DataFrame to be encoded.If `columns` is None then all the columns with`object` or `category` dtype will be converted.sparse : bool, default FalseWhether the dummy-encoded columns should be backed bya :class:`SparseArray` (True) or a regular NumPy array (False).drop_first : bool, default FalseWhether to get k-1 dummies out of k categorical levels by removing thefirst level.dtype : dtype, default np.uint8Data type for new columns. Only a single dtype is allowed... versionadded:: 0.23.0Returns-------DataFrameDummy-coded data.See Also--------Series.str.get_dummies : Convert Series to dummy codes.Examples-------->>> s = pd.Series(list('abca'))>>> pd.get_dummies(s)a  b  c0  1  0  01  0  1  02  0  0  13  1  0  0>>> s1 = ['a', 'b', np.nan]>>> pd.get_dummies(s1)a  b0  1  01  0  12  0  0>>> pd.get_dummies(s1, dummy_na=True)a  b  NaN0  1  0    01  0  1    02  0  0    1>>> df = pd.DataFrame({'A': ['a', 'b', 'a'], 'B': ['b', 'a', 'c'],...                    'C': [1, 2, 3]})>>> pd.get_dummies(df, prefix=['col1', 'col2'])C  col1_a  col1_b  col2_a  col2_b  col2_c0  1       1       0       0       1       01  2       0       1       1       0       02  3       1       0       0       0       1>>> pd.get_dummies(pd.Series(list('abcaa')))a  b  c0  1  0  01  0  1  02  0  0  13  1  0  04  1  0  0>>> pd.get_dummies(pd.Series(list('abcaa')), drop_first=True)b  c0  0  01  1  02  0  13  0  04  0  0>>> pd.get_dummies(pd.Series(list('abc')), dtype=float)a    b    c0  1.0  0.0  0.01  0.0  1.0  0.02  0.0  0.0  1.0

标签与数据格式转换

# 数据与标签
import numpy as np# 标签
labels = np.array(features['actual'])# 在特征中去掉标签
features= features.drop('actual', axis = 1)# 名字单独保存一下,以备后患
feature_list = list(features.columns)# 转换成合适的格式
features = np.array(features)

训练集与测试集

# 数据集切分
from sklearn.model_selection import train_test_splittrain_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size = 0.25,random_state = 42)
print('训练集特征:', train_features.shape)
print('训练集标签:', train_labels.shape)
print('测试集特征:', test_features.shape)
print('测试集标签:', test_labels.shape)训练集特征: (261, 14)
训练集标签: (261,)
测试集特征: (87, 14)
测试集标签: (87,)

大数据预测实战-随机森林预测实战(一)-数据预处理相关推荐

  1. 大数据预测实战-随机森林预测实战(四)-模型微调

    接下来介绍下一位参赛选手--GridSearchCV(),它要做的事情就跟其名字一样,进行网络搜索,也就是一个一个地遍历,不能放过任何一个可能的参数组合.就像之前说的组合有多少种,就全部走一遍,使用方 ...

  2. 大数据预测实战-随机森林预测实战(四)-模型调参

    之前对比分析的主要是数据和特征层面,还有另一部分非常重要的工作等着大家去做,就是模型调参问题,在实验的最后,看一下对于树模型来说,应当如何进行参数调节. 调参是机器学习必经的一步,很多方法和经验并不是 ...

  3. 大数据预测实战-随机森林预测实战(三)-数据与特征对模型的影响

    数据与特征对随机森林的影响 带着上节提出的问题,重新读取规模更大的数据,任务还是保持不变,需要分别观察数据量和特征的选寸结果的影响. 导入工具包 import pandas as pd 读取数据 fe ...

  4. 基于大尺度结构的随机森林预测与I类HLA结合的稳定肽

    点击下载https://www.frontiersin.org/articles/10.3389/fimmu.2020.01583/full 1.Abstract HLA I类亲和力预测的稳定肽是设计 ...

  5. 的garch预测_随机森林预测

    当涉及到预测数据(时间序列或其他类型的序列)时,人们会关注基本回归.ARIMA.ARMA.GARCH,甚至Prophet,但不排除使用随机森林来预测数据. 随机森林通常被认为是一种分类技术,但回归问题 ...

  6. 大数据预测实战-随机森林预测实战(三)-数据量对结果影响分析

    下面对比一下特征数量对结果的影响,之前两次比较没有加入新的天气特征,这次把降水.风速.积雪 3 项特征加入数据集中,看看效果怎样∶ # 准备加入新的特征 from sklearn.ensemble i ...

  7. python数据项目分析实战技法_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(1/2)...

    第9章--随机森林项目实战--气温预测(1/2) 第8章已经讲解过随机森林的基本原理,本章将从实战的角度出发,借助Python工具包完成气温预测任务,其中涉及多个模块,主要包含随机森林建模.特征选择. ...

  8. python天气数据分析论文_《Python数据分析与机器学习实战-唐宇迪》读书笔记第9章--随机森林项目实战——气温预测(2/2)...

    第9章--随机森林项目实战--气温预测(2/2) 第8章已经讲解过随机森林的基本原理,本章将从实战的角度出发,借助Python工具包完成气温预测任务,其中涉及多个模块,主要包含随机森林建模.特征选择. ...

  9. 机器学习sklearn实战-----随机森林调参乳腺癌分类预测

    机器学习sklearn随机森林乳腺癌分类预测 机器学习中调参的基本思想: 1)非常正确的调参思路和方法 2)对模型评估指标有深入理解 3)对数据的感觉和经验 文章目录 机器学习sklearn随机森林乳 ...

最新文章

  1. 2021年2月程序员工资统计,又拖后腿了……
  2. egg(113)--egg之登录成功跳转到登录之前的页面
  3. python 4.5%2_程序运行慢?你怕是写的假 Python
  4. 成语json_推荐一份中文数据,来试试汉字、词语、成语、歇后语在线检索
  5. 分分钟收入上万 她做到了网红最难的粉丝沉淀
  6. C语言Selection Sort选择排序的算法(附完整源码)
  7. mysql安装图解_MySQL安装图解
  8. 计算机在我国开始被应用于,计算机应用推动自动化与信息化的发展
  9. 前端学习(2123):知识回顾
  10. 二月,劝 Java 工程师不要跳槽!
  11. RadonDB - 基于MySQL的云原始分布式数据库,用于构建全局的,可扩展的云服务
  12. 删除CentOS系统自带的jdk
  13. 初识BoundSQL
  14. find 命令查找-o参数的理解
  15. php文件显示代码行数,php统计文件中的代码行数
  16. firework cs4入门
  17. POI 模板生成word PDF——牛X神器
  18. matlab检验数据异方差,怀特异方差检验方法在matlab中的实现,以及广义最.....
  19. 公众号淘客返利系统,自动回复淘宝优惠券实现方法
  20. Android 文件管理器 文件缩略图标显示流程

热门文章

  1. 电脑html外链加密,WordPress 无需插件外链加密转内链
  2. 联想微型计算机功率,解锁全部潜力,联想这款笔记本可以将CPU功耗提升至24W
  3. php.exe不是内部或外部命令,“php.exe”不被识别为内部或外部命令,可操作程序或batch file...
  4. mysql主从搭建配置(mysql version5.7.22)
  5. java extends原则_Java泛型extends及super区别实例解析
  6. linux自动化测试脚本,linux iperf3 一键自动化测试脚本
  7. linux caffe ssd安装错误,ubuntu16.04安装caffe以及各种问题汇总
  8. python 3.8 新特性_Python 3.8六大新功能
  9. 计算机语言python发音_Python如何像scratch一样朗读文字?
  10. 猜物品游戏java编程_小猿圈Java初学者练习小案例:猜数字游戏