20185109054天池(新人赛)工业蒸汽预测
学习使用交流借鉴
参赛链接
Windows
1.下载Anaconda
2.安装相应库:
pip install Keras
注意:
python 依赖:
- Keras - Numpy - Sklearn - Lightgbm - Pandas
赛题背景
火力发电的基本原理是:燃料在燃烧时加热水生成蒸汽,蒸汽压力推动汽轮机旋转,然后汽轮机带动发电机旋转,产生电能。在这一系列的能量转化中,影响发电效率的核心是锅炉的燃烧效率,即燃料燃烧加热水产生高温高压蒸汽。锅炉的燃烧效率的影响因素很多,包括锅炉的可调参数,如燃烧给量,一二次风,引风,返料风,给水水量;以及锅炉的工况,比如锅炉床温、床压,炉膛温度、压力,过热器的温度等。
赛题描述
经脱敏后的锅炉传感器采集的数据(采集频率是分钟级别),根据锅炉的工况,预测产生的蒸汽量。
算法流程
- 导入库
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.pipeline import Pipeline
from sklearn.preprocessing import PolynomialFeatures
# 交叉检验
from sklearn.model_selection import train_test_split, learning_curve, validation_curve, KFold, \
ShuffleSplit, cross_val_score
from sklearn.decomposition import PCA
# 指标算法
from sklearn.linear_model import LinearRegression, BayesianRidge, RidgeCV, Lasso
from sklearn.ensemble import RandomForestRegressor # 集成算法,随机森林
from sklearn.svm import SVR
import lightgbm as lgb
from keras.models import Sequential
from keras.layers import Dense, Activation
from keras.callbacks import ReduceLROnPlateau
- 构建机器学习模型
输入:训练数据的特征数据和标签数据
输出:一个深度神经网络模型
def Model_1(train_x, train_y):
model = Sequential()
model.add(Dense(500, input_shape=(train_x.shape[1],)))
model.add(Activation('sigmoid'))
model.add(Dense(100))
model.add(Activation('relu'))
model.add(Dense(100))
model.add(Activation('relu'))
model.add(Dense(50))
model.add(Activation('tanh'))
# 输出层
model.add(Dense(1))
model.add(Activation('linear'))
# 三种优化器:SGD Adam RMSprop
# 用于配置训练模型
model.compile(optimizer='sgd',
loss='mean_squared_error')
reduce_lr = ReduceLROnPlateau(monitor='loss', factor=0.1,
patience=10, verbose=0,
mode='auto', min_delta=0.001,
cooldown=0, min_lr=0)
epochs = 50 # 迭代次数
model.fit(train_x, train_y, epochs=epochs,
batch_size=20, validation_split=0.0,
callbacks=[reduce_lr],
verbose=0)
return model
参数:
ReduceLROnPlateau
monitor:被监测的数据
factor:学习速率被降低的因素。新的学习速率 = 学习速率 * 因数
patience:没有进步的训练轮数,在这之后训练速率会被降低。
verbose:整数。0:安静,1:更新信息。
mode: {auto, min, max} 其中之一。如果是 min 模式,学习速率会被降低如果被监测的数据已经停止下降;
在 max 模式,学习塑料会被降低如果被监测的数据已经停止上升;
在 auto 模式,方向会被从被监测的数据中自动推断出来
min_delta: 对于测量新的最优化的阀值,只关注巨大的改变。
cooldown:在学习速率被降低之后,重新恢复正常操作之前等待的训练轮数量。
min_lr:学习速率的下边界。
def kfold_loss(df_x, df_y):
'''
输入:特征数据,和标签数据(dataframe类型的)
输出:利用交叉验证划分数据,得到mean_loss
:param df_x:
:param df_y