Python中的時間序列分類實例

WBOY
發布: 2023-06-10 11:58:44
原創
1857 人瀏覽過

Python是目前最受歡迎的程式語言之一,其強大而靈活的功能讓它成為資料科學和機器學習領域的首選語言。在數據分析中,時間序列是一個非常重要的概念,因為它可以用來描述以時間為序的數據,例如股票價格、天氣變化等。

在這篇文章中,我們將探討如何使用Python對時間序列資料進行分類。

  1. 資料準備

首先,我們需要準備用於分類的資料。在此範例中,我們將使用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)這些資訊。

  1. 特徵工程

在分類之前,我們需要先對資料進行預處理。其中一個步驟是特徵工程,我們需要從原始資料中提取新的特徵以提高模型的效能。

我們可以從時間序列中提取以下特徵:

  • 平均值
  • 方差
  • 最大值
  • ##最小值
  • 中間值
  • 標準差
我們可以使用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庫對資料進行預處理和特徵提取。

無論您是在股票價格預測、天氣變化預測或其他時間序列任務中工作,這些工具和技術都可以幫助您更好地進行資料分析和預測。

以上是Python中的時間序列分類實例的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!