首页 > 新闻中心 > 掌酷科技 > 数码 > 笔记本 >

基于机器学习算法的时间序列价格异常检测(附(5)
2019-02-08 17:33 量化投资与机器学习

孤立森林算法来检测异常纯粹是基于一个事实:异常点是少数的和不同的。该算法在不采用任何距离或密度测量的情况下实现异常点隔离,这与基于聚类的或基于距离的算法有根本的不同。

在应用孤立森林模型时,我们设置contamination = outliers_fraction,即告诉模型数据集中的异常值比例为0.01。 fit和predict(data)对数据执行异常检测,返回1表示正常,-1表示异常。 最后,我们使用时间序列视图可视化异常点。

data = df[['price_usd', 'srch_booking_window', 'srch_saturday_night_bool']]

scaler = StandardScaler()

np_scaled = scaler.fit_transform(data)

data = pd.DataFrame(np_scaled)

# train isolation forest

model = IsolationForest(contamination=outliers_fraction)

model.fit(data)

df['anomaly2'] = pd.Series(model.predict(data))

# visualization

fig, ax = plt.subplots(figsize=(10,6))

a = df.loc[df['anomaly2'] == -1, ['date_time_int', 'price_usd']] #anomaly

ax.plot(df['date_time_int'], df['price_usd'], color='blue', label = 'Normal')

ax.scatter(a['date_time_int'],a['price_usd'], color='red', label = 'Anomaly')

plt.legend()

plt.show();

基于支持向量机算法的异常检测

SVM通常与监督学习相关联,但OneClassSVM可将异常检测问题看作无监督学习问题,其学习一个用于异常检测的决策函数:将新数据分类为与训练集相似或不同两类。

OneClassSVM

根据文章《Support Vector Method for Novelty Detection》(http://users.cecs.anu.edu.au/~williams/papers/P126.pdf),我们知道SVM是最大化几何边缘区的方法,而不是构建一个概率分布模型。SVM用于异常检测的思想在于寻找一个函数,使得其在高密度点区域取值为正在低密度点区域取值为负。

在拟合OneClassSVM模型时,我们设置nu = outliers_fraction,它是训练误差分数的上限和支持向量分数的下限,并且必须在0和1之间。基本上这恰好与我们期望的数据集中的异常值比例相符。 指定要在算法中使用的内核类型:rbf,这将使SVM能够使用非线性函数将超空间投影到更高的维度。 gamma是RBF核类型的参数,并控制各个训练样本的影响——这会影响模型的“平滑度”。通过实验,我没有发现任何显著差异。 predict(data) 对数据进行分类,因为我们的模型是单类模型,所以返回+1或-1,其中-1表示异常,1表示正常。

data = df[['price_usd', 'srch_booking_window', 'srch_saturday_night_bool']]

scaler = StandardScaler()

np_scaled = scaler.fit_transform(data)

data = pd.DataFrame(np_scaled)

标签: 数据 检测 算法 异常
0

上一篇:我为什么会买一款2300元的鼠标,这么贵的鼠标又
下一篇:没有了
官方微信公众号:掌酷门户(wapzknet)

首页 > 新闻中心 > 掌酷科技 > 数码 > 笔记本 >
相关资讯

新闻热点
精选美图


客户端合作免责友链
Copyright 2009-2019 冀ICP备09035849号-1
掌酷门户 版权所有 冀公网安备 13092302000152号