查看原文
其他

机器学习——监督学习入门

爬虫俱乐部 Stata and Python数据分析 2023-10-24

本文作者:钱晓阳 中南财经政法大学统计与数学学院

本文编辑:何   疆

技术总编:温和铭








Stata and Python 数据分析

     爬虫俱乐部将于2023年8月1日至9日河南大学(河南开封)举行Stata编程技术Python编程技术定制培训,同时在网络平台进行直播,提供线上学习的方式。线上线下培训均有专门的答疑团队。大家感兴趣请点击推文链接《爬虫俱乐部2023第一期编程训练营开始报名啦!》点击文末阅读原文查看课程详情及报名方式!

一、什么是监督学习

首先,让我们来回顾一下什么是监督学习。监督学习是通过对带有标签的样本数据进行训练后得到合适的训练模型,然后该模型可以根据新的输入得到相对应的输出标签。比如说你向机器提供西瓜的色泽、根蒂和敲声数据,并告诉机器对应的西瓜是否为好瓜,这里的“是否为好瓜”就是标签,机器能根据这些信息训练出模型。当机器接收到新的西瓜特征数据就能根据训练的模型来判断其是否为好瓜,这就是一种监督学习。监督学习主要用来解决两类问题:回归和分类。

1、回归

回归指的是根据已知的特征数据和连续标签数据建立模型,目的是将模型用于预测连续的输出值,比如预测股票价格、预测未来销售额都需要用到回归的方法。可用于回归问题的机器学习方法主要有:线性回归、多项式回归、岭回归、Lasso回归、用于回归问题的集成算法、神经网络回归等。

2、分类

分类和回归最大的区别在于,分类是利用离散标签数据来进行模型的训练,其目的是为了预测离散的输出值,比如预测一个用户是否会发生信用违约、预测一个西瓜的好坏等。分类问题常用的机器学习方法主要有:逻辑回归、SVM、决策树、用于分类问题的集成算法、神经网络分类等。

二、监督学习建模流程

在了解了监督学习的一些基本概念后,让我们来看看该怎样建立一个监督学习模型。其实各种机器学习方法的建模流程是通用的,总的来说,可以分为以下几个部分:

1、  数据收集和特征工程

这部分主要是根据自己的研究目标收集用于训练和测试模型的数据。然后对获得的数据进行预处理,包括数据清洗、缺失值处理、数据转换等,然后根据处理后的数据进一步开展特征筛选、降维等工作。数据和特征的质量能决定机器学习算法的上限,可以说整个流程80%的时间都用于该部分。

2、  模型选择和训练

该部分是根据研究目标以及数据的特点来选择合适的监督学习算法,并根据训练数据和所选算法来训练模型。由于很多监督学习算法涉及参数的选择,所以在训练过程中还需要通过调参来优化模型的性能。

3、  模型评估和优化

这部分主要是将训练得到的模型用于测试集中,根据评估指标来判断当前模型的泛化性能。对于评估结果不佳的模型可能需要进行优化,比如优化特征工程、尝试更换算法等。

三、监督学习的简单案例

前面我们简单介绍了监督学习的相关概念和大致的建模流程,最后我们以一个简单的例子来加深一下大家的理解。这里所采用的数据是机器学习中经典的鸢尾花数据。

import pandas as pdimport numpy as np
from sklearn import datasetsiris = datasets.load_iris()iris.data.shape,iris.data[:10]iris.target.shape,pd.value_counts(iris.target)iris.target_name

我们来认识一下这份数据,这份数据共包含150个样本,data代表鸢尾花花瓣和花萼分别的长度和宽度,target的值0,1,2代表鸢尾花的3种类别,即图中最后一行。target和data是一一对应的,因此target就是监督学习中需要的标签数据。我们想达到的目标是利用这份数据训练一个分类模型,该模型能反映鸢尾花特征和类别之间的映射关系,且在向模型输入新的鸢尾花特征数据时能得到较准确的鸢尾花类别。

首先,在得到数据后,应该先对数据进行处理,但由于这份数据比较整齐,特征也较少,所以这里省略了这一步。

其次,需要选择合适的算法来建立模型,这里选择了使用随机森林来进行展示。

from sklearn.model_selection import train_test_splitfrom sklearn.ensemble import RandomForestClassifier
xtrain,xtest,ytrain,ytest = train_test_split(iris.data,iris.target,test_size=0.3) #把样本数据划分为训练集和测试集,测试集占比为30%rfc = RandomForestClassifier(random_state=76) #默认参数rfc = rfc.fit(xtrain,ytrain)rfc.score(xtest,ytest) #类别预测正确比例

利用Python的sklearn库可以很方便地构建一个简单的随机森林模型,随机森林模型包含很多参数,首先上图展示的是利用默认参数构建的模型,最终预测的准确率为88.9%。下图则是利用了网格搜索和交叉验证的方法对随机森林中决策树个数这个参数n_estimators进行了调整,可以看到在1-10中,最佳的决策树个数为3,最终的预测准确率也提高到了93.3%,因此调参也是在构建模型中较关键的一步。

from sklearn.model_selection import GridSearchCVrfc2 = RandomForestClassifier(random_state=76)param_test = {'n_estimators':range(1,11,1)}grid_search = GridSearchCV(rfc2,param_grid=param_test1,cv=3) #网格搜索和3折交叉验证grid_search.fit(xtrain,ytrain)
print(grid_search.best_params_) #得到最佳参数grid_search.score(xtest,ytest)

有关于监督学习的内容就简单介绍到这儿,感兴趣的小伙伴可以可以尝试采用不同的模型、参数或者利用datasets中其他的数据来进一步体验整体流程,也可以尝试学习具体的算法原理,对监督学习有更深入的理解。

END

重磅福利!为了更好地服务各位同学的研究,爬虫俱乐部将在小鹅通平台上持续提供金融研究所需要的各类指标,包括上市公司十大股东、股价崩盘、投资效率、融资约束、企业避税、分析师跟踪、净资产收益率、资产回报率、国际四大审计、托宾Q值、第一大股东持股比例、账面市值比、沪深A股上市公司研究常用控制变量等一系列深加工数据,基于各交易所信息披露的数据利用Stata在实现数据实时更新的同时还将不断上线更多的数据指标。我们以最前沿的数据处理技术、最好的服务质量、最大的诚意望能助力大家的研究工作!相关数据链接,请大家访问:(https://appbqiqpzi66527.h5.xiaoeknow.com/homepage/10)或扫描二维码:


对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!







往期推文推荐‍‍禁忌魔法解封,击穿专业壁垒:ChatGPT code interpreter暑期来啦~⼀起看⼀看近期的天⽓情况【命令重磅更新】在Stata中深入使用ChatGPT
爬虫俱乐部2023第一期编程训练营开始报名啦!
【爬虫基础】Scrapy爬虫框架迈向交互式编程,ChatGPT更新!一个简单又好玩的Python库——MyQR
replace命令的“加强版”!——如何使用ereplace,结合egen
XML 轻松读取:用 Python 发现数据宝藏

爬虫俱乐部重磅推出cnstata.com.cn

Markdown:让数学公式输入更方便!

处理日期的好手:pendulum
定制属于自己的“贾维斯”——Python调用Chat
学会format,数据格式任你拿捏【Python实战】游客最青睐的城市,你的家乡上榜了吗?

What’ new ? 速通Stata 18

【爬虫实战】Python爬取美食菜谱揭秘网络中心人物,你会是其中之一吗?考研之后,文科生需以“do”躬“do”!焕新升级!轻松获取港股、权证的历史交易数据     关于我们 

   微信公众号“Stata and Python数据分析”分享实用的Stata、Python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

   武汉字符串数据科技有限公司一直为广大用户提供数据采集和分析的服务工作,如果您有这方面的需求,请发邮件到statatraining@163.com,或者直接联系我们的数据中台总工程司海涛先生,电话:18203668525,wechat: super4ht。海涛先生曾长期在香港大学从事研究工作,现为知名985大学的博士生,爬虫俱乐部网络爬虫技术和正则表达式的课程负责人。



此外,欢迎大家踊跃投稿,介绍一些关于Stata和Python的数据处理和分析技巧。

投稿邮箱:statatraining@163.com投稿要求:1)必须原创,禁止抄袭;2)必须准确,详细,有例子,有截图;注意事项:1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。2)邮件请注明投稿,邮件名称为“投稿+推文名称”。3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存