没有合适的资源?快使用搜索试试~ 我知道了~
思维导图:零基础入门数据挖掘的学习路径 1. 写在前面 零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识,提升在实际场景中的数据分析、数据清洗,特征工程、建模调参和模型融合等技能。所以这个系列笔记共五篇重点内容, 也分别从上面五方面进行整理学习, 既是希望能对知识从实战的角度串联回忆,加强动手能力的锻炼,也希望这五篇笔记能够帮助到更多喜欢数据挖掘的小伙伴,我们一起学习,一起交流吧。 既然是理论结合实践的方式,那么我们是从天池的一个二手车交易价格预测比赛出发进行学习,既可以学习到知识,又可以学习如何入门
资源详情
资源评论
资源推荐
零基础数据挖掘入门系列零基础数据挖掘入门系列(五五) – 模型建立与调参模型建立与调参
思维导图:零基础入门数据挖掘的学习路径
1. 写在前面写在前面
零基础入门数据挖掘是记录自己在Datawhale举办的数据挖掘专题学习中的所学和所想, 该系列笔记使用理论结合实践的方式,整理数据挖掘相关知识,提升在实
际场景中的数据分析、数据清洗,特征工程、建模调参和模型融合等技能。所以这个系列笔记共五篇重点内容, 也分别从上面五方面进行整理学习, 既是希望能对
知识从实战的角度串联回忆,加强动手能力的锻炼,也希望这五篇笔记能够帮助到更多喜欢数据挖掘的小伙伴,我们一起学习,一起交流吧。
既然是理论结合实践的方式,那么我们是从天池的一个二手车交易价格预测比赛出发进行学习,既可以学习到知识,又可以学习如何入门一个数据竞赛, 下面我们
开始吧。
今天是本系列的第五篇文章模型的建立与调参部分,这一块也是很费时间且核心的一部分工作,毕竟特征工程也好,数据清洗也罢,都是为最终的模型来服务的,
模型的建立和调参才决定了最终的结果,上限是一回事,上限是一回事, 如何更好的去达到这个上限又是一回事如何更好的去达到这个上限又是一回事, 前一篇我们已经做完了特征工程,好像是有了一个上限,到底应
该怎么去达到这个上限呢? 就需要看我们的模型表现了。所以今天重点整理模型的评估和调参的相关技术。
首先,我们会先从简单的线性模型开始,看看如何去建立一个模型以及建立完模型之后要去分析什么东西, 然后我们会学习交叉验证的思想和技术(这个在评估模
型的效果是经常会用到)并且会构建一个线下测试集(当然这个针对本比赛), 上面的这些算是建立模型的基础,然后我们会尝试建立更多的模型去解决这个问
题,并对比它们的效果, 当把模型选择出来之后,我们还得掌握一些调参的技术发挥模型最大的性能, 模型选择出来之后,也调完参数,但是模型真的就没有问题
了吗? 我们其实不知道, 所以最后我们学习绘制学习率曲线看模型是否存在过拟合或者欠拟合的问题并给出相应的解决方法。
大纲如下:大纲如下:
我们先从最简单的模型开始(线性回归 & 交叉验证 & 构建线下测试集)
评估算法模型的框架(这里会给出一个选择模型的框架,适合迁移)
模型的调参技术(贪心调参, GridSearchCV调参和贝叶斯调参)
绘制学习曲线和验证曲线(如何从学习曲线看过拟合欠拟合以及如果发生了过拟合欠拟合问题,我们应该怎么去尝试解决)
对模型建立和调参部分的总结
PS: 本文默认学习者已经具备了机器学习和数据挖掘的基础知识,已经知道了一些基本概念,比如过拟合,欠拟合,正则化,模型复杂度等。 所以关于这些基础知
识,本文不会过多的赘述,遇到了会提一下,如果没有掌握这些基本概念,建议先去补一下这些基本的概念,可以参考后面的第一篇链接。并且关于模型的原理部
分,这里也不展开论述, 因为关于这个比赛后面我尝试用了五六种模型进行试验,如果单纯讲这些模型的原理,篇幅会超级长,也不是这个系列需要整理的问题
了, 这些东西我都放在了链接里面。
Ok, let’s go!
2. 我们先从简单的线性模型开始我们先从简单的线性模型开始
这部分也算是一个热身了,我们这个比赛是关于价格预测的,我们也知道了这是个回归的问题, 那么对于回归的问题,我们肯定是要选择一些回归模型来解决,线
性模型就是一个比较简单的回归模型了, 所以我们就从这个模型开始,看看针对这个模型,我们会得到什么结果以及这些结果究竟是什么含义。
那么什么是线性回归模型, 线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分
析, 简单的说,假设我们预测的二手车价格我们用YYY来表示, 而我们构造的特征我们用xix_ixi, 我们就可以建立这样一个等式来表示它们的关系:
Y=w1x1+w2x2+….+wnxn+bY = w_1x_1+w_2x_2+….+w_nxn+bY=w1x1+w2x2+….+wnxn+b
训练模型的过程其实就是根据训练集的这些(X,Y)(X, Y)(X,Y)样本来求出合适的权重www, 然后对新的测试集XXX预测相应的YtestY_{test}Ytest, 这个
YtestY_{test}Ytest其实就是我们想要的答案。这就是这部分的逻辑,下面看实现。
首先导入上次特征工程处理完毕后保存的数据集:
# 导入之前处理好的数据
data = pd.read_csv('./pre_data/pre_data.csv')
data.head()
# 然后训练集和测试集分开
train = data[:train_data.shape[0]] test = data[train_data.shape[0]:] # 这个先不用
# 选择那些数值型的数据特征
continue_fea = ['power', 'kilometer', 'v_2', 'v_3', 'v_4', 'v_5', 'v_6', 'v_10', 'v_11', 'v_12', 'v_14',
'v_std', 'fuelType_price_average', 'gearbox_std', 'bodyType_price_average', 'brand_price_average',
'used_time', 'estivalue_price_average', 'estivalueprice_std', 'estivalue_price_min'] train_x = train[continue_fea] train_y = train_data['price']
可以看一下,我这边处理的data数据的结果:
我这边data会有38个特征。
下面,我们建立线性模型,建立模型如果用sklearn的话还是非常简单的,包括训练和预测。
from sklearn.linear_model import LinearRegression
model = LinearRegression(normalize=True)
model.fit(train_x, train_y)
通过上面这两行代码,我们其实就建立了线性模型,并完成了训练。 .fit方法就是训练模型, 训练的结果就是求出了上面的w和b。我们可以查看一下:
"""查看训练的线性回归模型的截距(intercept)与权重(coef)"""
print('intercept: ' + str(model.intercept_))
sorted(dict(zip(continue_fea, model.coef_)).items(), key=lambda x: x[1], reverse=True)
## 结果:
intercept: -178881.74591832393
[('v_6', 482008.29891714785),
weixin_38640242
- 粉丝: 4
- 资源: 971
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0