Platypusに関しては前回、Python 多目的最適化「Platypus」:自作モジュールによる回帰モデルを読む場合 - HK29’s blogで述べた。
本記事では、回帰式を自作モジュールでなくて、シリアライズにより保存した「.joblib」ファイルを読み込んで実行するコードの雛形である。
得られるデータは上記リンク先と同様で次の3つである。
1. 各世代で得られた目的値を説明変数と共にcsvファイルに保存する

2. 複数の目的関数を横軸,縦軸にしてパレート解として可視化

3. 全データを散布図にして可視化

■本プログラム
import os, sys
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression
'''
from sklearn.svm import SVR
from sklearn.ensemble import GradientBoostingRegressor
from sklearn.ensemble import RandomForestRegressor
from sklearn import neural_network
'''
from platypus import NSGAII, Problem, Real, Integer
import itertools
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import seaborn as sns
from joblib import dump, load
regr1 =load('Weight_LinearRegression_none_interaction_ver_model.joblib')
regr2 =load('Waist_LinearRegression_none_interaction_ver_model.joblib')
regr3 =load('Pulse_LinearRegression_none_interaction_ver_model.joblib')
def my_function_from_joblib(vars):
Chins = vars[0]
Situps = vars[1]
Jumps = vars[2]
X_np = np.array([[Chins, Situps, Jumps]])
X_df = pd.DataFrame(X_np, columns = ['Chins', 'Situps', 'Jumps'])
pred_Y1 = regr1.predict(X_df)
pred_Y2 = regr2.predict(X_df)
pred_Y3 = regr3.predict(X_df)
return [pred_Y1[0], pred_Y2[0], pred_Y3[0]]
def main(my_title):
problem = Problem(3, 3)
problem.directions[:] = [Problem.MAXIMIZE, Problem.MINIMIZE, Problem.MINIMIZE]
Chins = Integer(1, 17)
Situps = Integer(50, 250)
Jumps = Integer(25, 250)
problem.types[:] = [Chins, Situps, Jumps]
problem.function = my_function_from_joblib
print(problem.function)
algorithm = NSGAII(problem, 200)
algorithm.run(10000)
column_name_list = ['Chins', 'Situps', 'Jumps',
'Weight', 'Waist', 'Pulse']
column_name_list = ','.join(column_name_list)
row_list=[]
with open(my_title + '.csv', 'w') as f:
f.writelines(column_name_list)
f.write('\n')
for i in range(len(algorithm.result)):
row_list.append(Chins.decode(algorithm.result[i].variables[0]))
row_list.append(Situps.decode(algorithm.result[i].variables[1]))
row_list.append(Jumps.decode(algorithm.result[i].variables[2]))
row_list.extend(algorithm.result[i].objectives[:])
print(row_list)
row_list_str = ','.join(map(str, row_list))
f.writelines(row_list_str)
f.write('\n')
row_list=[]
df = pd.read_csv(my_title + '.csv')
plt.figure()
sns.pairplot(df)
plt.savefig(my_title + '_Summary.png')
plt.close()
plt.scatter([s.objectives[0] for s in algorithm.result],
[s.objectives[1] for s in algorithm.result],
facecolors='none', edgecolors='r')
plt.grid()
plt.xlabel("Weight")
plt.ylabel("Waist")
plt.title(my_title)
plt.savefig(my_title + '_f1_f2.png')
plt.close()
if __name__ == '__main__':
my_title = 'linnerud'
main(my_title)
●参考リンク
GitHub - Project-Platypus/Platypus: A Free and Open Source Python Library for Multiobjective Optimization
●関連リンク
hk29.hatenablog.jp
hk29.hatenablog.jp
以上
<広告>
リンク