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

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

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

n_cluster = range(1, 20)

kmeans = [KMeans(n_clusters=i).fit(data) fori inn_cluster]

scores = [kmeans[i].score(data) fori inrange(len(kmeans))]

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

ax.plot(n_cluster, scores)

plt.xlabel('Number of Clusters')

plt.ylabel('Score')

plt.title('Elbow Curve')

plt.show();

从上面的肘曲线我们看到,图形在聚类数目为10之后趋于平稳,这意味着添加更多聚类并不能解释我们相关变量中的更多方差。

我们设置n_clusters = 10,并将k-means的输出数据绘制成3D聚类图。

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

X = X.reset_index(drop=True)

km = KMeans(n_clusters=10)

km.fit(X)

km.predict(X)

labels = km.labels_

#Plotting

fig = plt.figure(1, figsize=(7,7))

ax = Axes3D(fig, rect=[0, 0, 0.95, 1], elev=48, azim=134)

ax.scatter(X.iloc[:,0], X.iloc[:,1], X.iloc[:,2],

c=labels.astype(np.float), edgecolor="k")

ax.set_xlabel("price_usd")

ax.set_ylabel("srch_booking_window")

ax.set_zlabel("srch_saturday_night_bool")

plt.title("K Means", fontsize=14);

现在我们需要用PCA(Principal component analysis,主成分分析)算法确定保留多少个特征是最合适的。

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

X = data.values

X_std = StandardScaler().fit_transform(X)

mean_vec = np.mean(X_std, axis=0)

cov_mat = np.cov(X_std.T)

eig_vals, eig_vecs = np.linalg.eig(cov_mat)

eig_pairs = [ (np.abs(eig_vals[i]),eig_vecs[:,i]) fori inrange(len(eig_vals))]

eig_pairs.sort(key = lambdax: x[0], reverse= True)

tot = sum(eig_vals)

var_exp = [(i/tot)*100fori insorted(eig_vals, reverse=True)] # Individual explained variance

cum_var_exp = np.cumsum(var_exp) # Cumulative explained variance

plt.figure(figsize=(10, 5))

plt.bar(range(len(var_exp)), var_exp, alpha=0.3, align='center', label='individual explained variance', color = 'g')

plt.step(range(len(cum_var_exp)), cum_var_exp, where='mid',label='cumulative explained variance')

plt.ylabel('Explained variance ratio')

plt.xlabel('Principal components')

plt.legend(loc='best')

我们看到第一个成分price_usd解释了近50%的差异,第二个成分srch_booking_window解释了超过30%。但同时我们也必须注意到,几乎没有任何成分可以忽略不计。由于前两个成分包含80%以上的信息,所以我们将设置n_components = 2。

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

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

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

新闻热点
精选美图


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