100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > python如何做混合模型面板回归_python数据挖掘和机器学习实战-学习笔记3

python如何做混合模型面板回归_python数据挖掘和机器学习实战-学习笔记3

时间:2024-01-06 10:37:26

相关推荐

python如何做混合模型面板回归_python数据挖掘和机器学习实战-学习笔记3

在学习本书的时候本来到了基于线性回归的股票特征提取与预测,但是发现代码看不懂,特征提取也不知道是个什么东西,于是参考了《Python数据科学手册》一书进行补充。

机器学习分类-有监督学习和无监督学习机器学习应用-分类、回归;聚类、降维Scikit-Learn-数据表、特征矩阵、目标数组、Scikit-Learn API遵循的设计原则、Scikit-Learn API常用步骤简单线性回归鸢尾花数据分类鸢尾花数据降维鸢尾花数据聚类

1.机器学习分类

机器学习一般分为两类:有监督学习和无监督学习。

有监督学习是指对数据的若干特征与若干标签之间的关联性进行建模的过程;只要模型被确定,就可以应用到新的未知数据上。这类学习过程可以进一步分为分类任务和回归任务。在分类任务中,标签都是离散值;而在回归任务中,标签都是连续值。无监督学习是指对任何不带标签的数据特征进行建模,通常被认为是一种“让数据自己介绍自己”的过程。这类模型包括聚类任务和降维任务。聚类算法可以将数据分成不同的组别,而降维算法追求用更简洁的方式表现数据。

另外还有一种半监督学习方法,介于有监督学习和无监督学习之间,通常在数据标签不完整时使用。

2.机器学习应用示例

以下是有监督学习算法

分类:预测离散标签,重要的分类算法包括高斯朴素贝叶斯分类、支持向量机以及随机森林分类回归:预测连续标签,重要的回归算法包括线性回归,支持向量机以及随机森林回归

以下是无监督学习算法

聚类:根据输入数据的固有结构判断数据点之间的相关性,重要的聚类算法包括高斯混合模型和谱聚类降维:从数据集本身结构推断标签和其他信息,重要的降维算法包括主成分分析以及各种流形学习算法,如Isomap算法,局部线性嵌入算法

3.Scikit-Learn

Scikit-Learn是一个比较流行的学习包,为各种常用的机器学习算法提供了高效版本。关于Scikit-Learn的学习包括数据表示和评估器API以及一个示例。

3.1 数据表示

数据表:二维网格数据,用Pandas中的DataFrame表示。其中的每行数据表示每一个样本,称为样本,记作n_samples;每列数据表示每个样本的某个特征的量化值,称为特征,记作n_features。特征矩阵:将二维网格数据通过二维数组或矩阵的形式将信息清晰的表达出来,将这类矩阵称为特征矩阵。简记为变量 .它的维度为 .目标数组:除了特征矩阵 之外,还需要一个标签或目标数组,通常记作 .目标数组一般是一维数组,其长度是样本总数n_samples,通常用numpy数组或pandas的series表示。目标数组可以是连续的数值类型,也可以是离散的类型标签。

如何区分目标数组的特征和特征矩阵中的特征列一直是个问题。目标数组的特征通常是我们希望从数据中预测的量化结果,借用统计学中的术语,相当于

就是因变量。

这里以seaborn包中的数据集鸢尾花作为示例来对应理解。

这里我按照顺序导入包,下载数据集,并显示数据的前五行。

但是出现如下错误:

可参考此方法:导入seaborn数据集时报错 urllib.error.URLError: 「urlopen error [Errno 11004] getaddrinfo failed」

现在成功了,显示数据如下:

看到数据集的前几行之后,就可以断定前四列都是鸢尾花的一些特征描述,最后一列species就是品种,因此是根据前四列的特征数值,来预测品种。于是sepal_length~petal_width这四列是特征矩阵,而species这一列是目标数组。

按照数据的划分,对数据划分如下:

用seaborn对原始数据集做可视化得到的图形如下所示:

运行代码:sns.set() sns.pairplot(iris,hue = 'species',size = 1.5)

3.2 评估器API

Scikit-Learn API遵循的设计原则

统一性【所有对象使用共同接口连接一组方法和统一的文档】内省【所有参数值都是公共属性】;限制对象层级【只有算法可以用Python类表示,数据集都用标准数据类型numpy数组或pandas的DataFrame、Scipy的稀疏矩阵表示,,参数名称用标准的Python字符串】;函数组合【许多机器学习任务都可以用一串基本算法实现,Scikit-Learn尽力支持这种可能】;明智的默认值【当模型需要用户设置参数时,Scikit-Learn预先定义适当的默认值】。Scikit-Learn中的所有机器学习算法都是通过评估器API实现的,它为各种机器学习应用提供了统一的接口。

Scikit-Learn API常用步骤:

step1:通过从Scikit-Learn中导入适当的评估器类,选择模型类;step2:用合适的数值对模型类进行实例化,配置模型超参数【这里会有单独的一节学习如何确定模型超参数以及模型验证】;step3:整理数据,获得特征矩阵和目标数组;step4:调用模型实例的fit()方法对数据进行拟合;step5:对新数据应用模型:在有监督学习中,使用predict()预测新数据标签;在无监督学习中,使用transform()或predict()转换或推断数据的性质;

4. 接下来以4个例子来加深对Scikit-Learn API使用步骤的理解。

4.1 简单线性回归-有监督学习示例

先创建一个数据集

这里关于随机数的理解可参考此文:Numpy.random.seed()和numpy.random.RandomState()用法

选择模型类

这里计算的是一个简单的线性回归模型,因此只需要导入线性回归模型类即可;其余的线性模型可参考官方文档Linear Models

配置模型超参数

在选择了模型类之后,还有许多参数都需要配置,虽然不同的模型需要配置不同的参数,但以下几个点是共同需要考虑到的:

我们想要拟合偏移量(即直线截距)吗?

我们需要对模型进行归一化处理吗?

我们需要对特征进行预处理以提高模型灵活性吗?

我们打算在模型中使用哪些正则化类型?

我们打算使用多少模型组件?

有一些重要的参数必须在选择模型类时确定好,这些参数通常称为超参数,即在模型拟合数据前必须被确定的参数。在Scikit-Learn中,我们通常在模型初始化阶段选择超参数【超参数的选择可以定量选择】。对于本模型,可以实例化LinearRegression类并用fit_intercept超参数来设置是否想要拟合直线的截距。

值得注意的是,对模型进行实例化其实仅仅是存储了超参数的值,还没有将模型应用到数据上,Scikit-Learn的API对选择模型和将模型应用到数据去是区别的很清楚的。

将数据整理成特征矩阵和目标数组

特征矩阵需要二维特征矩阵,目标数组是一维目标数组,因此针对前面我们创建的数据集,需要稍作调整才能变成我们需要的数据。这里是把原来的x进行简单的维度转换即可。

用模型拟合数据

拟合后模型的系数-也就是斜率
拟合后模型的截距
预测新数据的标签

4.2 鸢尾花数据分类-有监督学习示例

明确问题:如何为鸢尾花数据集建立模型,先用一部分数据进行训练,再用模型预测出其他样本的标签。

这里将使用一个简单的高斯朴素贝叶斯方法完成任务,原因:高斯朴素贝叶斯方法速度很快,而且不需要选择超参数,所以很适合作为初步分类手段,在借助更复杂的模型进行优化之前使用。这个方法是假设每个特征中属于每一类的观测值都符合高斯分布。

选择模型类实例化类【不需要配置超参数】整理数据

这里直接用函数实现更方便。

直接把数据集用函数划分为两部分,一部分用来训练,另一部分则用于测试
拟合预测
y_model是预测的结果,而y_test是之前的正确数值,预测准确率达到97%

4.3 鸢尾花数据降维-无监督学习示例

前面已经显示过数据集的样式,因此鸢尾花的每个样本都有4个特征,也就是4个维度。降维的任务就是要找到一个可以保留数据本质特征的低维矩阵来表示高维矩阵。降维通常用于辅助数据可视化的工作。这里使用主成分分析法来快速降维,先设定模型返回2个主成分,也就是用二维数据表示鸢尾花的4维数据。

选择模型类配置超参数,实例化整理数据-前面已整理好拟合将数据转换为2维并可视化结果

因为我背景色的问题,导致轴和数据标签都看不见了,这里蓝色是setosa,橙色是versicolor,绿色是virginica

而这里PCA算法并不知道花的标签种类,而不同种类的花在PCA算法下还是被比较清晰的区分开来了,由此可见,简单的分类方法也能有效的学习此份数据集。

4.4 鸢尾花数据聚类-无监督学习示例

聚类算法主要是对没有任何标签的数据集进行分组。这里将使用高斯混合模型(GMM)来实现聚类。

选择模型类配置超参数,实例化整理数据-前面已经整理好拟合确定簇标签

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。