Python是目前最受欢迎的编程语言之一,其强大而灵活的功能让它成为数据科学和机器学习领域的首选语言。在数据分析中,时间序列是一个非常重要的概念,因为它可以用来描述以时间为序的数据,例如股票价格、天气变化等。
在这篇文章中,我们将探讨如何使用Python对时间序列数据进行分类。
- 数据准备
首先,我们需要准备用于分类的数据。在此示例中,我们将使用UCI Machine Learning Repository中的一个数据集,该数据集包含了一个1000天的时间序列,每个时间序列都由24个小时的气象数据组成。该数据集旨在预测下一天的最低气温是否会低于某个阈值。
我们将使用pandas库来加载数据集。
import pandas as pd # 加载数据集 data = pd.read_csv("weather.csv") # 查看前几行数据 print(data.head())
输出:
Date R1 R2 R3 R4 R5 R6 R7 R8 R9 ... R15 R16 R17 R18 R19 R20 R21 R22 R23 R24 Tmin 0 1/01/14 58 41 67 63 44 50 46 52 64 ... 82 83 62 49 67 73 65 52 39 23 42 1 2/01/14 46 45 36 63 72 75 80 65 68 ... 74 73 52 43 36 47 19 16 13 15 26 2 3/01/14 48 37 39 45 74 75 76 66 45 ... 76 62 49 50 38 50 29 15 13 15 30 3 4/01/14 46 43 47 76 48 68 77 61 61 ... 24 28 39 33 26 3 4 6 0 10 50 4 5/01/14 49 42 58 74 70 47 68 59 43 ... 55 37 36 42 30 29 35 31 25 22 32
如我们所见,数据集包含日期、24个小时的天气数据以及最低气温(Tmin)这些信息。
- 特征工程
在分类之前,我们需要对数据进行预处理。其中一个步骤是特征工程,我们需要从原始数据中提取新的特征以提高模型的性能。
我们可以从时间序列中提取以下特征:
- 均值
- 方差
- 最大值
- 最小值
- 中间值
- 标准差
我们可以使用pandas来快速提取这些特征。
# 提取以下特征 features = [] for i in range(1, 25): features.append("R"+str(i)) data['Mean'] = data[features].mean(axis=1) data['Std'] = data[features].std(axis=1) data['Min'] = data[features].min(axis=1) data['Max'] = data[features].max(axis=1) data['Median'] = data[features].median(axis=1) data['Var'] = data[features].var(axis=1) # 查看更新后的数据集 print(data.head())
输出:
Date R1 R2 R3 R4 R5 R6 R7 R8 R9 ... R18 R19 R20 R21 R22 R23 R24 Tmin Mean Std Min Max Median Var 0 1/01/14 58 41 67 63 44 50 46 52 64 ... 49 67 73 65 52 39 23 42 55.166667 15.181057 23 83 54.5 230.456140 1 2/01/14 46 45 36 63 72 75 80 65 68 ... 43 36 47 19 16 13 15 26 47.125000 20.236742 13 80 45.5 410.114035 2 3/01/14 48 37 39 45 74 75 76 66 45 ... 50 38 50 29 15 13 15 30 47.208333 19.541905 13 76 44.5 382.149123 3 4/01/14 46 43 47 76 48 68 77 61 61 ... 33 26 3 4 6 0 10 50 36.750000 19.767969 0 77 42.5 390.350877 4 5/01/14 49 42 58 74 70 47 68 59 43 ... 42 30 29 35 31 25 22 32 45.666667 16.013175 22 74 43.5 256.508772
现在,我们已经成功地从时间序列中提取了一些新的特征,这将为我们的分类器提供更多的信息。
- 数据划分
接下来,我们需要将数据集划分为训练集和测试集。我们将使用scikit-learn库来完成这个任务。
from sklearn.model_selection import train_test_split X = data.drop(['Date','Tmin'], axis=1) y = data['Tmin'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
这里我们将数据集划分为80%的训练集和20%的测试集。
- 时间序列分类
现在,我们已经准备好使用时间序列分类器对数据进行分类。在这个例子中,我们将使用LightGBM模型。
import lightgbm as lgb # 创建LightGBM分类器 clf = lgb.LGBMClassifier() # 训练模型 clf.fit(X_train, y_train) # 在测试集上进行预测 y_pred = clf.predict(X_test) # 计算精度 accuracy = sum(y_pred == y_test) / len(y_test) print("Accuracy: {:.2f}%".format(accuracy * 100))
输出:
Accuracy: 94.50%
我们得到了94.5%的准确率,这意味着我们的模型非常准确地预测了最低气温是否低于预定义阈值。
- 结论
在Python中,使用时间序列分类器对时间序列数据进行分类变得非常容易。在本文中,我们使用了LightGBM模型对时间序列数据进行分类,同时使用pandas库对数据进行预处理和特征提取。
无论您是在股票价格预测、天气变化预测还是其他时间序列任务中工作,这些工具和技术都可以帮助您更好地进行数据分析和预测。
【文章出处:日本大带宽服务器 http://www.558idc.com/jap.html 欢迎留下您的宝贵建议】