Stata与机器学习

您所在的位置:网站首页 stata简单回归案例 Stata与机器学习

Stata与机器学习

2023-05-01 08:38| 来源: 网络整理| 查看: 265

古语有云:物以类聚,人以群分。

KMeans是无监督机器学习中的聚类算法中最简单的一种——基于特征对样本进行归为不同的类,很好地阐述了‘物以类聚’这句话的精髓。

机器学习又叫统计学习。既然都统计了,所以当然包括了计量经济学。所以一般来说,机器学习的算法类型远多于计量经济学。比如线性回归,这个算是机器学习算法中比较基础的部分。当然,计量经济学在回归分析、因果推断方面的造诣,也是普通机器学算法所不能比的。两者有很多交叉的地方,也各有所长。

本文目录一、KMeans聚类分析算法原理二、KMeans Stata命令介绍三、Stata中的应用案例一:建模命令简单展示四、Stata中的应用案例二:建模+分析五、小结+Stata其它机器学习命令介绍一、KMeans聚类分析算法原理

关于K均值聚类算法的原理,本人也已经在另外一篇文章中进行详细说明(并使用Python进行建模),在此不再赘述。具体可以参考:

https://zhuanlan.zhihu.com/p/338057896二、KMeans Stata命令介绍

Stata中KMeans算法建模的完整命令是cluster kmeans,所以kmeans算是cluster的一个核心子命令;cluster的另外一个核心子命令是kmedians。

cluster means的完整语法: cluster kmeans [varlist] [if] [in] , k(#) [ options ]

参数说明:

Main 必填选项 # * k(#): perform cluster analysis resulting in # groups - 设定分类的簇(组)的个数。 # measure(measure): similarity or dissimilarity measure; default is L2 (Euclidean) - 距离的衡量方法,默认是L2欧式距离。 # name(clname): name of resulting cluster analysis - 聚类分析结果列的名称。

Options 可选选项 # start(start_option): obtain k initial group centers by using start_option - 用来获取初始的k个簇。默认是krandom,即随机抽取k个样本。 # keepcenters: append the k final group means or medians to the data - 把最后k个分组的均值或者中位数数据append到数据集。

Advanced 高级可选选项 # generate(groupvar): name of grouping variable - 分组变量的名称。 # iterate(#): maximum number of iterations; default is iterate(10000) - 最大迭代次数,默认是10000次。

三、Stata中的应用案例一:建模命令展示

本案例来自cluster kmeans的帮助文件。本案例的数据简单,直接展示了cluster kmeans的建模过程。更深入建模分析,请查看本文的案例二。

第1步,导入并探索数据

webuse labtech, clear //导入数据集 tab labtech, m //查看数据集所自带的标签? /* labtech | Freq. Percent Cum. ------------+----------------------------------- Al | 10 20.00 20.00 Bill | 10 20.00 40.00 Deb | 10 20.00 60.00 Jen | 10 20.00 80.00 Sam | 10 20.00 100.00 ------------+----------------------------------- Total | 50 100.00 */ //共5个分类,每个分类10个样本

第2步,使用kmeans命令建模,并查看结果

//内容较多,我们只展示部分命令的结果 cluster kmeans x1 x2 x3 x4, k(8) name(k8) //使用欧式距离,分成8组。新生成的分组变量叫k8 tab k8 labtech //查看分组结果

从结果中我们可以看出,除了第五组Sam分组全部分到了第2组之外,其它样本的分组都比较零散。

下面我们查看下分为5主要的分组结果:

cluster kmeans x1 x2 x3 x4, k(5) name(k5) tab k5 labtech

结果稍微比分为8组好些。但是整体效果仍然一般。结果不好也可能是数据本身的问题。

第3步,调节参数,探索其它模型

其它建模参数的调整读者可以自行探索,完整的do命令如下:

webuse labtech, clear tab labtech, m /* labtech | Freq. Percent Cum. ------------+----------------------------------- Al | 10 20.00 20.00 Bill | 10 20.00 40.00 Deb | 10 20.00 60.00 Jen | 10 20.00 80.00 Sam | 10 20.00 100.00 ------------+----------------------------------- Total | 50 100.00 */ encode labtech, gen(labid) label list labid /*labid: 1 Al 2 Bill 3 Deb 4 Jen 5 Sam */ gen id=_n scatter x1 x2 x3 x4 id scatter x1 x2 id scatter x1 x3 id cluster kmeans x1 x2 x3 x4, k(8) name(k8) tab k8 labtech cluster kmeans x1 x2 x3 x4, k(8) measure(L1) name(k8abs) tab k8abs labtech cluster kmedians x1 x2 x3 x4, k(6) measure(Canberra) name(k6) tab k6 labtech cluster kmedians x1 x2 x3 x4, k(6) start(firstk) name(k6f) tab k6f labtech cluster kmedians x1 x2 x3 x4, k(6) start(firstk, exclude) name(k6fe) tab k6fe labtech cluster kmeans x1 x2 x3 x4, k(5) name(k5) tab k5 labtech cluster kmeans x1 x2 x3 x4, k(5) name(k5l1) measure(L1) tab k5l1 labtech cluster kmeans x1 x2 x3 x4, k(4) name(k4) tab k4 labtech cluster kmeans x1 x2 x3 x4, k(3) name(k3) tab k3 labtech四、KMeans Stata命令介绍:建模+分析

第二个案例数据来自Stata官网。该数据是关于体育课上对80个学生身体指标的测量,包括flexibility、speed和strength 三个指标。现在,需要利用这三个指标,对学生进行分组,后制定针对性的体育锻炼方案,提高学生们的身体素质。

第1步,导入并查看数据

. use http://www.stata-press.com/data/r13/physed.dta, clear . des //查看数据的大致情况 Contains data from http://www.stata-press.com/data/r13/physed.dta obs: 80 vars: 4 6 Jan 2013 11:06 --------------------------------------------------------------------------------- storage display value variable name type format label variable label --------------------------------------------------------------------------------- grp byte %8.0g flexibility float %9.0g speed float %9.0g strength float %9.0g --------------------------------------------------------------------------------- Sorted by: . summarize flex speed strength //查看关键的三个指标的平均水平。后面分组参考 Variable | Obs Mean Std. Dev. Min Max -------------+--------------------------------------------------------- flexibility | 80 4.402625 2.788541 .03 9.97 speed | 80 3.875875 3.121665 .03 9.79 strength | 80 6.439875 2.449293 .05 9.57

从以上结果我们可以看到,柔韧性指标的平均得分大概是4.4;速度是3.9;力量是6.4。

第2步,画图探索数据

*两两的散点图矩阵 . graph matrix flex speed strength

得到散点图矩阵如下:

graph matrix flex speed strength

从上图可以看出,某些点的分布有明显的扎堆现象,组间有明显的区别。根据直觉(瞎猜的)或者经验,决定将分类的组别(KMeans的K)定为4。

第3步,用cluster kmeans建模,并用cluster list命令查看建模结果。

. cluster k flex speed strength, k(4) name(k4) s(kr(1898)) . cluster list k4 k4 (type: partition, method: kmeans, dissimilarity: L2) vars: k4 (group variable) other: cmd: cluster kmeans flex speed strength, k(4) name(k4) s(kr(1898)) varlist: flexibility speed strength k: 4 start: krandom(1898) range: 0 . . tab k4 //查看4个分组的数量 k4 | Freq. Percent Cum. ------------+----------------------------------- 1 | 35 43.75 43.75 2 | 15 18.75 62.50 3 | 10 12.50 75.00 4 | 20 25.00 100.00 ------------+----------------------------------- Total | 80 100.00 *查看各种的统计指标 . tabstat flex speed strength, by(k4) stat(N min mean max) Summary statistics: N, min, mean, max by categories of: k4 k4 | flexib~y speed strength ---------+------------------------------ 1 | 35 35 35 | .03 .03 7.38 | 1.969429 1.144857 8.478857 | 3.48 2.17 9.57 ---------+------------------------------ 2 | 15 15 15 | 8.12 8.05 3.61 | 8.852 8.743333 4.358 | 9.97 9.79 5.42 ---------+------------------------------ 3 | 10 10 10 | 2.29 5.11 .05 | 3.157 6.988 1.641 | 3.99 8.87 3.02 ---------+------------------------------ 4 | 20 20 20 | 4.32 1.05 5.46 | 5.9465 3.4485 6.8325 | 7.89 5.32 7.66 ---------+------------------------------ Total | 80 80 80 | .03 .03 .05 | 4.402625 3.875875 6.439875 | 9.97 9.79 9.57 ----------------------------------------

和之前的数据(柔韧性指标的平均得分大概是4.4;速度是3.9;力量是6.4)对比一下,我们可以看出:

第一组,共35个学生,数量最多,在柔韧性和速度方面都有着严重的问题,即使他们的力量得分很高。第二组,共15个学生。他们柔韧性和速度都还不错,但是力量需要额外的提升。第三组,共10个学生,数量最少。需要在柔韧性和力量方面加强。第四组,共20个学生。他们需要依赖自身柔韧性和力量的优势,提升个体的速度。

第4步,可视化分组的结果。

通过添加分组指标,我们再次画出散点矩阵图。

. graph matrix flex speed strength, m(i) mlabel(k4) mlabpos(0)graph matrix flex speed strength, m(i) mlabel(k4) mlabpos(0)

从上图我们可以看出,各组的区分度还是很明显的。KMeans建模结果还不错。

如果对比其它K设定值的分组结果,只需要把K这个参数调整为3或5或6等,重新建模再进行对比即可。

五、小结+Stata其它机器学习命令介绍

KMeans算法虽然不复杂,建模效果挺不错的。如果样本特征变量的数据方便量化,且本身有一定的区分度,KMeans可以胜任聚类分组的工作。大量事实也说明,KMeans是一种得到实践检验的机器学习算法。而且,每次使用Stata,总是觉得开发商真的很有良心,提供的命令和帮助都非常简洁高效。

然而,可惜的是,作为计量经济学的通用语言,迄今为止(2020.12.19),Stata只开发出几个用于机器学习算法的命令。除了KMeans之外,大概就剩LASSO岭回归、KNN、SVM和NN神经网络建模的命令了。

顺便安利一下,关于后面三种典型的机器学习算法的原理和Stata建模的命令应用,本人已经写过一些文章分享。文章传送带:

KNN:盲区行者:机器学习之KNN分类算法介绍: Stata和R同步实现(附Stata数据和代码) SVM: 盲区行者:Stata也能玩转机器学习——SVM支持向量机应用简介 NN:盲区行者:深度学习之BP神经网络--Stata和R同步实现(附Stata数据和代码) ReferencesStata cluster kmeans 命令的帮助手册

2.

3.

4.

-----全文结束-----



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3