如何自己创建机器学习模型,机器学习的一般过程建立一个模型

首页 > 经验 > 作者:YD1662022-10-30 05:35:47


作者:Eryk Lewinson 翻译:张睿毅校对:张睿毅 本文约4200字,建议阅读10分钟本文我们主要使用非常知名的Python包,以及依赖于一个相对不为人知的scikit-lego包。

标签:数据帧, 精选, 机器学习, Python, 技术演练

如何自己创建机器学习模型,机器学习的一般过程建立一个模型(1)

设置和数据

在本文中,我们主要使用非常知名的Python包,以及依赖于一个相对不为人知的scikit-lego包,这是一个包含许多有用功能的库,这些功能正在扩展scikit-learn的功能。我们导入所需的库,如下所示:

import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from datetime import date from sklearn.linear_model import LinearRegression from sklearn.preprocessing import FunctionTransformer from sklearn.metrics import mean_absolute_error from sklego.preprocessing import RepeatingBasisFunction

为了简单起见,我们使用自生成数据。在此示例中,我们使用人工时间序列。我们首先创建一个空的数据帧,其索引跨越四个日历年(我们使用pd.date_range)。然后,我们创建两列:

最后,我们必须创建时间序列本身。为此,我们将两条变换的正弦曲线和一些随机噪声结合起来。用于生成数据的代码基于scikit-lego文档中包含的代码。

# 避免重复 np.random.seed(42) # 生成日期的数据格式 range_of_dates = pd.date_range(start="2017-01-01", End="2020-12-30") X = pd.DataFrame(index=range_of_dates) # 创建日期数据的序列 X["day_nr"] = range(len(X)) X["day_of_year"] = X.index.day_of_year # 生成目标成分 signal_1 = 3 4 * np.sin(X["day_nr"] / 365 * 2 * np.pi) signal_2 = 3 * np.sin(X["day_nr"] / 365 * 4 * np.pi 365/2) noise = np.random.normal(0, 0.85, len(X)) # 合并获取目标序列 y = signal_1 signal_2 noise # 画图 y.plot(figsize=(16,4), title="Generated time series");

如何自己创建机器学习模型,机器学习的一般过程建立一个模型(2)

图 1:生成的时间序列。

然后,我们创建一个新的 DataFrame,在其中存储生成的时间序列。此数据帧将用于比较使用不同特征工程方法的模型性能。

results_df = y.to_frame() results_df.columns = ["actuals "]创建与时间相关的要素

在本节中,我们将介绍生成时间相关特征的三种老练方法。

在我们深入研究之前,我们应该定义一个评估框架。我们的模拟数据包含四年的观察结果。我们将使用生成的前 3 年的数据作为训练集,并将在第4年进行评估。我们将使用平均绝对误差 (MAE) 作为评估指标。

下面我们定义一个变量,该变量将用于分割两个集合:

TRAIN_END = 3 * 365方法1:虚拟变量

我们从您很可能已经熟悉的东西开始,至少在某种程度上是这样。对时间相关信息进行编码的最简单方法是使用虚拟变量(也称为单热编码)。

如何自己创建机器学习模型,机器学习的一般过程建立一个模型(3)

让我们看一个示例。

X_1 = pd.DataFrame( data=pd.get_dummies(X.index.month, drop_first=True, prefix="month") )

在下面,您可以看到我们操作的输出。

如何自己创建机器学习模型,机器学习的一般过程建立一个模型(4)

首页 1234下一页

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.