大家好,本文将介绍如何通过机器学习中的随机森林回归算法来分析和预测黄金的即将到来的价格。听起来很有趣吧?那就开始吧。
随机森林回归算法是一种监督学习算法,它使用集成学习方法进行回归。在训练期间构建多个决策树,并输出所有树的类别均值作为预测结果。
既然已经知道了将要使用的工具,那就不再拖延,让开始项目吧。如果觉得这篇文章变得单调,也可以参考下面的视频。它详细地讲述了本文中的所有内容,并且可以帮助清晰地理解机器学习模型的基础知识,即使是编程新手。
建议是,将这篇文章和视频作为互补的资料,两者都参考,以便有一个清晰的概念。
为了更好地理解将在项目中做什么,让参考工作流程来了解计划。
数据集,顾名思义,是数据的集合。在机器学习项目中,总是需要一个数据集。首先,需要训练数据集来训练模型,帮助它进行预测。然后,使用测试数据集来预测并检查模型的准确性。
在这个项目中,使用了Kaggle上可用的数据集。可以从各种网站下载。(注意,数据集越大,模型训练所需的时间就越长。作为一个初学者友好的建议,会告诉选择一个中等大小的数据集,不要有太多的值,首先理解其工作原理。)
由于将在本项目中使用Python,还需要一个适合代码运行的环境。可以使用任何喜欢的环境(例如Pycharm、VS Code、Sublime等)。在情况下,使用了Google Colab,因为它消除了在计算机本身编译的繁琐过程,任何类型的代码都可以很容易地运行。使用Google Colab所需的只是稳定的互联网连接。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn import metrics
首先,需要导入将在程序的下一部分中使用的必要依赖。在这个项目中,将使用numpy、pandas、matplotlib和sklearn。
下载数据集后,需要将下载的数据集输入程序,以便代码可以读取数据并使用它执行必要的操作。由于下载的数据文件是CSV文件格式,将需要pandas模块。它有一个方法read.csv()来读取CSV文件。
gold_data = pd.read_csv('gld_price_data.csv')
print(gold_data.head())
列值(SPX、USO等)的含义可以在下载数据集的网站找到。
在Kaggle下载数据集时看到,数据集有2290行和6列。现在,让检查表中有多少个单元格是空的,以获得更好的洞察力:
gold_data.isnull().sum()
X = gold_data.drop(['Date','GLD'],axis=1) Y = gold_data['GLD']
由于没有空单元格,可以立即开始表格操作;
这里,X是特征变量,包含所有影响黄金价格的特征,如SPX、USO、SLV等,不包括GLD和Date列本身。
另一方面,Y是目标变量,因为想要确定的结果,即黄金的价格。(它只包含GLD列)
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size = 0.2, random_state=2)
现在,将数据分成四个变量,即X_train、Y_train、X_test、Y_test。
regressor = RandomForestRegressor(n_estimators=100)
regressor.fit(X_train,Y_train)
模型以这种方式训练:“当X的值是这些时,那么Y的值就是这个。”
现在让使用predict()方法预测X_test数据集的值。
test_data_prediction = regressor.predict(X_test)
计算预测值的R-Squared误差:
error_score = metrics.r2_score(Y_test, test_data_prediction)
print("R squared error : ", error_score)
输出结果是:“R squared error: 0.9887338861925125”,这是一个非常好的分数。
将Y_test的值转换为列表。
Y_test = list(Y_test)
现在,绘制实际价格与预测价格的图表,以了解预测与实际价格有多接近:
plt.plot(Y_test, color='blue', label = 'Actual Value')
plt.plot(test_data_prediction, color='green', label='Predicted Value')
plt.title('Actual Price vs Predicted Price')
plt.xlabel('Number of values')
plt.ylabel('GLD Price')
plt.legend()
plt.show()
结果出来了:
因此可以观察到,实际价格和预测价格几乎相同,因为两个图表相互重叠。因此,模型表现得非常好。恭喜。
正如在本项目中看到的,首先训练了一个机器学习模型,然后使用训练好的模型进行预测。同样,任何模型都可以通过输入一个非常大的数据集来变得更加精确,以获得非常准确的分数(但这将非常耗时)。对于初学者来说,觉得曾经使用的数据集是相当不错的。
感谢阅读……
如果喜欢这篇文章,请与朋友分享。