我训练了两个独立的模型
我想要
not-related和good/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在模型推理中包含逻辑。我怎样才能做到这一点?
我已经用不同的数据集为相同的类标签训练了两个 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
集合是否学习特定分类器的许多实例的示例,例如决策树分类器; 或者它是几个分类器的混合,如神经网络,决策树,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
我正在使用高度不平衡的数据构建分类器。我感兴趣的测试策略是使用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)
谢谢!
我的神经网络具有以下架构:
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 层,而我希望这个操作可以并行完成。
我正在尝试使用管道来提供集成投票分类器,因为我希望集成学习器使用在不同特征集上训练的模型。为此,我遵循了[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
我想在 scikit-learning 中使用 adaboost 和几个基本估计器进行回归,但我没有找到任何可以做到这一点的类。除了更改源代码之外,还有什么办法可以做到这一点吗?
python machine-learning adaboost scikit-learn ensemble-learning
我一直在研究这个堆叠的例子.在这种情况下,每组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矩阵.
这些矩阵是否应该水平连接?或者在应用逻辑回归之前,是否应该以其他方式组合?谢谢.
我正在尝试执行以下操作:
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,它会花费很多时间。因为它需要为每次迭代拟合模型。我猜这不是必需的。最好使用类似于prefit在SelectModelFrom函数中使用的东西from sklearn.model_selection。
还有其他选择还是我误解了什么?
使用插入符号包堆叠时,我在 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”。因此我无法弄清楚为什么代码不会运行。
我在下面附上了数据结构的图片。如果有人有一些建议,那就太好了。

python ×6
scikit-learn ×4
keras ×2
adaboost ×1
algorithm ×1
matlab ×1
matrix ×1
pipeline ×1
prediction ×1
python-3.x ×1
pytorch ×1
r ×1
r-caret ×1