首頁 >後端開發 >Python教學 >Python中的時間序列分類實例

Python中的時間序列分類實例

WBOY
WBOY原創
2023-06-10 11:58:441966瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn