如何轻松的使用Python中的随机森林

从来没有比现在更好的时间来学习机器学习了。随着vailable在线学习资源,免费的开源工具的提供,以及任何可以想到的算法的实现方法,并通过云服务,例如廉价AWS计算能力,机器学习由互联网领域已经大众化。任何能够使用笔记本电脑并乐于学习的人都可以在几分钟内尝试最先进的算法。再多花一点时间,您就可以开发实用的模型来为您的日常生活或工作提供帮助(甚至切换到机器学习领域并获得经济利益))。这篇文章将引导您完成功能强大的随机森林机器学习模型的建立。它旨在补充我对随机森林的概念性解释,但只要您对决策树和随机森林有基本了解,就可以完全单独阅读。后面还会介绍更深的随机森林优化。

理所应当的这里会有Python代码,但是,任何人都可以访问这些机器学习资源!数据文件和Jupyter Notebook也可以从Google云端硬盘下载。您所需要的只是一台安装了Python的笔记本电脑,并且具有启动Jupyter Notebook的能力,您可以继续学习。这里将涉及一些必要的机器学习主题,但是我将尽力使它们变得清晰,并为感兴趣的人提供更多的学习资源。

1

1. 问题介绍

我们将要解决的问题是使用一年的过去天气数据来预测我们城市明天的最高温度。我正在使用华盛顿州西雅图市,但是可以使用NOAA在线气候数据工具随意查找您自己城市的数据。我们将进行预测,假设我们无法获得任何天气预报一样,而且,我们要做出我们自己的预测而不是依靠其他预测会更有趣。我们所能获得的是一年的历史最高气温,前两天的气温,以及一个一直声称对天气有所了解的朋友的估计。这是有监督的回归机器学习问题。之所以受到监督,是因为我们同时具有要预测的特征(城市数据)和目标(温度)。在训练期间,我们为随机森林提供了特征和目标,并且它必须学习如何将数据映射到预测。此外,这是一项回归任务,因为目标值是连续的(与分类中的离散类相对)。这几乎是我们需要的所有背景,所以让我们开始吧!

2. 路线图

在我们直接进行编程之前,我们应该先制定一份简短的指南,以保持我们方向正确。一旦我们想到了问题和模型,以下步骤将是任何机器学习工作流程的基础:

  1. 陈述问题并确定所需数据
  2. 以可访问的格式获取数据
  3. 根据需要识别并纠正丢失的数据点/异常
  4. 为机器学习模型准备数据
  5. 建立您希望超越的基准模型
  6. 根据训练数据训练模型
  7. 对测试数据进行预测
  8. 将预测与已知测试集目标进行比较,并计算性能指标
  9. 如果性能不令人满意,请调整模型,获取更多数据或尝试其他建模技术
  10. 可视化和数字化解释模型并报告结果

步骤1已被我们已经完成!我们的问题:“我们能预测明天城市的最高温度吗?” 而且我们知道我们可以获取过去一年华盛顿州西雅图市的历史最高气温。

3. 数据采集

首先,我们需要一些数据。举一个现实的例子,我使用NOAA气候数据在线工具从2016年检索了华盛顿州西雅图的天气数据。通常,大约80%的数据分析时间是清理和检索数据,但是可以通过查找高质量的数据源来减少此工作量。NOAA工具非常的易用,温度数据可以以干净的csv文件的形式下载,可以用Python或R等语言进行解析。
地址为:https://drive.google.com/file/d/1pko9oRmCllAxipZoa3aoztGZfPAD2iwj/view
以下Python代码在csv数据中加载并显示数据的结构:

# Pandas is used for data manipulation
import pandas as pd
# Read in data and display first 5 rows
features = pd.read_csv('temps.csv')
features.head(5)

1

信息采用整洁的数据格式,每一行构成一个观察值,各列中包含变量值。
以下是各列的说明:
year:所有数据点均为2016年
month:一年中的月份号
day:一年中的天数
week:星期几作为字符串
temp_2: 2天之前的最高温度
temp_1: 1天前的最高温度
average:历史平均最高温度
actual:最高温度测量
friend:您朋友的预测,是随机数在平均值以下20到平均值以上20之间

4. 识别异常/丢失数据

如果我们看一下数据的维度,就会发现只有348行,这与2016年我们知道的366天并不完全一致。通过NOAA的数据,我注意到有几天丢失了,这极大地提醒了我们,在现实世界中收集的数据永远不会是完美的。数据丢失可能会影响分析,不正确的数据或异常值也会影响分析。在这种情况下,丢失的数据不会有很大的影响,并且由于源的原因,数据质量也很好。我们还可以看到有9个列代表8个功能和一个目标(“实际”)。

print('The shape of our features is:', features.shape)
The shape of our features is: (348, 9)

为了识别异常,我们可以快速计算摘要统计信息。

# Descriptive statistics for each column
features.describe()

1

一眼望去,在任何列中都没有明显显示为异常的数据点。验证数据质量的另一种方法是绘制图。通常,在图形中发现异常比在数字中发现异常更容易。我在这里省略了实际的代码,因为使用Python进行绘图是不直观的,但是可以随时访问github以获取完整的code(就像任何优秀的数据科学家一样,我几乎从Stack Overflow复制并粘贴了绘图代码,哈哈)。

1

检查定量统计数据和图表,我们可以对数据的高质量充满信心。没有明显的异常值,尽管存在一些遗漏点,但它们不会影响分析。

5. 资料准备

不幸的是,我们还不能完全将原始数据输入模型并返回答案(尽管人们正在为此做准备)!我们将需要做一些小的修改,以使我们的数据成为机器可理解的数据形式。我们将使用Python-Pandas进行数据处理,它依赖于称为数据框的结构,该结构基本上是具有行和列的excel电子表格。

数据准备的确切步骤将取决于所使用的模型和收集的数据,但是任何机器学习应用程序都将需要一定数量的数据处理。

5.1 One-Hot Encoding

我们的第一步被称为单热编码的数据。此过程将使用类别变量(例如星期几),并将其转换为数字表示形式,而无需进行任意排序。一周中的几天对我们来说很直观,因为我们一直都在使用它们。但是机器没有任何直观的知识。计算机知道的是只有数字,所以当进行机器学习,我们必须的数据必须只包含数字。但如果我们简单地将一周中的几天映射为数字1至7(label方法),但这可能会导致算法在星期日上更加重要,因为它具有较高的数值。相反,我们将工作日的单列更改为7列二进制数据。最好用图形说明。热门编码采用此方法:

1

并变成

1

因此,如果数据点是星期三,则在星期三列中将有一个1,在所有其他列中将有一个0。此过程可以在一行中的pandas中完成!

# One-hot encode the data using pandas get_dummies
features = pd.get_dummies(features)
# Display the first 5 rows of the last 12 columns
features.iloc[:,5:].head(5)

一键编码后的数据:

1

现在我们的数据形状为349 x 15,并且所有列都是数字,就像算法喜欢的数据样式!

6. 特征和目标并将数据转换为数组

现在,我们需要将数据分为特征和目标。目标(也称为标签)是我们要预测的值,在这种情况下,实际最高温度和特征是模型用来进行预测的所有列。我们还将pandas数据框转换为Numpy数组,因为这是该算法的工作方式。(我将列标题(即特征名称)保存到列表中,以用于以后的可视化)。

# Use numpy to convert to arrays
import numpy as np
# Labels are the values we want to predict
labels = np.array(features['actual'])
# Remove the labels from the features
# axis 1 refers to the columns
features= features.drop('actual', axis = 1)
# Saving feature names for later use
feature_list = list(features.columns)
# Convert to numpy array
features = np.array(features)

6. 训练集和测试集

数据准备的最后一步是:将数据分为训练和测试集。在训练过程中,我们让模型“看到”答案,在本模型中为实际温度,因此它可以学习如何根据特征预测温度。我们期望所有特征与目标值之间存在某种关系,并且模型的工作是在训练过程中学习这种关系。然后,当需要评估模型时,我们要求它在只能访问特征(而不能访问答案)的测试集中进行预测!因为我们有测试集的真实值,所以我们可以将这些预测值与真实值进行比较,以判断模型的准确性。通常,在训练模型时,我们将数据随机分为训练和测试集 为了获得所有数据点的表示形式(如果我们在一年的前九个月进行了培训,然后将最后三个月用于预测,则我们的算法将无法很好地执行,因为它没有看到过去三个月的任何数据。)我将随机种子设置为42,这意味着每次运行代码,结果都将相同。
以下代码用另一行分割数据集:

# Using Skicit-learn to split data into training and testing sets
from sklearn.model_selection import train_test_split
# Split the data into training and testing sets
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size = 0.25, random_state = 42)

我们可以查看所有数据的形状,以确保正确完成了所有操作。我们希望训练功能的列数与测试功能的列数相匹配,行数与各个训练和测试功能及标签相匹配:

print('Training Features Shape:',train_features.shape)
print('Training Labels Shape:',train_labels.shape)
print('Testing Features Shape:',test_features.shape)
print('Testing Labels Shape:',test_labels。形状)
Training Features Shape: (261, 14)
Training Labels Shape: (261,)
Testing Features Shape: (87, 14)
Testing Labels Shape: (87,)

看来一切都井然有序!回顾一下,为了使数据成为机器学习可以接受的形式,我们:

  1. 一键编码分类变量
  2. 将数据分为特征和标签
  3. 转换为数组
  4. 将数据分为训练和测试集

根据初始数据集,可能需要进行额外的工作,例如删除异常值,估算缺失值或将时间变量转换为循环表示。这些步骤乍一看似乎是任意的,但是一旦您获得了基本的工作流程,对于任何机器学习问题来说,它通常都是相同的。这一切都是关于将人类可读的数据放入一种机器学习模型可以理解的形式。

7. 建立base

在做出和评估预测之前,我们需要建立一个基线,这是我们希望与我们的模型相比较的措施。如果我们的模型不能在基线上得到改善,那将是一个失败,我们应该尝试其他模型,或者承认机器学习不适合我们的问题。我们的案例的基线预测可以是历史最高温度平均值。换句话说,我们的基线是如果我们仅预测所有天的平均最高温度,就会得到的误差。

# The baseline predictions are the historical averages
baseline_preds = test_features[:, feature_list.index('average')]
# Baseline errors, and display average baseline error
baseline_errors = abs(baseline_preds - test_labels)
print('Average baseline error: ', round(np.mean(baseline_errors), 2))
Average baseline error:  5.06 degrees.

现在我们有了目标!如果我们无法提升5度的平均误差,那么我们需要重新考虑我们的方法。

7. 训练模型

在完成所有数据准备工作之后,使用Scikit-learn即可轻松创建和训练模型。我们从skicit-learn导入随机森林回归模型,然后将模型(训练的scikit-learn名称)适配fit于训练数据。(再次将随机状态设置为可再现的结果)。整个过程在scikit-learn中只有3行!

# Import the model we are using
from sklearn.ensemble import RandomForestRegressor
# Instantiate model with 1000 decision trees
rf = RandomForestRegressor(n_estimators = 1000, random_state = 42)
# Train the model on training data
rf.fit(train_features, train_labels);

8. 测试集进行预测

现在,我们的模型已经过训练,可以学习特征与目标之间的关系。下一步是弄清楚模型的好坏!为此,我们对测试功能进行预测(永远不允许模型查看测试答案)。然后,我们将预测与已知答案进行比较。在执行回归时,我们需要确保使用绝对误差,因为我们的某些答案很低,而有些答案则很高,但我们对平均预测值与实际值相距多远感兴趣,因此我们采用了绝对值(建立基线时也是如此)。
用模型进行预测是Skicit-learn中的另一条1行命令。

# Use the forest's predict method on the test data
predictions = rf.predict(test_features)
# Calculate the absolute errors
errors = abs(predictions - test_labels)
# Print out the mean absolute error (mae)
print('Mean Absolute Error:', round(np.mean(errors), 2), 'degrees.')
Mean Absolute Error: 3.83 degrees.

我们的平均估计相差3.83度。这比基准平均提高了1度以上。尽管这看起来似乎并不重要,但它比基准高出近25%,根据领域和问题的不同,基准可能会给公司带来数百万美元的收入。

9. 确定性能指标

为了正确理解我们的预测,我们可以使用从100%中减去的平均百分比误差来计算准确性。

# Calculate mean absolute percentage error (MAPE)
mape = 100 * (errors / test_labels)
# Calculate and display accuracy
accuracy = 100 - np.mean(mape)
print('Accuracy:', round(accuracy, 2), '%.')
Accuracy: 93.99 %.

看起来不错!我们的模型学习了如何以94%的准确度预测西雅图第二天的最高温度。

10. 必要时改进模型

在通常的机器学习工作流程中,这将是在开始超参数调整时。这是一个复杂的短语,意为“调整设置以提高性能”(这些设置称为超参数,可将其与训练期间学习的模型参数区分开)。最常见的方法是简单地制作一堆具有不同设置的模型,在相同的验证集上对它们进行评估,然后看看哪个模型效果最好。当然,这将是手工完成的繁琐过程,并且在Skicit-learn中有自动方法可以完成此过程。与基于理论的调优相比,超参数调优通常更具工程性,我鼓励任何有兴趣的人查看文档开始玩吧!94%的精度对于此问题是令人满意的,但请记住,第一个构建的模型几乎永远不会成为可投入生产的模型。

11. 解释模型并报告结果

在这一点上,我们知道我们的模型是好的,但是它几乎是一个黑匣子。我们输入一些Numpy数组进行训练,要求它做出预测,评估这些预测,并确定它们是合理的。问题是:此模型如何得出值?有两种方法可以获取随机森林的内幕:首先,我们可以查看森林中的一棵树,其次,我们可以查看解释变量的特征重要性。

12. 可视化单个决策树

Skicit-learn中Random Forest实现最酷的部分之一是,我们实际上可以检查森林中的任何一颗决策树。我们将选择一棵树,并将整棵树保存为图像。

# Import tools needed for visualization
from sklearn.tree import export_graphviz
import pydot
# Pull out one tree from the forest
tree = rf.estimators_[5]
# Import tools needed for visualization
from sklearn.tree import export_graphviz
import pydot
# Pull out one tree from the forest
tree = rf.estimators_[5]
# Export the image to a dot file
export_graphviz(tree, out_file = 'tree.dot', feature_names = feature_list, rounded = True, precision = 1)
# Use dot file to create a graph
(graph, ) = pydot.graph_from_dot_file('tree.dot')
# Write graph to a png file
graph.write_png('tree.png')

12.1 森林中的单个完整决策树

哇!这看起来像是一棵有15层的膨胀树(实际上,与我见过的一些树相比,这是一棵很小的树)。您可以自己下载此图像并进行更详细的检查,但是为了使操作更容易,我将限制森林中树木的深度以生成可理解的图像。

# Limit depth of tree to 3 levels
rf_small = RandomForestRegressor(n_estimators=10, max_depth = 3)
rf_small.fit(train_features, train_labels)
# Extract the small tree
tree_small = rf_small.estimators_[5]
# Save the tree as a png image
export_graphviz(tree_small, out_file = 'small_tree.dot', feature_names = feature_list, rounded = True, precision = 1)
(graph, ) = pydot.graph_from_dot_file('small_tree.dot')
graph.write_png('small_tree.png')

1

这是带有标签注释的尺寸缩小的树

1

仅基于此树,我们就可以对任何新数据点进行预测。让我们以对2017年12月27日星期三进行预测为例。(实际)变量为:temp_2 = 39, temp_1 = 35, average = 44, friend = 30。我们从根节点开始,第一个答案为真,因为temp_1≤59.5。我们向左移动并遇到第二个问题,当平均≤46.8时也为True。向下移动到第三个也是最后一个也是True的问题,因为temp_1≤44.5。因此,我们得出结论,如叶节点中的值所示,我们对最高温度的估计为41.0度。有趣的观察是,尽管有261个训练数据点,但在根节点中只有162个样本。(创建森林时,我们可以通过设置bootstrap = False来关闭替换采样并使用所有数据点)。数据点的随机采样,再结合在树的每个节点上对特征子集的随机采样,是将模型称为“随机”森林的原因。

此外,请注意,在我们的树中,实际上只有2个变量可用于进行预测!根据此特定决策树,其余特征对于进行预测并不重要。一年中的月份、月中的某天、以及我们朋友的预测对于明天预测最高气温完全没有用!根据我们的简单树,唯一重要的信息是:1天前的温度和历史平均值。可视化树增加了我们对该问题的领域知识,并且现在我们知道如果要求我们进行预测将查找哪些数据!

13. 特征重要性

为了量化整个随机森林中所有变量的有用性,我们可以查看变量的相对重要性。
Skicit-learn中返回的重要性表示包含特定变量在多大程度上可以改善预测结果。重要性的实际计算超出了本文的范围,但是我们可以使用数字在变量之间进行相对比较。
此处的代码利用了Python语言中的许多技巧,即列表综合,zip,排序和参数解压缩。暂时了解这些并不是很重要,但是如果您想熟练使用Python,那么这些都是您应该拥有的工具!

# Get numerical feature importances
importances = list(rf.feature_importances_)
# List of tuples with variable and importance
feature_importances = [(feature, round(importance, 2)) for feature, importance in zip(feature_list, importances)]
# Sort the feature importances by most important first
feature_importances = sorted(feature_importances, key = lambda x: x[1], reverse = True)
# Print out the feature and importances
[print('Variable: {:20} Importance: {}'.format(*pair)) for pair in feature_importances];
Variable: temp_1               Importance: 0.7
Variable: average              Importance: 0.19
Variable: day                  Importance: 0.03
Variable: temp_2               Importance: 0.02
Variable: friend               Importance: 0.02
Variable: month                Importance: 0.01
Variable: year                 Importance: 0.0
Variable: week_Fri             Importance: 0.0
Variable: week_Mon             Importance: 0.0
Variable: week_Sat             Importance: 0.0
Variable: week_Sun             Importance: 0.0
Variable: week_Thurs           Importance: 0.0
Variable: week_Tues            Importance: 0.0
Variable: week_Wed             Importance: 0.0

列表的顶部是temp_1,即前一天的最高温度。这告诉我们一天最高温度的最佳预测指标是前一天的最高温度,这是一个相当直观的发现。第二个最重要的因素是历史平均最高温度,也就不足为奇了。事实证明,您的朋友以及前两天的星期几,年,月和温度不是很有帮助。这些重要性都是有道理的,因为我们不希望一周中的某天成为最高气温的预测指标,因为它与天气无关。此外,所有数据点的年份都相同,因此没有为我们提供预测最高温度的信息。

在模型的未来实现中,我们可以删除那些不重要的变量,并且性能不会受到影响。另外,如果我们使用不同的模型(例如支持向量机),则可以将随机森林特征重要性用作一种特征选择方法。让我们快速创建一个仅包含两个最重要变量的随机森林,即前1天的最高温度和历史平均值,并查看性能之间的比较。

# New random forest with only the two most important variables
rf_most_important = RandomForestRegressor(n_estimators= 1000, random_state=42)
# Extract the two most important features
important_indices = [feature_list.index('temp_1'), feature_list.index('average')]
train_important = train_features[:, important_indices]
test_important = test_features[:, important_indices]
# Train the random forest
rf_most_important.fit(train_important, train_labels)
# Make predictions and determine the error
predictions = rf_most_important.predict(test_important)
errors = abs(predictions - test_labels)
# Display the performance metrics
print('Mean Absolute Error:', round(np.mean(errors), 2), 'degrees.')
mape = np.mean(100 * (errors / test_labels))
accuracy = 100 - mape
print('Accuracy:', round(accuracy, 2), '%.')
Mean Absolute Error: 3.9 degrees.
Accuracy: 93.8 %.

这告诉我们,实际上我们不需要收集到的所有数据来进行准确的预测!如果要继续使用此模型,我们只能收集两个变量并获得几乎相同的性能。在生产环境中,我们需要权衡准确性下降与获取更多信息所需的额外时间。知道如何在性能和成本之间找到合适的平衡是机器学习工程师的一项基本技能,并且最终将取决于问题!
至此,我们已经涵盖了关于监督回归问题的随机森林的基本实现的几乎所有知识。我们可以放心,我们的模型可以根据一年的历史数据以94%的准确度预测明天的最高温度。从这里开始,可以随意使用该示例,或者在您选择的数据集上使用该模型。我将通过一些可视化来结束这篇文章。数据科学中我最喜欢的两个部分是图形绘制和建模,因此我自然必须绘制一些图表!图表除了令人赏心悦目之外,还可以帮助我们诊断模型,因为它们将大量数字压缩成可以快速检查的图像。
可视化
我将制作的第一个图表是功能重要性的简单条形图,以说明变量相对重要性的差异。使用Python进行绘图是一种非直觉的工作,当我制作图形时,我最终要在Stack Overflow上查找几乎所有内容。不用担心这里的代码不太有意义,有时不必完全了解代码即可获得所需的最终结果!

# Import matplotlib for plotting and use magic command for Jupyter Notebooks
import matplotlib.pyplot as plt
%matplotlib inline
# Set the style
plt.style.use('fivethirtyeight')
# list of x locations for plotting
x_values = list(range(len(importances)))
# Make a bar chart
plt.bar(x_values, importances, orientation = 'vertical')
# Tick labels for x axis
plt.xticks(x_values, feature_list, rotation='vertical')
# Axis labels and title
plt.ylabel('Importance'); plt.xlabel('Variable'); plt.title('Variable Importances')

1

接下来,我们可以绘制突出显示预测的整个数据集。这需要一点数据操作,但是并不太困难。我们可以使用该图来确定数据或我们的预测中是否存在异常值。

# Use datetime for creating date objects for plotting
import datetime
# Dates of training values
months = features[:, feature_list.index('month')]
days = features[:, feature_list.index('day')]
years = features[:, feature_list.index('year')]
# List and then convert to datetime object
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]
# Dataframe with true values and dates
true_data = pd.DataFrame(data = {'date': dates, 'actual': labels})
# Dates of predictions
months = test_features[:, feature_list.index('month')]
days = test_features[:, feature_list.index('day')]
years = test_features[:, feature_list.index('year')]
# Column of dates
test_dates = [str(int(year)) + '-' + str(int(month)) + '-' + str(int(day)) for year, month, day in zip(years, months, days)]
# Convert to datetime objects
test_dates = [datetime.datetime.strptime(date, '%Y-%m-%d') for date in test_dates]
# Dataframe with predictions and dates
predictions_data = pd.DataFrame(data = {'date': test_dates, 'prediction': predictions})
# Plot the actual values
plt.plot(true_data['date'], true_data['actual'], 'b-', label = 'actual')
# Plot the predicted values
plt.plot(predictions_data['date'], predictions_data['prediction'], 'ro', label = 'prediction')
plt.xticks(rotation = '60');
plt.legend()
# Graph labels
plt.xlabel('Date'); plt.ylabel('Maximum Temperature (F)'); plt.title('Actual and Predicted Values');

1

做一点点漂亮的图形工作!看起来我们似乎没有任何需要纠正的异常值。为了进一步诊断模型,我们可以绘制残差(误差)以查看我们的模型是否倾向于过度预测或预测不足,还可以查看残差是否为正态分布。但是,我将制作一张最终图表,显示实际值,前一天的温度,历史平均值以及我们朋友的预测。这将使我们看到有用变量和不是那么有用的变量之间的区别

# Make the data accessible for plotting
true_data['temp_1'] = features[:, feature_list.index('temp_1')]
true_data['average'] = features[:, feature_list.index('average')]
true_data['friend'] = features[:, feature_list.index('friend')]
# Plot all the data as lines
plt.plot(true_data['date'], true_data['actual'], 'b-', label  = 'actual', alpha = 1.0)
plt.plot(true_data['date'], true_data['temp_1'], 'y-', label  = 'temp_1', alpha = 1.0)
plt.plot(true_data['date'], true_data['average'], 'k-', label = 'average', alpha = 0.8)
plt.plot(true_data['date'], true_data['friend'], 'r-', label = 'friend', alpha = 0.3)
# Formatting plot
plt.legend(); plt.xticks(rotation = '60');
# Lables and title
plt.xlabel('Date'); plt.ylabel('Maximum Temperature (F)'); plt.title('Actual Max Temp and Variables')

1

找出所有界线有点困难,但是我们可以看到为什么前一天的最高温度和历史最高温度对预测最高温度有用,而我们的朋友却没有(不要放弃,但也许也不要对他们的估算值施加太大的压力!)。这样的图形通常有助于提前制作,因此我们可以选择要包含的变量,但是它们也可以用于诊断。就像在Anscombe的四重奏中一样,图形通常比定量数字更具启发性,并且应该成为任何机器学习工作流程的一部分。
结论
借助这些图形,我们完成了一个完整的端到端机器学习示例!在这一点上,如果要改进模型,可以尝试使用不同的超参数(设置)尝试使用不同的算法,或者最好的方法是收集更多数据!任何模型的性能都与可以从中学习的有效数据量成正比,而我们使用的信息量非常有限。我鼓励任何人尝试并改进此模型并分享结果。在这里,您可以使用大量的在线(免费)资源来深入研究随机森林理论和应用。对于那些希望一本书涵盖机器学习模型的理论和Python实现的人,我强烈建议使用Scikit-Learn和Tensorflow进行动手机器学习。此外,我希望所有通过学习的人都可以看到机器学习的普及程度.

随机森林 python_如何轻松使用python的随机森林相关推荐

  1. 随机森林python_实战:用Python实现随机森林

    摘要: 随机森林如何实现?为什么要用随机森林?看这篇足够了! 因为有Scikit-Learn这样的库,现在用Python实现任何机器学习算法都非常容易.实际上,我们现在不需要任何潜在的知识来了解模型如 ...

  2. python随机生成中文字符串_用Python生成随机UTF-8字符串

    下面是一个示例函数,它可能创建一个随机的格式良好的UTF-8序列,如Unicode 5.0.0的表3-7所定义:#!/usr/bin/env python3.1 # From Table 3–7 of ...

  3. 数学建模_随机森林分类模型详解Python代码

    数学建模_随机森林分类模型详解Python代码 随机森林需要调整的参数有: (1) 决策树的个数 (2) 特征属性的个数 (3) 递归次数(即决策树的深度)''' from numpy import ...

  4. [python]利用随机api二次元图片

    [python]利用随机api二次元图片 文章目录 [python]利用随机api二次元图片 爬取准备 观察网址 补充: 请求头 程序编写 小福利 爬取准备 开发环境:chrome .vscode 所 ...

  5. python三维随机游走轨迹模拟_用Python模拟随机游走(Random walks)

    什么是随机游走? 随机游走(random walk)也称随机漫步,随机行走等,是以随机的体例采纳连续步调的过程.然后,可以将其他条件应用于此描述,以为您的特定用例建立一个随机遍历.粒子的布朗运动,股票 ...

  6. gbdt 算法比随机森林容易_用Python实现随机森林算法

    CDA数据分析师 出品 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.bagging(bootstrap aggregating 的缩写)算法从训练数据 ...

  7. Python中随机森林的实现与解释

    使用像Scikit-Learn这样的库,现在很容易在Python中实现数百种机器学习算法.这很容易,我们通常不需要任何关于模型如何工作的潜在知识来使用它.虽然不需要了解所有细节,但了解机器学习模型是如 ...

  8. 基于python的随机森林回归实现_python实现随机森林

    定义: 随机森林指的是利用多棵决策树对样本进行训练并预测的一种分类器.可回归可分类. 所以随机森林是基于多颗决策树的一种集成学习算法,常见的决策树算法主要有以下几种: 1. ID3:使用信息增益g(D ...

  9. 随机森林python实例_用Python实现随机森林算法的示例

    这篇文章主要介绍了用Python实现随机森林算法,小编觉得挺不错的,现在分享给大家,也给大家做个参考. 拥有高方差使得决策树(secision tress)在处理特定训练数据集时其结果显得相对脆弱.b ...

最新文章

  1. Vue 中的 v-cloak 作用及用法-vue页面加载时会闪烁
  2. ddr4服务器内存频率_金士顿DDR4-3200服务器内存通过完整测试
  3. mysql触发器调用存储过程出错_mysql 触发器中调用存储过程
  4. Solr基础,在Eclipse中运行Solr
  5. 利用docker-machine安装swarm
  6. 51Nod - 1051(思维)
  7. 谁手握账本?趣讲 ZK 的内存模型
  8. BarcodeX(ActiveX打印控件) v5.3.0.80 免费版使用
  9. Javascript使用模板字符串,find,findIndex,some,every查找数据以及map,filter过滤数据,reduce求和或平均值
  10. Mac怎么读写NTFS格式?Mac电脑重新安装NTFS卷
  11. ElementUI 中 栅格布局 混乱问题
  12. Linux安全原理简介
  13. (Node+Vue+微信公众号开发)企业级产品全栈开发速成周末班
  14. JS获取当日起止时间时间戳
  15. C++中表示正无穷与负无穷
  16. 阿里云轻量应用服务器从购买到Web环境搭建
  17. 一行代码实现shell if else逻辑
  18. 实实在在,伴您同行丨实在“华夏行”第四站成渝站圆满举办!
  19. CAPEX/OPEX概念解释
  20. 智障的wordpress更换主题之旅

热门文章

  1. SAP API开发方法大全
  2. 如何创建HTML Mashup并插入到SAP Cloud for Customer标准页面里
  3. CL_FXS_URL_DATA_FETCHER - a good utility to fetch picture binary data according to url
  4. how is json model initialized with json data
  5. UI5 EventBus
  6. smart filter无法从smart business应用获得值的问题分析
  7. 一个Google Chrome浏览器的英文字典扩展应用
  8. 如何用ABAP读取LRAW中的数据
  9. different behavior in AG3 and P8I about Territory management - popup window display
  10. local class cannot see outer class defined type, even if it is public