机器学习经典模型简单使用及归一化(标准化)影响
俗话说的好,不动手就永远不知道该怎么做,上次一听说要做这个的时候人都懵了,听了几次似乎都摸不到门道,这次花了几天时间去写了写,总算是摸到了点门道。
实验
数据集
这次用到的数据集是跟火电厂有关的,都是匿名特征,数据量为20160*170,做到最后发现只根据时间顺序就能做的比较好。
归一化
先来讲讲归一化。归一化也称标准化,是数据挖掘的一项基础工作,使用归一化的原因大体如下
- 数据存在不同的评价指标,其量纲或量纲单位不同,处于不同的数量级。解决特征指标之间的可比性,经过归一化处理后,各指标处于同一数量级,便于综合对比。
- 求最优解的过程会变得平缓,更容易正确收敛。即能提高梯度下降求最优解时的速度。
- 提高计算精度。
MinMaxScaler
线性归一化,也称为离差标准化,是对原始数据的线性变换,min-max标准化方法的缺陷在当有新数据加入时,可能会导致X.max和X.min的值发生变化,需要重新计算。其转换函数如下:
StandardScaler
标准差归一化,也叫Z-score标准化,这种方法给予原始数据的均值(mean,μ)和标准差(standard deviation,σ)进行数据的标准化。经过处理后的数据符合标准正态分布,即均值为0,标准差为1,转化函数为:
MaxAbsScaler
原理与MinMaxScaler很像,只是数据会被规模化到[-1,1]之间。也就是特征中,所有数据都会除以最大值。这个方法对那些已经中心化均值维0或者稀疏的数据有意义。
模型
本次实验使用了5个模型,分别为Lasso、Redige、SVR、RandomForest、XGBoost。
实验方式
- 以不同方式划分数据集和测试集
- 使用不同的归一化(标准化)方式
- 使用不同的模型
- 通过比较MSE(均方误差,mean-square error)的大小来得出结论
部分代码及结果
数据预处理
#按时间排序 sort_data = data.sort_values(by = 'time',ascending = True) sort_data.reset_index(inplace = True,drop = True) target = data['T1AOMW_AV'] sort_target = sort_data['T1AOMW_AV'] del data['T1AOMW_AV'] del sort_data['T1AOMW_AV'] from sklearn.model_selection import train_test_split test_sort_data = sort_data[16160:] test_sort_target = sort_target[16160:]_sort_data = sort_data[:16160] _sort_target = sort_target[:16160] sort_data1 = _sort_data[:(int)(len(_sort_data)*0.75)] sort_data2 = _sort_data[(int)(len(_sort_data)*0.75):] sort_target1 = _sort_target[:(int)(len(_sort_target)*0.75)] sort_target2 = _sort_target[(int)(len(_sort_target)*0.75):]import scipy.stats as stats dict_corr = {'spearman' : [],'pearson' : [],'kendall' : [],'columns' : [] }for i in data.columns:corr_pear,pval = stats.pearsonr(sort_data[i],sort_target)corr_spear,pval = stats.spearmanr(sort_data[i],sort_target)corr_kendall,pval = stats.kendalltau(sort_data[i],sort_target)dict_corr['pearson'].append(abs(corr_pear))dict_corr['spearman'].append(abs(corr_spear))dict_corr['kendall'].append(abs(corr_kendall))dict_corr['columns'].append(i)# 筛选新属性 dict_corr =pd.DataFrame(dict_corr) new_fea = list(dict_corr[(dict_corr['pearson']>0.41) & (dict_corr['spearman']>0.45) & (dict_corr['kendall']>0.29)]['columns'].values) # 选取原则,选取25%分位数 以上的相关性系数
模型测试
from sklearn.linear_model import LinearRegression,Lasso,Ridge from sklearn.preprocessing import MinMaxScaler,StandardScaler,MaxAbsScaler from sklearn.metrics import mean_squared_error as mse from sklearn.svm import SVR from sklearn.ensemble import RandomForestRegressor import xgboost as xgb #最大最小归一化 mm = MinMaxScaler()lr = Lasso(alpha=0.5) lr.fit(mm.fit_transform(sort_data1[new_fea]), sort_target1) lr_ans = lr.predict(mm.transform(sort_data2[new_fea])) print('lr:',mse(lr_ans,sort_target2))ridge = Ridge(alpha=0.5) ridge.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) ridge_ans = ridge.predict(mm.transform(sort_data2[new_fea])) print('ridge:',mse(ridge_ans,sort_target2))svr = SVR(kernel='rbf',C=100,epsilon=0.1).fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) svr_ans = svr.predict(mm.transform(sort_data2[new_fea])) print('svr:',mse(svr_ans,sort_target2))estimator_RF = RandomForestRegressor().fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) predict_RF = estimator_RF.predict(mm.transform(sort_data2[new_fea])) print('RF:',mse(predict_RF,sort_target2))bst = xgb.XGBRegressor(learning_rate=0.1, n_estimators=550, max_depth=4, min_child_weight=5, seed=0,subsample=0.7, colsample_bytree=0.7, gamma=0.1, reg_alpha=1, reg_lambda=1) bst.fit(mm.fit_transform(sort_data1[new_fea]),sort_target1) bst_ans = bst.predict(mm.transform(sort_data2[new_fea])) print('bst:',mse(bst_ans,sort_target2))
结果
lr: 7.736200563088036 ridge: 3.264150764935616 svr: 3.505799850945091 RF: 0.24087179220636037 bst: 0.9945862722591914
上面的这段代码测试的是最大最小归一化情况下的结果,测试其他标准化时只需要改动mm = MinMaxScaler(),这段代码即可。
实验结果及原因分析
经过多次测试,统计结果如下
通过对比,可以发现,
- 对于Lasso模型,使用MaxAbsScaler方式时,MSE增大十分明显,且归一化后结果高于不进行归一化时(可能是数据的问题),
- 对于Redige模型,归一化结果也明显高于不归一化时的结果。
- 对于SVR模型,不进行归一化时,其MSE会非常大,是因为svm实质上选择的是分割两类数据最远的超平面,由于错分类造成了影响,不进行归一化会造成对平面的影响,导致得到的划分平面不准确测试集成功率低。
- 对于RandomForest和XGBoost来说,是否进行归一化对结果影响不大。这也是树模型的一大特征。
转载于:https://www.cnblogs.com/csu-lmw/p/9964855.html
机器学习经典模型简单使用及归一化(标准化)影响相关推荐
- 【机器学习】 - 数据预处理之数据归一化(标准化)与实战分析,正则化
一.为什么要进行数据归一化 定义:把所有数据的特征都归到 [0,1] 之间 或 均值0方差1 的过程. 原则:样本的所有特征,在特征空间中,对样本的距离产生的影响是同级的: 问题:特征数字化后,由于 ...
- 机器学习 基本概念,常用经典模型
1. 机器学习 明白一些基本概念 什么是机器学习 研究如何通过计算的手段,利用经验来改善系统自身的性能 通俗来讲,让代码学着干活 特征:自变量 标签:因变量 学习的种类 有监督学习:提供标签,分类.回 ...
- AI开发者大会之AI学习与进阶实践:2020年7月3日《如何转型搞AI?》、《基于AI行业价值的AI学习与进阶路径》、《自动机器学习与前沿AI开源项目》、《使用TensorFlow实现经典模型》
AI开发者大会之AI学习与进阶实践:2020年7月3日<如何转型搞AI?>+<无行业不智能:基于AI行业价值的AI学习与进阶路径>.<自动机器学习与前沿AI开源项目> ...
- 机器学习防止模型过拟合的讲解
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:Poll,编辑:深度学习这件小事 来源 | http://www. ...
- 收藏 | 机器学习防止模型过拟合
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 目录 LP范数 L1范数 L2范数 L1范数和L2范数的区别 ...
- 手把手带你从0完成医疗行业影像图像检测三大经典模型InceptionV3-RestNet50-VGG16(附python源代码及数据库)——改变世界经典人工智能项目实战(一)手把手教学迁移学习
手把手带你从0完成医疗行业影像图像检测三大经典模型InceptionV3-RestNet50-VGG16 1.迁移学习简介 2.项目简介 3.糖尿病视网膜病变数据集 4.考虑类别不平衡问题 5.定义模 ...
- 机器学习——经典降维算法与框架综述
目录 综述 一.介绍 二. 降维算法回顾 1.KNN 1.1 KNN核心思想 1.2 KNN算法流程 1.3 KNN算法优缺点 2.线性降维 (1)PCA 2.1.1 PCA简介 2.1 ...
- 为什么要做特征归一化/标准化?
作者:shine-lee 来源:极市平台公众号 链接:https://blog.csdn.net/blogshinelee/article/details/102875044 编辑:王萌(深度学习冲鸭 ...
- [转载] Python 机器学习经典实例
参考链接: Python中的逻辑门 内容介绍 在如今这个处处以数据驱动的世界中,机器学习正变得越来越大众化.它已经被广泛地应用于不同领域,如搜索引擎.机器人.无人驾驶汽车等.本书首先通过实用的案例介绍 ...
- 解读:为什么要做特征归一化/标准化?
↑↑↑关注后"星标"Datawhale 每日干货 & 每月组队学习,不错过 Datawhale干货 作者:shine-lee,编辑:极市平台 本文解读了一项数据预处理中的重 ...
最新文章
- 2.5Gb/s混合集成光发射机
- 如何基于tomcat构建web站点
- spring AOP实现——xml方法
- [laravel]用户异地登录后踢掉之前的登录
- MySQL中的这17个关键问题,一定要弄清楚!
- java 7 的新特性
- Java_GPS经纬度转坐标
- 图片alt属性添加方法
- 时间一天天过去,好像什么都没变。
- python画行向日葵_如何用Python画一朵太阳花
- pbootcms建站,pbootcms建站方法技巧
- Kali对网站进行DDOS攻击
- 使用Selenium获取银行账户余额
- python初学一(字符串str的处理方式)
- AVT工业相机Windows、Opencv开发——驱动相机(超详细)
- 炫酷登录注册界面【超级简单 jQuery+JS+HTML+CSS实现】
- 微搭医美美容小程序官方模板解析
- 鸿蒙——通用设计基础(未完待续)
- springboot调整上传文件大小限制
- 用verilog 实现 74LS160,然后实现2000分频占空比50的分频器
热门文章
- Hexo | yilia主题安装
- Jenkins项目自动化部署工具的安装、配置及使用
- Ajax访问接口报错NET::ERR_CERT_REVOKED
- Libra最后的命运
- java程序员培训班要多少钱,一招彻底弄懂!
- 大话设计模式之爱你一万年:第七章 结构型模式:装饰器模式:爱你就要让你更美丽:为爱找份工作:2.装饰器模式之照相机:美颜滤镜一个都不能少
- 【react】---redux-actions的基本使用---【巷子】
- 关闭伽卡他卡电子教室自动启动项
- CobaltStrike服务端自身隐匿技巧
- 秀米排版,从入门到入土(一)