データは昭和電業社の「モータ制御開発 支援システム Simtrol-m」から
まぁこんなデータなわけです

普通のPID制御なんですが、これを学習させて実測値に近いシミュレートをしようという魂胆です
具体的には、
比例定数と積分定数、微分定数を突っ込めば、電流、電圧、回転数が出るよというものを目指します。

と書きましたが諸事情によりとりあえず積分定数のみ

import csv
import os
from sklearn.tree import DecisionTreeRegressor
import matplotlib.pyplot as plt
import numpy as np

train_X = []
train_Y = []
test_X = [[] for i in range(6)]
test_Y = [[] for i in range(6)]
filepathS = ["*:\*******\****.csv", \
             "*:\*******\****.csv", \
             "*:\*******\****.csv", \
             "*:\*******\****.csv", \
             "*:\*******\****.csv", \
             "*:\*******\****.csv"]

for a,filepath in enumerate(filepathS):
    basename = os.path.basename(filepath)
    basename = basename[:-4]
    basename = basename.split("d")

    ConstInteg = float(basename[1])
  
  #csv読み込み
    csv_file = open(filepath, "r", encoding="ms932", errors="", newline="" )
    f = csv.reader(csv_file, delimiter=",", doublequote=True, lineterminator="\r\n", quotechar='"', skipinitialspace=True)

    i = 0
    for row in f:
        if i > 5 :
            print(row)

            train_X.append([ConstInteg,float(row[0])])
            train_Y.append([float(row[2]),float(row[3]),float(row[4])])

            test_X[a].append([ConstInteg,float(row[0])])
            test_Y[a].append([float(row[2]),float(row[3]),float(row[4])])

        i += 1

clf = DecisionTreeRegressor()
# 学習させる
clf.fit(train_X, train_Y)

print(clf.score(train_X, train_Y))

# -----------------------------------------------------
# 以下、結果

ConstantOfIntegration = 3.8

test_X1 = []
for b in test_X[1]:
    test_X1.append([ConstantOfIntegration,b[1]])

result = clf.predict(test_X1)

# 以下グラフ用
result = np.array(result)
test_X = np.array(test_X)

x = test_X[0][:,[1]]
y1 = result[:,[0]]
y2 = result[:,[1]]
y3 = result[:,[2]]

fig, (axL, axR) = plt.subplots(ncols=2, figsize=(22,12))

axL.plot(x, y1, label='(rpm)')
axL.set_title("Constant of Integration = "+str(ConstantOfIntegration))
axL.set_xlabel('time[s]')
axL.set_ylabel('Rotational speed')
axL.grid(True)

y_2000 = []
for c,yy1 in enumerate(y1):
    if yy1 >= 2000:
        y_2000.append(x[c])

axL.legend(title='2000rpm>= '+str(y_2000[0]), loc='upper left')

axR.plot(x, y2, label='(V)', color='r')
axR.plot(x, y3, label='(A)', color='m')
axR.set_title("Constant of Integration = "+str(ConstantOfIntegration))
axR.set_xlabel('time[s]')
axR.set_ylabel('Voltage / Intecity of Current')
axR.grid(True)
axR.legend(title='Vmax = '+str(max(y2))+'\nAmax = '+str(max(y3)))

plt.show()

シリアライズはしてません。

実行結果がこちら

学習データの範囲内ならそこそこの精度?
scikit-learn万歳!!
もっと学習用のデータが欲しい!!