How Much Did It Rain? Ⅱ 使用机器学习进行预测(三)

该博客分析了降雨量预测任务中特征间及特征与目标变量的相关性,并选用LR模型进行初步建模。相关性分析显示部分特征有较强线性相关,LR模型在训练后得到的MAE和MSE表明预测存在较大偏差,但模型简单、计算成本低。
摘要由CSDN通过智能技术生成


  预测(二)中对缺失值和异常值进行了处理,接下来我们需要分析Features之间、Feature和Label之间的相关性关系,并确定一个初步的模型进行预测。

相关性分析

  Features与Label的相关系分析是特征质量评价中非常重要的一环,合理的选取特征,找到与拟合目标相关性最强的特征,往往能够快速获得效果;
  Features之间的相关性分析,可以知道特征之间的信息量相关性,如果两个特征之间强线性相关,说明这两个特征的信息量很近似。

Features之间相关性分析

corr = train.iloc[:,3,-1].corr()
sns.set()
plt.rcParams['font.sans-serif']=['SimHei']
fig = plt.figure(figsize=(20,10))
sns.heatmap(corr)
plt.show()

output:
Features相关性分析
  前八列强线性相关,其实因为数据量大,可以考虑降维的,这样可以减小计算量,但是需要我们先确定一个baseline后,再考虑进一步的数据处理。

Features和Labels相关性分析

fig = plt.figure(figsize=(12,6))
abs_feature_corr = abs(train.corr()['Expected']).drop('Expected')
abs_feature_corr.sort_values(ascending=True).plot.bar()
plt.xticks(fontsize=20)
plt.yticks(fontsize=20)
plt.show()

output:
Features和Labels之间的相关性
  Ref和RefComposite类特征对降雨量的预测相关性相较其它特征而言之下,比较高

初步建模

  我们会后续用很多个模型进行预测分析,并且相互比较优劣性,这里我们先定下第一个模型。

模型选择分析

  我们最开始使用较简单的模型:LR多元线性回归进行预测

模型常见算法
基于线性LR、SVM
基于树模型DT
集成学习Adaboost、gdbt、xgboost

  我们的目的是做降雨量,是线性预测,可以从最简单的LR (Linear Regression) 进行多因子模型,去掉Id和minist_past后进行训练;
  确定好模型后,我们还需要对一些超参数进行调参,一种方法是我们自身对模型有一定的了解,在这个基础上尝试去改变一些超参数,另一种方法是使用网络搜索暴力找到最优参数值。
  训练完毕需要模型评估:我们选择MAE和MSE进行模型评估,将trian按照8 : 2分为训练集和测试集

M S E = 1 n ∑ i = 1 n w i ( y i − y ^ i ) 2 M A E = 1 n ∑ i = 1 n ∣ y i − y ^ i ∣ MSE=\frac{1}n \sum_{i=1}^{n}w_i(y_i-\widehat{y}_i)^2 \\ MAE=\frac{1}n \sum_{i=1}^{n}|y_i-\widehat{y}_i| MSE=n1i=1nwi(yiy i)2MAE=n1i=1nyiy i

评估方式常见算法
RMSE衡量观测值与真实值之间的偏差
MSE真实值与预测值的差值的平方然后求和平均
MAE绝对误差的平均值
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import minmax_scale
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_absolute_error # MAE
import time

data = train.drop(labels=['Id','minutes_past','Expected'],axis=1)
stdsc = StandardScaler()
data = stdsc.fit_transform(data)
data= minmax_scale(data)
X = pd.DataFrame(data)
y = train['Expected']

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2,random_state=0)
model = LinearRegression()
t0 = time.time()
model.fit(X_train,y_train)
time = time.time() - t0
y_test_pred = model.predict(X_test)
mae = mean_absolute_error(y_test,y_test_pred)
mse = mean_square_error(y_test,y_test_pred)
print(f"MAE of test data is {mae}, MSE of test data is {mse}")
y_test = pd.DataFrame(y_test)
y_test_pred = pd.DataFrame(y_test_pred)
y_test.reset_index(drop=True, inplace=True)
y_comp = pd.concat([y_test,y_test_pred],axis=1)

plt.figure(figsize=(20,8),dpi=80)
plt.plot([i for i in range(100)],y_test.iloc[0:100],'-r',label = 'y_test')
plt.plot([i for i in range(100)],y_test_pred.iloc[0:100],'-b',label = 'y_test_pred')
plt.xlabel('order_num')
plt.ylabel('rain(mm)')
plt.title("rainfall prediction and real value", fontdict={'size': 20})
plt.legend(loc='upper right')
plt.show()

model.coef_

output:

MAE of test data is 2.1369088599651804
MSE of test data is 9.636538725685924
LR模型训练耗时:1.7940309047698975

array([ 2.96820226, -0.29848804,  4.23014651, -2.37472558,  2.87775803,
       -1.42154033, -2.11950521,  2.63717558,  8.94134443,  0.13429653,
       -0.10657206,  0.39007033, -0.18653644,  0.10141807,  0.72446361,
        1.90372903,  0.52602944,  0.11272174,  3.26672259,  0.85920266,
       -6.98069335])

在这里插入图片描述

  绘制了前100组数据的散点折线图,可以比较直观地看出其预测变化走向和真实值的走向趋势是相同的,但是由于LR多元线性回归模型比较简单,而我们Label与Features之间的线性相关性并不是很强,所以预测和真实值之间还是存在比较大的偏差的,并且对那些异常大的值的预测并不是很接近。
  缺点:LR模型容易欠拟合且预测的精度不高
  优点:LR模型实现简单,便于理解且计算代价不高,参数少,耗时少
  并且我们这里使用到的是SKlearn中的LinearRegression()进行训练,参数全部设置为默认。

注意:在数据需要进行归一化时,对数据偏度处理是需要的:

data = train.drop(labels=['Id','minutes_past','Expected'],axis=1)
stdsc = StandardScaler()
data = stdsc.fit_transform(data)
data= minmax_scale(data)
X = pd.DataFrame(data)
y = train['Expected']
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值