Mathematica中的机器学习

近年来机器学习是越来越火了,而Mathematica作为领先的科学计算平台,自然不会落下,在10.0版本以后就引入了神经网络等机器学习工具。Mathematica中进行机器学习最大的特点是高度自动化,这得益于函数式编程的简约,以及各函数之间的高内聚性。

机器学习有两大类,一是监督学习,具体地又包括回归与分类,在回归中,目标变量是连续型的,而分类中,目标变量是离散的,且一般为整数,实际的分类任务中,目标可能为字符串或其它变量,不过也可以转换成以整数表示的类别。二是无监督学习,主要是聚类。在Mathematica中对这些都有比较好的支持。

回归

回归技术有两个分类,一种以计量经济为代表,已知模型的代数形式,只需要估计好模型的参数就行了,在估计的时候可能会出现有偏、无效的问题,因此派生出了一系列的估计方法,这些估计方法大体上一类以OLS为代表,包括GLM、TSLS、BFGS等,使用这一类估计的缺点是必须根据模型的特点仔细地选择,否则可能出现估计无效的问题。另一类以极大似然法MLE,包括部分信息、全信息极大似然估计等,极大似然估计几乎是万能的,但是计算量比较大,似然函数也非常复杂。

在Mathematica中用于计量模型估计的函数有:


线性模型:LinearModelFIt[]、GeneralizedLinearModelFit[]、LeastSquares[]

非线性模型:NonlinearModelFit[]、LogitModelFit[]、ProbitModelFit[]

时间序列:TimeSeriesModelFit[]

不区分线性与非线性(参数拟合):FindFit[]、Fit[]

神器:FindFormula[],此函数只需要输入数据,让计算机自动计算一个最佳的描述数据的公式。


不同的函数从字面上就可以明白它的作用,因此不详细说明。可以看出,相比专业的计量软件,Mathematica自带的用于计量的函数是非常少的,因此建议还是用专门的计量软件如Eviews、Stata等这样的软件来做。

在机器学习中,主要是针对回归的第二类即,模型的形式不能用简单的代数式表达,比如用于序列预测的KNN算法。但神经网络稍有特殊,比如一般认为神经网络的代数表达式为y=xb,这有点像线性模型,但一般线性模型中,b是一个向量,而神经网络中的参数b是一个张量或者矩阵,我们认为此时参数参数过于复杂,不能用一般的代数表达式写出,归为此类。

Mathematica中用于回归的函数主要是Predict[]系列。Predict[]的输入的内容为数据(可以为文本、数字、图像、音频等,数据的输入形式为{变量集1->目标1,变量集2->目标2,……}必须)、设置。在设置中可以指定用于回归的五种算法:分别为”LinearRegression”、”NearestNeighbors”、”NeuralNetwork”、”RandomForest” 、”GaussianProcess”,需要用”Methods”->”NearestNeighbors”这样的形式来指定,若不指定,则由计算机自动选择。在更通用的机器学习中,我们通常首先要从数据中提取Features,然后对这些Features使用算法进行计算,在Mathematica中也可以指定不同的提取Features的算法,共有15种:


图像:”FaceFeatures”、”ImageFeatures”、”PixelVector”

文本:”SegmentedCharacters”、”SegmentedWords”、”TFIDF”

不区分:”ConformedData”、”DiscretizedVector”、”DimensionReducedVector”
、”IndicatorVector”、”IntegerVector”、”MissingImputed”、”NumericVector”
、”StandardizedVector”


用FeatureExtractor -> “ImageFeatures”的形式指定,从字面上也比较容易理解含义。

这两个设置是影响精确度的主要因素,此外还可以进行”PerformanceGoal”、”Memory”的设置等。

在计算完成以后,生成的是一个PredictFunction,可直接用于对输入的新数据进行预测,此外可以用PredictorInformation[]、PredictionMeasurements[]来观察模型的准确度等。

分类

MatheMatica中用于分类任务的函数主要有Classify[]系列。它输入的内容与回归中介绍的基本相同,只是可选的算法有6种:”LogisticRegression”、”Markov”、”NaiveBayes”、”NearestNeighbors”、”NeuralNetwork”、”RandomForest”、”SupportVectorMachine”。实际应用中发现神经网络的效果最好。而逻辑回归,马尔科夫,贝叶斯的拟合度虽然很高,但在预测时往往效果不好。类似地用ClassifierInformation[]、ClassifierMeasurements观察生成的模型的相关情况。

聚类

Mathematica中用于聚类的工具为ClusterClassify[]、FindClusters[]、ClusteringTree[]、Dendrogram[]。后两个主要用于绘制级联分类树。在前两个函数中可以指定的算法”Method”有10种:

“Agglomerate”
“DBSCAN”
“NeighborhoodContraction”
“JarvisPatrick”
“KMeans”
“MeanShift”
“KMedoids”
“SpanningTree”
“Spectral”
“GaussianMixture”

可以指定的衡量聚类标准”CriterionFunction”的有4种。

“StandardDeviation”
“RSquared”
“Dunn”
“CalinskiHarabasz”

此在在Mathematica中也提供了用于网络聚类的函数,这主要是图论所要研究的问题:FindGraphCommunities[]、CommunityGraphPlot[]、FindGraphPartition[]。

神经网络

Mathematica中也提供了神经网络的工具,如一些标准的神经网络层,不同的训练算法等,改日做一个详细的说明。

1 thought on “Mathematica中的机器学习

Leave a comment