我想在集成模型中使用merf (混合效应随机森林)库,例如使用mlens或mlxtend python库。然而,由于merf的拟合和预测方法是以非传统的方式构造的,我无法理解如何做到这一点:
from merf import MERF
merf = MERF()
merf.fit(X_train, Z_train, clusters_train, y_train)
y_hat = merf.predict(X_test, Z_test, clusters_test)有什么方法可以在集成模型中使用merf库吗?问题是,用mlens或其他集成库构建集成模型时,假设fit方法以X、y作为输入,而预测方法以X作为输入。然而,merf在拟合和预测方法上都有更多的输入。下面是mlens的简化语法
from mlens.ensemble import SuperLearner
ensemble = SuperLearner()
ensemble.add(estimators)
ensemble.add_meta(meta_estimator)
ensemble.fit(X, y).predict(X)我不局限于使用mlens或mlxten。任何其他方法,以建立一个集成模型与merf在其中也会工作。
发布于 2022-08-27 13:50:39
我的意思是,您总是可以使用merf偷偷地进入数据生成过程:P.大多数数据生成都是从manifoldai merf示例获取的
from merf.utils import MERFDataGenerator
import numpy as np
from mlens.ensemble import SuperLearner
from sklearn.svm import SVR
from sklearn.linear_model import Lasso
from mlens.metrics.metrics import rmse
dgm = MERFDataGenerator(m = .6, sigma_b = np.sqrt(4.5), sigma_e = 1)
num_clusters_each_size = 20
train_sizes = [1, 3, 5, 7, 9]
known_sizes = [9, 27, 45, 63, 81]
new_sizes = [10, 30, 50, 70, 90]
train_cluster_sizes = MERFDataGenerator.create_cluster_sizes_array(train_sizes, num_clusters_each_size)
known_cluster_sizes = MERFDataGenerator.create_cluster_sizes_array(known_sizes, num_clusters_each_size)
new_cluster_sizes = MERFDataGenerator.create_cluster_sizes_array(new_sizes, num_clusters_each_size)
train, test_known, test_new, training_cluster_ids, ptev, prev = dgm.generate_split_samples(train_cluster_sizes, known_cluster_sizes, new_cluster_sizes)
X_train = train[['X_0', 'X_1', 'X_2']]
Z_train = train[['Z']]
clusters_train = train['cluster']
y_train = train['y']用(Github)进行拟合和预测之前
ensemble = SuperLearner()
ensemble.add([SVR(), Lasso()])
ensemble.add_meta(SVR())
pred = ensemble.fit(X_train, y_train).predict(X_train)
root = rmse(y_train, pred)
print(root)
>>>
2.345318341087564当然,如果您不介意将merf和ensemble一起使用,那么总体上总是有一个更好的方法。
from keras.models import Sequential
from keras.layers import Dense
from matplotlib import pyplot
from keras import backend
import matplotlib.pyplot as plt
import numpy as np
def rmse(y_true, y_pred):
return backend.sqrt(backend.mean(backend.square(y_pred - y_true), axis=-1))
X = X_train.to_numpy().flatten()
model = Sequential()
model.add(Dense(2, input_dim=1, activation='relu'))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam', metrics=[rmse])
history = model.fit(X, X, epochs=500, batch_size=len(X), verbose=2)
plt.plot(history.history['rmse'])
plt.title("keras loss function")
plt.show()
>>>

请注意,此处使用的X_train来自以前的merf代码:
X_train = train[['X_0', 'X_1', 'X_2']]https://stackoverflow.com/questions/73439564
复制相似问题