阿里云天池大赛——机器学习篇赛题解析(赛题一)上

根据《阿里云天池大赛赛题解析》整理,建议配合阅读效果更好
1.赛题理解
(1)赛题
火力发电的基本原理是燃料燃烧生产蒸汽,蒸汽推动汽轮机旋转带动发电机旋转,产生电能,影响火力发电效率的核心是锅炉的燃烧效率(每单位时间内产生的蒸汽量),影响锅炉燃烧效率的因素很多,包括锅炉的可调参数,如燃烧给量、一二次风、引风、返料风、给水水量;以及锅炉的工况,如锅炉床温、床压、炉膛温度、压力,过热器的温度等。
本赛题目标为根据给定的锅炉传感器采集的数据(燃烧给量、锅炉工况等),预测产生的蒸汽量。
(2)数据概览
根据阿里云天池官网的赛题提供的训练数据显示,一共有38个特征变量(字段名为V0~V37),1个目标变量(字段名为target)。
(3)评估指标
预测误差以均方误差MSE(Mean Squared Error)作为评判标准,MSE值越小,说明预测模型描述实验数据具有越高的准确度。
(4)赛题模型
常用的模型包括回归预测模型和分类预测模型,回归预测模型包括线性回归、岭回归、决策树回归、梯度提升树回归,分类预测模型包括二类分类、多类别分类。
本赛题中,预测值蒸汽量为连续型数值变量,因此使用回归预测模型。
2.数据探索
(1)单变量分析
对于连续型变量,需要对其进行描述性统计,统计其的中心分布趋势和变量分布,包括平均值、中位数、最大值、最小值、方差、标准差等。
对于类别型变量,一般使用频次或占比表示每一个类别的分布情况。可用直方图、箱线图来表示可视化分布情况。
(2)双变量分析
包括连续型与连续型、类别型与类别型、类别型与连续型三种双变量分析组合,使用不同的统计算法和图像表达来描述双变量之间的关系。
①连续型与连续型
统计分析算法:计算相关性
图形表达:散点图
②类别型与类别型
统计分析算法:
双向表——通过建立频次(次数)和频率(占比)的双向表来分析变量之间的关系。
卡方检验——主要用于两个和两个以上样本率(构成比)及两个二值型离散变量的关联性分析
图形表达:堆叠柱状图
③类别型和连续型
图形表达:小提琴图,分析类别变量在不同类别时,另一个连续变量的分布情况
3.特征工程
从原始数据中,找出、构建特征(就是对变量的处理),能很好地描述数据,并且预测表现性能达到最优的过程。
处理流程:去掉无用特征、去掉冗余特征、生成新特征、特征转换、特征处理
3.1特征转换
变量形态处理,对变量的取值区间等进行转换,使其分布在合理的区间内或者更好地描述特征形态和特点或者使其更方便代入模型计算。
包括标准化、归一化、定量特征二值化、定性特征哑变量、缺失值处理和数据转换等。
(1)标准化
通过求标准分数的方法,将特征转换为标准正态分布。
(2)归一化
将样本的特征值转换到同一量纲下,把数据映射到[0,1]或者[a,b]区间内。
归一化与标准化的使用场景
如果对输出结果范围有要求,则用归一化
如果数据较为稳定,不存在极端的最大值或者最小值,则用归一化。
如果数据存在异常值和较多噪声,则用标准化,这样可以通过中心化间接避免异常值和极端值的影响。
支持向量机K近邻主成分分析等模型必须进行归一化或标注努哈操作。
(3)定量特征二值化
设定一个阈值,大于阈值的赋值为1,小于等于阈值的赋值为0.
(4)定性特征哑变量
也被称为虚拟变量,通常是人为虚拟的变量,取值为0或1,用来反映某个变量的不同属性。将类别变量转换为哑变量的过程就是哑编码。而对于有n个类别属性的变量,通常会以1个类别特征为参照,产生n-1个哑变量。
引入哑变量的目的是把原本不能定量处理的变量进行量化,从而评估定性因素对因变量的影响。
通常会将原始的多变量变量转换为哑变量,在构建回归模型时,每一个哑变量都能得出一个估计的回归系数,这样使得回归的结果更易于解释。
(5)缺失值和异常值处理
①缺失值处理
处理方法:删除,平均数、众数、中位数填充,预测模型填充
②异常值处理
检测:箱线图、直方图、散点图检测异常值
处理方法:删除、转换、填充、区别对待等方法
(6)数据转换
在使用直方图、核密度估计等工具对特征分布进行分析的过程中,可能会有一些变量的取值分布不平均,这将会极大影响估计,因此,需要对变量的取值区间等进行转换,使其分布在合理的区间内。
常用的转换方法:
①对数变换:对变量取对数,可以更改变量的分布形状。
②取平方根或立方根:变量的平方根和立方根对其分布有波形的影响。
③变量分组:可以基于原始值、百分比或频率等对变量分类。
3.2特征降维
变量维度处理,降维指的是采用某种映射方法,将高维向量空间的数据点映射到低维的空间中。
在原始的高维空间中,向量数据包含冗余信息及噪声信息,其在实际应用中会对模型识别造成误差。因此,需要减少无用或冗余的信息,减少误差,进行特征选择或进行线性降维。
(1)特征选择
直接将不重要的特征删除
特征选择的方法:过滤法、包装法、嵌入法
①过滤法:根据特征变量和目标变量的关系进行特征选择,包括方差选择法,相关系数法,卡方检验,最大信息系数法等。
②包装法:使用遗传算法、退火算法等算法,每次选择若干特征
③嵌入法:使用机器学习的决策树、深度学习等算法和模型进行训练,得到各个特征的权值系数,并根据系数从大到小选择特征。
(2)线性降维
常用的方法有主成分分析法和线性判别分析法
①主成分分析法
将高维数据映射到低维空间中表示,并期望在所投影的维度上数据的方差最大,以较少的维度保留较多的原数据点特性
②线性判别分析法
与主成分分析法尽可能多地保留数据信息不同,线性判别分析法的目标是使降维后的数据点尽可能地容易被区分。
4.模型训练
回归是一种来自统计的技术,用于在目标数量连续时预测所需目标数量的值。
步骤:导入需要的工具库——数据预处理——训练模型——预测结果
(1)线性回归模型
假定因变量Y与自变量X呈线性相关,则可以采用线性模型找出自变量X和因变量Y的关系,以便预测新的自变量X的值。
首先,需要导入数据

import os
#读取数据
os.chdir(r"E:\\")
data = pd.read_csv(r'./data.csv')
#选取自变量
train=data.columns[0:38]
#选取因变量
target=data['target']

在使用任何机器学习模型之前,都需要对数据集进行切分,将其且分为训练数据(训练集)和验证数据(测试集)。
切分数据代码如下:

#切分数据集
from sklearn.model_selection import train_test_split #切分数据
#切分数据,训练数据为80%,验证数据为20%
train_data,test_data,train_target,test_target=train_test_split(train,target,test_size=0.2,random_state=0)

使用sklearn调用线性回归模型进行预测,代码如下:

from sklearn.metrics import mean_squared_error #评价指标
#从sklearn算法库中导入线性回归模型
from sklearn.linear_model import LinearRegression
#定义线性回归模型
clf=LinearRegression()
#将训练集的自变量和因变量代入到线性回归模型中训练
clf.fit(train_data,train_target)  
#将测试集的因变量代入线性回归模型中得到测试集的预测值
test_pred=clf.predict(test_data) 
#得到本次模型准确率得分
score=mean_squared_error(test_target,test_pred)
print("LinearRegression: ",score)

(2)K近邻回归模型
K近邻算法可用于分类和回归。通过找出某个样本的k个最近邻居,将这些邻居的某个(些)属性的平均值赋给该样本,就可以得到该样本对应属性的值。
K近邻回归调用方法:

from sklearn.metrics import mean_squared_error #评价指标
#从sklearn算法库中导入k近邻回归模型算法
from sklearn.neighbors import KNeighborsRegressor
#定义K近邻回归模型
clf=KNeighborsRegressor(n_neighbors=3) #选取最近的3个“邻居”的因变量的值的平均值赋值给因变量
#将训练集的自变量和因变量代入到K近邻回归模型中训练
clf.fit(train_data,train_target)
#将测试集的因变量代入线性回归模型中得到测试集的预测值
test_pred=clf.predict(test_data) 
#得到本次模型准确率得分
score=mean_squared_error(test_target,test_pred)
print("KNeighborsRegressor: ",score)

(3)决策树回归模型
决策树回归可以理解为根据一定准则,将一个空间划分为若干子空间,然后利用子空间内所有点的信息表示这个子空间的值。设定划分次数,可以使用最小二乘法进行分割点选择,得到所对应的子空间,然后用子空间内均值作为输出值。
决策树回归调用方法:

from sklearn.metrics import mean_squared_error #评价指标
#从sklearn算法库中导入决策树回归算法
from sklearn.tree import DecisionTreeRegressor
#定义决策树回归回归模型
clf=DecisionTreeRegressor(max_depth=3, min_samples_leaf = 4, min_samples_split=2) 
#决策树最大深度取3,叶子节点最少样本数取4,内部节点再划分所需最小样本数取2
#更多决策树参数可看https://blog.csdn.net/qq_41577045/article/details/79844709
#将训练集的自变量和因变量代入到决策树回归回归模型中训练
clf.fit(train_data,train_target)
#将测试集的因变量代入线性回归模型中得到测试集的预测值
test_pred=clf.predict(test_data) 
#得到本次模型准确率得分
score=mean_squared_error(test_target,test_pred)
print("DecisionTreeRegressor: ",score)

(4)随机森林回归模型
随机森林就是通过集成学习的思想将多棵树集成的一种算法,基本单元是决策树,而它的本质属于机器学习的一个分支——集成学习。
在回归问题中,随机森林输出所有决策树输出的平均值
随机森林回归模型调用方法:

from sklearn.metrics import mean_squared_error #评价指标
#从sklearn算法库中导入随机森林回归算法
from sklearn.ensemble import RandomForestRegressor
#定义随机森林回归模型
clf=RandomForestRegressor(n_estimators=200) #选择200棵决策树
#将训练集的自变量和因变量代入到随机森林回归模型中
clf.fit(train_data,train_target)
#预测测试集的因变量预测值
test_pred=clf.predict(test_data)
#得到本次模型准确率得分
score=mean_squared_error(test_target,test_pred)
print("RandomForestRegressor: ",score)

(5)LightGBM回归模型
LightGBM是Microsoft开发的一个GBDT算法框架,支持高效率的并行训练,具有更快的训练速度、更低的内存消耗、更好的准确率、分布式支持、可以快速处理海量数据等特征。
LightGBM回归模型调用方法:

from sklearn.metrics import mean_squared_error #评价指标
#从sklearn算法库中导入LightGBM回归模型
import lightgbm as lgb
#定义LightGBM回归模型
clf=lgb.LGBMRegressor(
learning_rate=0.01,
max_depth=-1,
n_estimators=5000,
boosting_type='gbdt',
random_state=2019,
objective='regression')
#更多LGB模型参数可看https://www.cnblogs.com/jiangxinyang/p/9337094.html或https://blog.csdn.net/qq_24591139/article/details/100085359
#将训练集的自变量和因变量代入到LightGBM回归模型中
clf.fit(train_data,train_target,eval_metric='MSE',verbose=50)
#预测测试集的因变量预测值
test_pred=clf.predict(test_data)
#得到本次模型准确率得分
score=mean_squared_error(test_target,test_pred)
print("lightgbm: ",score)

猜你喜欢

转载自blog.csdn.net/weixin_47970003/article/details/123570650