标签: ensemble-learning

Keras 垂直集成模型,条件介于两者之间

我训练了两个独立的模型

  • ModelA:检查输入文本是否与我的工作相关(二元分类器 [相关/不相关])
  • ModelB:相关文本的分类器(Classifier [good/normal/bad])。仅将相关文本从 ModelA 中继到此模型

我想要

  • ModelC:输出 [good/normal/bad/not-related] 的集成分类器
  • 我会分批训练。并且可以在一批中混合not-relatedgood/normal/bad。我需要他们分开。

我需要的一些伪代码

# Output of modelA will be a vector I presume `(1, None)` where `None` is batch
def ModelC.predict(input):
    outputA = ModelA(input)
    if outputA == 'not-related':
        return outputA
    return ModelB(outputA)
Run Code Online (Sandbox Code Playgroud)

我不知道如何if在模型推理中包含逻辑。我怎样才能做到这一点?

python python-3.x deep-learning ensemble-learning keras

7
推荐指数
1
解决办法
123
查看次数

有没有办法集成两个针对相同类别训练的 keras (h5) 模型

我已经用不同的数据集为相同的类标签训练了两个 keras 模型。我如何将模型 keras_model.h5 和 keras_model2.h5 集成在一起,并制作另一个 keras 模型,即 keras_ensemble.h5。我尝试参考各种互联网资源,但运气不佳。有人可以帮我编写集成它的代码吗? 这是我训练过的模型

请帮助我解决这个问题。谢谢。

编辑:这是我的代码,在回答我的问题 Frightera 的人的帮助下我能够完成该代码

 import tensorflow.keras
    import tensorflow as tf
    from PIL import Image, ImageOps
    import numpy as np
    
    # Disable scientific notation for clarity
    np.set_printoptions(suppress=True)
    
    # Load the model
    keras_model = tensorflow.keras.models.load_model('keras_model.h5', compile=False)
    keras_model._name = 'model1'
    keras_model2 = tensorflow.keras.models.load_model('keras_model2.h5', compile=False)
    keras_model2._name = 'model2'
    models = [keras_model, keras_model2]
    #model_input = tf.keras.Input(shape=(125, 125, 3))
    model_input = tf.keras.Input(shape=(224, 224, 3))
    model_outputs = [model(model_input) for model in models]
    ensemble_output = tf.keras.layers.Average()(model_outputs) …
Run Code Online (Sandbox Code Playgroud)

python machine-learning ensemble-learning keras image-classification

7
推荐指数
1
解决办法
8427
查看次数

理解集成学习及其在Matlab中的实现

集合是否学习特定分类器的许多实例的示例,例如决策树分类器; 或者它是几个分类器的混合,如神经网络,决策树,SVM等?

我已经研究了这个维基百科Bagging一个集成学习者描述.它说:

套袋导致"不稳定程序的改进"(Breiman,1996),其中包括例如神经网络,分类和回归树,以及线性回归中的子集选择(Breiman,1994).

我对此描述感到困惑.我也看着MATLAB的实现集成算法的.例如这一个:

load fisheriris
ens = fitensemble(meas,species,'AdaBoostM2',100,'Tree')
Run Code Online (Sandbox Code Playgroud)

meas并且species是该fitensemble功能的输入.在这个例子中,它使用AdaBoostM2类型的弱学习器Tree并且正在使用100它们.如何解决这个函数的这个简单实例,以表明集合学习用于组合不同的分类器,如Neural Net, KNN, Naive Bayes一起?

任何人都可以解释什么是实际的集合学习以及MATLAB在其fitensemble函数实现中尝试做什么?

algorithm matlab machine-learning decision-tree ensemble-learning

6
推荐指数
1
解决办法
6276
查看次数

当各个分类器适合不同的数据集时,如何在 sklearn 中构建投票分类器?

我正在使用高度不平衡的数据构建分类器。我感兴趣的测试策略是使用3 个不同的重采样数据集集成一个模型。换句话说,每个数据集将包含稀有类别的所有样本,但只有丰富类别的 n 个样本(本文中提到的技术#4)。

我想在每个重采样数据集上拟合 3 个不同的模型,然后使用另一个VotingClassifiers(或类似的)模型组合各个模型的结果。我知道构建一个投票分类器看起来像这样: VotingClassifier

# First Model
rnd_clf_1 = RandomForestClassifier()
xgb_clf_1 = XGBClassifier()

voting_clf_1 = VotingClassifier(
    estimators = [
        ('rf', rnd_clf_1), 
        ('xgb', xgb_clf_1),
    ],
    voting='soft'
)

# And I can fit it with the first dataset this way:
voting_clf_1.fit(X_train_1, y_train_1)
Run Code Online (Sandbox Code Playgroud)

但是,如果将它们三个拟合到不同的数据集上,如何堆叠它们呢?例如,如果我有三个拟合模型(请参见下面的代码),我可以构建一个函数,.predict_proba()在每个模型上调用该方法,然后“手动”平均各个概率。

但是……还有更好的办法吗?

# Fitting the individual models... but how to combine the predictions?
voting_clf_1.fit(X_train_1, y_train_1)
voting_clf_2.fit(X_train_2, y_train_2)
voting_clf_3.fit(X_train_3, y_train_3)
Run Code Online (Sandbox Code Playgroud)

谢谢!

machine-learning scikit-learn ensemble-learning

6
推荐指数
1
解决办法
2407
查看次数

与 PyTorch 并行运行一个集成的多个模型

我的神经网络具有以下架构:

input -> 128x (separate fully connected layers) -> output averaging
Run Code Online (Sandbox Code Playgroud)

我正在使用 ModuleList 来保存完全连接层的列表。这是它在这一点上的样子:

class MultiHead(nn.Module):
    def __init__(self, dim_state, dim_action, hidden_size=32, nb_heads=1):
        super(MultiHead, self).__init__()

        self.networks = nn.ModuleList()
        for _ in range(nb_heads):
            network = nn.Sequential(
                nn.Linear(dim_state, hidden_size),
                nn.Tanh(),
                nn.Linear(hidden_size, dim_action)
            )
            self.networks.append(network)

        self.cuda()
        self.optimizer = optim.Adam(self.parameters())
Run Code Online (Sandbox Code Playgroud)

然后,当我需要计算输出时,我使用一个for ... in构造来执行所有层的前向和后向传递:

q_values = torch.cat([net(observations) for net in self.networks])

# skipped code which ultimately computes the loss I need

self.optimizer.zero_grad()
loss.backward()
self.optimizer.step()
Run Code Online (Sandbox Code Playgroud)

这有效!但我想知道我是否不能更有效地做到这一点。我觉得通过做一个for...in,我实际上是在逐个浏览每个单独的 FC 层,而我希望这个操作可以并行完成。

python deep-learning ensemble-learning pytorch

6
推荐指数
1
解决办法
3784
查看次数

sklearn Pipeline:“ColumnTransformer”类型的参数不可迭代

我正在尝试使用管道来提供集成投票分类器,因为我希望集成学习器使用在不同特征集上训练的模型。为此,我遵循了[1]中提供的教程。

以下是迄今为止我可以开发的代码。

y = df1.index
x = preprocessing.scale(df1)

phy_features = ['A', 'B', 'C']
phy_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())])
phy_processer = ColumnTransformer(transformers=[('phy', phy_transformer, phy_features)])

fa_features = ['D', 'E', 'F']
fa_transformer = Pipeline(steps=[('imputer', SimpleImputer(strategy='median')), ('scaler', StandardScaler())])
fa_processer = ColumnTransformer(transformers=[('fa', fa_transformer, fa_features)])


pipe_phy = Pipeline(steps=[('preprocessor', phy_processer ),('classifier', SVM)])
pipe_fa = Pipeline(steps=[('preprocessor', fa_processer ),('classifier', SVM)])

ens = VotingClassifier(estimators=[pipe_phy, pipe_fa])

cv = KFold(n_splits=10, random_state=None, shuffle=True)
for train_index, test_index in cv.split(x):
    x_train, x_test = x[train_index], x[test_index]
    y_train, y_test = y[train_index], y[test_index]
    ens.fit(x_train,y_train)
    print(ens.score(x_test, …
Run Code Online (Sandbox Code Playgroud)

python pipeline feature-selection scikit-learn ensemble-learning

6
推荐指数
1
解决办法
4123
查看次数

如何在 scikit-learn 中使用具有不同基数估计器的 adaboost?

我想在 scikit-learning 中使用 adaboost 和几个基本估计器进行回归,但我没有找到任何可以做到这一点的类。除了更改源代码之外,还有什么办法可以做到这一点吗?

python machine-learning adaboost scikit-learn ensemble-learning

5
推荐指数
1
解决办法
1万
查看次数

将二进制堆栈示例调整为多类

我一直在研究这个堆叠的例子.在这种情况下,每组K形折叠产生一列数据,并且对于每个分类器重复这一过程.即:混合的矩阵是:

dataset_blend_train = np.zeros((X.shape[0], len(clfs)))
dataset_blend_test = np.zeros((X_submission.shape[0], len(clfs)))
Run Code Online (Sandbox Code Playgroud)

我需要从多类问题中堆叠预测(每个样本编译15个不同的类).这将为每个clf产生n*15矩阵.

这些矩阵是否应该水平连接?或者在应用逻辑回归之前,是否应该以其他方式组合?谢谢.

python machine-learning matrix ensemble-learning

5
推荐指数
1
解决办法
709
查看次数

如何在投票分类器 (Sklearn) 中调整权重

我正在尝试执行以下操作:

vc = VotingClassifier(estimators=[('gbc',GradientBoostingClassifier()),
                       ('rf',RandomForestClassifier()),('svc',SVC(probability=True))],
                       voting='soft',n_jobs=-1)

params = {'weights':[[1,2,3],[2,1,3],[3,2,1]]}
grid_Search = GridSearchCV(param_grid = params, estimator=vc)
grid_Search.fit(X_new,y)
print(grid_Search.best_Score_)
Run Code Online (Sandbox Code Playgroud)

在此,我想调整参数weights。如果我使用GridSearchCV,它会花费很多时间。因为它需要为每次迭代拟合模型。我猜这不是必需的。最好使用类似于prefitSelectModelFrom函数中使用的东西from sklearn.model_selection

还有其他选择还是我误解了什么?

prediction scikit-learn ensemble-learning

5
推荐指数
1
解决办法
3972
查看次数

R 插入符包错误 - 至少一个类级别不是有效的 R 变量名称

使用插入符号包堆叠时,我在 R 中收到以下错误。

“错误:至少一个类级别不是有效的 R 变量名;这将在生成类概率时导致错误,因为变量名称将转换为 not5, X5sets 。请使用可以用作有效 R 的因子级别变量名称(请参阅 ?make.names 以获取帮助)。”

下面是我试图运行的代码。

library(caretEnsemble)
control <- trainControl(method="repeatedcv", number=10, repeats=3, savePredictions=TRUE, classProbs=TRUE)
algorithmList <- c('rpart', 'knn', 'svmRadial')
set.seed(222)
models <- caretList(Tsets ~ MatchSurface + MatchRound + AgeDiff + SameHand + HeightDiff, data=up_sample, trControl=control, methodList=algorithmList)
results <- resamples(models)
Run Code Online (Sandbox Code Playgroud)

当我删除时classProbs=TRUE,代码会运行,但我想保留它,因为我在此之后尝试运行需要它的其他代码。我的所有变量都是因数或整数,并且我已经更改了所有类,因此它们没有“0”和“1”。因此我无法弄清楚为什么代码不会运行。

我在下面附上了数据结构的图片。如果有人有一些建议,那就太好了。

数据结构

error-handling r ensemble-learning r-caret

5
推荐指数
1
解决办法
8210
查看次数