建模调参

模型介绍

  1. 线性回归
    f=w’ x +b
    损失函数 (f - y) ^2
    常采用最小二乘和梯度下降优化

  2. 决策树模型

  3. GBDT模型:梯度提升树
    一个集成模型,可以看做很多基模型的线性相加,基模型是CART回归树。这是一个决策树模型,主要特征是,二分树,节点特征取值为是和不是。
    决策树可能还需要进行剪枝,根据需求调节精度。

  4. Xgboost
    是GBDT算法的一个工程实现,并进行一些优化。增加了衰减银子,减少加的树对于原模型的影响;在GBDT上增加了一个正则项,对于树的叶子节点的权重做了约束;增加了在随机森林上常用的col subsample策略;使用二阶泰勒展开去拟合损失函数,加快优化效率;不需要遍历所有分裂点,提出了一个估计分裂点的算法。

  5. lightGBM
    LGB不需要通过所有样本计算信息增益,而且内置特征降维技术。采用少量的样本计算信息增益。

代码实战

将整理好的数据先进行一次简单建模 ,看表现情况。

from sklearn.linear_model import LinearRegression
model = LinearRegression(normalize=True)
model = model.fit(train_X, train_y)# 查看训练的线性回归模型的截距(intercept)与权重(coef)
'intercept:'+ str(model.intercept_)
sorted(dict(zip(continuous_feature_names, model.coef_)).items(), key=lambda x:x[1], reverse=True)from matplotlib import pyplot as plt
subsample_index = np.random.randint(low=0, high=len(train_y), size=50)
plt.scatter(train_X['v_9'][subsample_index], train_y[subsample_index], color='black')
plt.scatter(train_X['v_9'][subsample_index], model.predict(train_X.loc[subsample_index]), color='blue')
plt.xlabel('v_9')
plt.ylabel('price')
plt.legend(['True Price','Predicted Price'],loc='upper right')
print('The predicted price is obvious different from true price')
plt.show()

绘制特征v_9的值与标签的散点图,图片发现模型的预测结果(蓝色点)与真实标签(黑色点)的分布差异较大,且部分预测值出现了小于0的情况,说明我们的模型存在一些问题。

回归分析的五个基本假设

import seaborn as sns
print('It is clear to see the price shows a typical exponential distribution')
plt.figure(figsize=(15,5))
plt.subplot(1,2,1)
sns.distplot(train_y)
plt.subplot(1,2,2)
sns.distplot(train_y[train_y < np.quantile(train_y, 0.9)])

通过作图我们发现数据的标签(price)呈现长尾分布,不利于我们的建模预测。原因是很多模型都假设数据误差项符合正态分布,而长尾分布的数据违背了这一假设。因此需要进行变换,使得数据满足正态分布进行下一步预测。

train_y_ln = np.log(train_y + 1)  #进行log(x+1)变换model = model.fit(train_X, train_y_ln)
print('intercept:'+ str(model.intercept_))
sorted(dict(zip(continuous_feature_names, model.coef_)).items(), key=lambda x:x[1], reverse=True)plt.scatter(train_X['v_9'][subsample_index], train_y[subsample_index], color='black')
plt.scatter(train_X['v_9'][subsample_index], np.exp(model.predict(train_X.loc[subsample_index])), color='blue')
plt.xlabel('v_9')
plt.ylabel('price')
plt.legend(['True Price','Predicted Price'],loc='upper right')
print('The predicted price seems normal after np.log transforming')
plt.show()
#再次进行可视化,发现预测结果与真实值较为接近,且未出现异常状况

五折交叉验证

from sklearn.model_selection import cross_val_score
from sklearn.metrics import mean_absolute_error,  make_scorerdef log_transfer(func):def wrapper(y, yhat):result = func(np.log(y), np.nan_to_num(np.log(yhat)))return resultreturn wrapper
#使用线性回归模型,对未处理标签的特征数据进行五折交叉验证(Error 1.36)
scores = cross_val_score(model, X=train_X, y=train_y, verbose=1, cv = 5, scoring=make_scorer(log_transfer(mean_absolute_error)))
print('AVG:', np.mean(scores))#使用线性回归模型,对处理过标签的特征数据进行五折交叉验证(Error 0.19)
scores = cross_val_score(model, X=train_X, y=train_y_ln, verbose=1, cv = 5, scoring=make_scorer(mean_absolute_error))
print('AVG:', np.mean(scores))
#查看评分
scores = pd.DataFrame(scores.reshape(1,-1))
scores.columns = ['cv' + str(x) for x in range(1, 6)]
scores.index = ['MAE']
scores

由于交叉检验也具有一定的局限性,还可以采用时间顺序对数据集进行分隔。

#绘制学习率曲线与验证曲线
from sklearn.model_selection import learning_curve, validation_curve

模型对比

线性:
在过滤式和包裹式特征选择方法中,特征选择过程与学习器训练过程有明显的分别。而嵌入式特征选择在学习器训练过程中自动地进行特征选择。嵌入式选择最常用的是L1正则化与L2正则化。在对线性回归模型加入两种正则化方法后,他们分别变成了岭回归与Lasso回归。

from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lassomodels = [LinearRegression(),Ridge(),Lasso()]result = dict()
for model in models:model_name = str(model).split('(')[0]scores = cross_val_score(model, X=train_X, y=train_y_ln, verbose=0, cv = 5, scoring=make_scorer(mean_absolute_error))result[model_name] = scoresprint(model_name + ' is finished')result = pd.DataFrame(result)
result.index = ['cv' + str(x) for x in range(1, 6)]model = LinearRegression().fit(train_X, train_y_ln)
print('intercept:'+ str(model.intercept_))
sns.barplot(abs(model.coef_), continuous_feature_names) #修改model分别看评价指标

对于三个不同模型进行对比。L2正则化在拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型,抗扰动能力强;L1正则化有助于生成一个稀疏权值矩阵,进而可以用于特征选择。

非线性:

from sklearn.linear_model import LinearRegression
from sklearn.svm import SVC
from sklearn.tree import DecisionTreeRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.neural_network import MLPRegressor
from xgboost.sklearn import XGBRegressor
from lightgbm.sklearn import LGBMRegressor

使用同上测试方法,查看模型评分。

模型调参

  • 贪心算法
  • 网格调参
  • 贝叶斯调参

学习资料

第四次打卡 建模调参相关推荐

  1. 【数据挖掘】心跳信号分类预测 之 建模调参 —— 学习笔记(四)

    目录 四.建模调参 4.1 内容简介 4.2 模型原理与性质概述 4.2.1 分类模型 4.2.2 时间序列模型 4.2.3 推荐教材 4.3 模型对比与性能评估 4.3.1 逻辑回归 4.3.2 决 ...

  2. 心电图心跳信号多分类预测-建模调参(四)

    1.相关模型及调参方法 1.1 相关模型介绍 逻辑回归模型 https://blog.csdn.net/han_xiaoyang/article/details/49123419 决策树模型 http ...

  3. Python机器学习建模的标准流程(特征工程+建模调参+模型评估+全流程可视化)

    作者CSDN:进击的西西弗斯 本文链接:https://blog.csdn.net/qq_42216093/article/details/116994199 版权声明:本文为作者原创文章,转载需征得 ...

  4. 【算法竞赛学习】二手车交易价格预测-Task4建模调参

    二手车交易价格预测-Task4 建模调参 四.建模与调参 Tip:此部分为零基础入门数据挖掘的 Task4 建模调参 部分,带你来了解各种模型以及模型的评价和调参策略,欢迎大家后续多多交流. 赛题:零 ...

  5. 「建模调参」之零基础入门数据挖掘

    Datawhale 作者:徐韬 ,Datawhale优秀学习者 摘要:对于数据挖掘项目,本文将学习如何建模调参?从简单的模型开始,如何去建立一个模型:如何进行交叉验证:如何调节参数优化等. 建模调参: ...

  6. 【零基础入门数据挖掘】-建模调参

    Datawhale 作者:徐韬 ,Datawhale优秀学习者 摘要:对于数据挖掘项目,本文将学习如何建模调参?从简单的模型开始,如何去建立一个模型:如何进行交叉验证:如何调节参数优化等. 建模调参: ...

  7. 数据挖掘-二手车价格预测 Task04:建模调参

    数据挖掘-二手车价格预测 Task04:建模调参 模型调参部分 利用xgb进行五折交叉验证查看模型的参数效果 ## xgb-Model xgr = xgb.XGBRegressor(n_estimat ...

  8. #数据挖掘--第3章:建模调参之支持向量机SVM初体验

    #数据挖掘--第3章:建模调参之支持向量机SVM初体验   序言:本系列博客面向初学者,只讲浅显易懂易操作的知识.   基础知识准备:   一.我们在进行训练之前,常常要对样本进行归一化.标准化或正则 ...

  9. 数据挖掘流程(四):建模调参

    建模效果不好原因: model 模型 调参.调参可以影响5%的模型准确率. data 不同列差异过大.不同量纲可能导致模型效果不好-->取log/归一化. 同列差距过大,离散化.建模效果肯定不好 ...

  10. Datawhale 零基础入门数据挖掘-Task4 建模调参

    本节内容为各种模型以及模型的评价和调参策略. 一.读取数据 import pandas as pd import numpy as np import warnings warnings.filter ...

最新文章

  1. wordpress on Zencart (WOZ) Ultimate SEO URLs 静态化
  2. [基础语法] SEARCH搜索指定字符串详解
  3. charles代理手机调试_Mac 上使用 Charles 进行手机抓包调试
  4. sql:CallableStatement执行存储过程
  5. dbc连接mysql_Spring WebFlux 使用 R2DBC 访问 MySQL
  6. 为什么说Pravega是流处理统一批处理的最后一块拼图?
  7. mysql left join中on后加条件判断和where中加条件的区别
  8. 海量数据挖掘MMDS week6: 支持向量机Support-Vector Machines,SVM
  9. 搭建VMware6.5+Win2003 MSCS群集实验环境
  10. redismanager 获取不到yml中的密码_恋爱物语APP:在城市的孤独中,获取真爱密码...
  11. python 快速排名发包_2019年SEO快速排名发包技术及原理 - 立金哥
  12. FileLocator Pro:强大高效的无索引全文搜索软件
  13. python 手机号码归属地 软件,Python查询手机号码归属地几种方法
  14. 2020年杭州电子科技大学计算机考研经验分享
  15. 计算机摄影采用的成像媒介,探讨computed tomography的中文名称
  16. 人脸识别扫描(活体检测功能,眨眼、摇头、点头),身份证认证
  17. 如何把Pod本地化(Localize)
  18. mysql统计每半小时内的数据(查寻某段时间内的数据)
  19. 读取excel文件数据,封装成hashmap
  20. Base64编码解码C代码实现

热门文章

  1. 论文阅读:《Bridging the Gap in 3D Object Detection for Autonomous Driving》
  2. OpenGL学习之旅(三)——Bezier曲线理论与OpenGL实现
  3. 【手写源码-设计模式7】-桥接模式-基于苹果小米手机刷机场景
  4. 基于Pytorch实现人脸关键点检测模型MTCNN
  5. dimm和udimm_RDIMM和UDIMM内存的区别
  6. matlab解方程 中det,matlab中det函数
  7. 杰出人士的七种共性之5-独木求林
  8. Hyperledge Fabric-身份与角色认证
  9. 关于php的梗儿_php是世界上最好的语言是什么梗?
  10. centos设置ftp默认端口