基于随机森林的时间序列异常检测的python代码
时间: 2023-12-29 19:03:01 浏览: 111
随机森林的python代码
好的,以下是一个基于随机森林的时间序列异常检测的Python代码示例,希望能对您有所帮助:
```python
import pandas as pd
import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
# 数据预处理
data = pd.read_csv('data.csv', header=0)
data['timestamp'] = pd.to_datetime(data['timestamp'])
data = data.set_index('timestamp')
data = data.resample('H').mean().interpolate()
# 特征工程
data['lag1'] = data['value'].shift(1)
data['lag2'] = data['value'].shift(2)
data['lag3'] = data['value'].shift(3)
data['rolling_mean'] = data['value'].rolling(window=3).mean()
data['rolling_std'] = data['value'].rolling(window=3).std()
# 将数据集分为训练集和测试集
train_size = int(len(data) * 0.7)
train, test = data[0:train_size], data[train_size:len(data)]
# 定义随机森林模型
model = RandomForestRegressor(n_estimators=1000, random_state=42)
# 拟合模型并进行预测
model.fit(train[['lag1', 'lag2', 'lag3', 'rolling_mean', 'rolling_std']], train['value'])
predictions = model.predict(test[['lag1', 'lag2', 'lag3', 'rolling_mean', 'rolling_std']])
# 计算均方误差
mse = mean_squared_error(test['value'], predictions)
print('Mean Squared Error: ', mse)
# 检测异常值
threshold = np.mean(mse) + 3 * np.std(mse)
anomalies = []
for i in range(len(predictions)):
if predictions[i] > threshold:
anomalies.append(i)
print('Anomalies: ', anomalies)
```
这个示例中,我们首先进行了数据预处理,然后进行了特征工程。接下来,我们将数据集分为训练集和测试集,定义了一个随机森林模型并进行了拟合和预测。最后,我们计算了均方误差并根据阈值检测了异常值。
请注意,这只是一个简单的示例代码,实际应用可能需要更多的特征工程和模型调整。
阅读全文