scikit-learn机器学习分析股票板块数据(KMeans,PCA,参数选择)

scikit-learn机器学习分析股票板块数据(KMeans,PCA,参数选择),第1张

本文SPSSAU上的分析结果 

本文notebok下载

根据软件板块数据,考虑类别时可以使用kmeans等分类算法,而不考虑分类则可以使用pca类算法查看主要成分。本次项目涉及到下图中的两个板块,下次文章再去涉及下图其他两个板块。

PCA算法实践与主成分个数选择

主成分分析之前查看相关性,剔除相关性高的项,可以提高主成分分析有效性。本数据中多重共线性不严重,不用剔除数据。

数据应用于算法前先做缺失值和标准化处理。准备好pipeline:

将数据预处理pipeline应用于数据。为了选择出pca合适的主成分个数,通过循环和储存来记录主成分个数选择参数不同pca的方差解释率变化情况。如果用GridSearchCV需要自定义metrics,用make_scorer函数。

class_n=range(10)
explained=[]
explained_ratio=[]

x_std=numeric_pipeline.fit_transform(x)
for i in class_n:
    pca=PCA(i)
    x_copy=pca.fit_transform(x_std)
    explained.append(sum(pca.explained_variance_))
    explained_ratio.append(sum(pca.explained_variance_ratio_))

碎石图用于辅助判断主成分提取个数,当拆线由陡峭突然变得平稳时,陡峭到平稳对应的主成分个数即为参考提取主成分个数。碎石图仅辅助决策主成分个数,实际研究中更多以专业知识,结合主成分与研究项对应关系情况,综合权衡判断得出主成分个数。 

通过当期数据减前一期数据r-r.shift(1)得到解释率的变化量,充当起判断作用的“碎石图”。一般会选择方差解释率10%以上的主成分。所以据上图,本次主成分分析应该4个成分。

 与SPSSSAU结果对比,不相上下。不需要要求结果与spssau严格一致,spssau与spss结果也不一样。 下图是SPSSAU上的结果。

 

不过从图中可以看到,方差解释率变化平缓,这位主成分个数的选择带来一定困扰,这是因为本项目数据本身对做主成分分析不友好。之所以这样讲,是因为用SPSSAU软件先做主成分分析发现KMO值低于0.6,虽然Bartlett 球形度检验p值小于0.05,总之,数据不是适合主成分分析的。

 spssau还提供了载荷系数表格方便命名主成分和查看主成分提取了各个特征多少解释率。成份得分系数矩阵能用于权重计算。

kmeans算法实践与聚类个数选择的3种方法 聚类个数确定方法一:EIbow Method

思想:位于该类的数据点到该类中点的距离的SSE(sum of squared diatance)尽可能的小。

x_std=numeric_pipeline.fit_transform(x)

sse=[]
for i in range(1,10):
    classifier = KMeans(n_clusters=i)
    classifier.fit(x_std)
    sse.append(classifier.inertia_)
 

从上图可以看出,要想很明确指出该聚几个类是很困难的,这是主成分分析原因类似,这是数据本身不太适合聚类,类别特征不明显,目测3个类。

 聚类个数确定方法二:Silhouette Analysis

score在【-1,1】区间,越靠近1越好,越接近-1就越差,一般大于0.5为佳。下图显示该聚2个类,这和方法一中图片显示类似,都是比较模糊的。

  聚类个数确定方法三:用umap可视化聚类效果。

pip install umap-learn

为什么是umap?因为tSNE速度太慢了,它还有其他好处。umap自2018年发布以来,深受用户喜爱。

 

我们看到umap已经把数据可视化到2维平面了。接下来把我们聚类好的标签传给图片,就能看到聚类效果了。 

仍然是前面使用的KMeans模型 ,nc作为聚类个数参数,我们把labels和labels的count打印出来,如上图。接下来手动调节nc参数,查看聚类可视化效果,就可以选择合适的聚类个数了。

从umap可视化结果来看,选择聚类个数4比较合适。

所以很不幸,三种聚类个数选择方法得到结果为2,3,4,没有相同之处。 回顾第一张图,就是sklearn官方标志的那张。当kmeans not working的时候,就可以用spectral clustering或则GMM,pca同理,这一部分下一篇文章再写吧。

附录

pca

 注释掉的x_std放开后就是经过主成分分析后的数据做kmeans。我测试后发现和不做pca的数据会出来的图一模一样。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/916223.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存