利用机器学习拟合复杂函数,并利用遗传算法求最优解
编程语言:Python
利用工具:sklearn、keras、geatpy
步骤原理简述:
1、利用机器学习到数据集的多维特征和输出的拟合函数关系(模型去学,并保存模型)。
2、加载模型函数,利用遗传算法找到该函数的最优解(实际是在不同约束条件下的变量值中,求取拟合函数的最大值或最小值)
工具介绍:
1、sklearn: https://scikit-learn.org/stable/ 官网教程网页,我利用了其中的Regression(回归模型),利用pipeline(将数据预处理和模型训练集成在一起)
基于sklearn的回归模型去拟合,模型如下(采用了LinearRegression和TheilSenRegressor/XGBRegressor(因为数据集较简单采用了线性拟合模型)),sklear提供的回归模型其余多种类型。拟合效果如下:
#LinearRegression
Pipeline([
('scale', MinMaxScaler()),
('reg', linear_model.LinearRegression())
])
data_size: 6715
mse: 36.539681516210784 rmse: 6.044806160350452 mae:4.63826039731241
mape: 3.3011660989748934 r2: 0.808433725049098
#TheilSenRegressor
Pipeline([
('scale', StandardScaler()),
('reg', TheilSenRegressor(random_state=5))
])
data_size: 6715
mse: 35.90317863408285 rmse: 5.9919261205461 mae:4.5948612203764805 mape: 3.281180987786468 r2: 0.8117707132511071```
#XGBRegressor
Pipeline([
('scale', StandardScaler()),
('reg', XGBRegressor(max_depth=5, n_estimators=100, n_jobs=8))
])
data_size: 6715
mse: 44.95695040186879 rmse: 6.704994437124373 mae: 5.23324546786106
mape: 3.69434252416818 r2: 0.7643045816418063
2、keras,官网教程https://keras.io/zh/ 因为数据集较简单,试验过程,具体结构与结果记录如下:
基于keras神经网络的回归拟合
Keras1: (别人原始输出)
y: _Power_chiller data_size: 6715
mse: 109.89059902559949 rmse: 10.482871697469138 mae: 8.92583014113255
mape: 6.267563752145885 r2: 0.4238774988195254
keras2:
model.add(Dense(output_dim=1, input_dim=9))
model.compile(loss='mean_squared_error', optimizer='sgd')
data_size: 6715
mse: 34.67461192389513 rmse: 5.888515256318449 mae: 4.535644083885483
mape: 3.2163304659323524 r2: 0.8182117094074346
keras3:
model.add(Dense(4,input_dim=9,activation='sigmoid'))
model.add(Dense(1,activation='linear')data_size: 6715mse:
mse: 10