我需要构建一个模型,该模型基于分类输出选择一个模型进行回归。在我的示例中,有3个独立的回归变量和1个分类器。根据先前的分类选择回归模型。
我想要一个集成模型,以便可以编译它并使用Android中tensorflow Lite的解释器。
在此示例中,我获得y_class中的类,然后选择模型模型[y_class]最终进行预测(回归)。
y_prob= clf.predict(test)
y_class = y_prob.argmax(axis=-1)[0]
y_regress = models[ y_class ].predict(test)
我希望集成模型能够直接获取y_regress。
import pandas as pd
import numpy as np
from keras.layers import Input, Dense
from keras.models import Model
from keras import optimizers
import tensorflow.keras.backend as K
import keras
df = pd.read_csv('https://www.dropbox.com/s/jc36fdgmi43iy41/tflitetest.csv?dl=1')
df = df.iloc[:,1:]
X = df.iloc[:,0:12] #data
y = df.iloc[:,12:14] # Values for regression
f = df.f # 3 classes
#building the classifier
inputx = Input(shape=(12,))
x = Dense(30, activation='sigmoid')(inputx)
floor = Dense(3, activation='softmax')(x)
clf = Model(inputs=inputx,output=floor)
clf.compile(
optimizer=keras.optimizers.Adadelta(),
loss='sparse_categorical_crossentropy',
metrics=['sparse_categorical_accuracy'])
clf.fit(X,f,epochs=200)
#building 3 independent Regressors
models = {}
for i in range(3):
x = Dense(30, activation='sigmoid')(inputx)
x = Dense(100, activation='sigmoid')(x)
y1y2 = Dense(2)(x)
models[i]= Model(inputs=inputx,output=y1y2)
models[i].compile(
optimizer='adam',
loss='mean_squared_error',
metrics=['accuracy'])
models[i].fit(X[ f==i] , y[f==i] ,epochs=200)
test = X.iloc[-1].values.reshape((1,-1))
y_prob= clf.predict(test)
y_class = y_prob.argmax(axis=-1)[0]
y_regress = models[ y_class ].predict(test)
print(y_regress)