gpt4 book ai didi

python - 如何按顺序链接 ML 模型/管道模型?

转载 作者:行者123 更新时间:2023-11-28 17:55:36 25 4
gpt4 key购买 nike


前提:
我一直在研究这个 ML 数据集,我发现我的 ADA boost 和 SVM 在检测 TP 方面非常好。两个模型的混淆矩阵是相同的,如下所示。
这是图片:
SVM Confusion Matrix

在我训练过的 10 个模型中,有 2 个是 ADA 和 SVM。其他 8 个,一些精度较低,另一些精度高 ~+-2%

主要问题:

我如何链接/流水线以便我的所有测试用例都按以下方式处理?

  1. 让所有案例通过 SVM 和 ADA。如果 SVM 或 ADA 有 80%+ 置信度返回结果
  2. 否则,如果 SVM 或 ADA 的置信度不高,则仅让其他 8 个模型评估那些测试用例以做出最终决定

可能的解决方案:
我的潜在尝试涉及使用 2 个投票分类器。第一个分类器只有 ADA 和 SVM,第二个分类器有其他 8 个模型。但我不知道如何让这项工作成功

这是我的方法的代码:

from sklearn.ensemble import VotingClassifier
ensemble1=VotingClassifier(estimators=[
('SVM',model[5]),
('ADA',model[7]),
], voting='hard').fit(X_train,Y_train)
print('The accuracy for ensembled model is:',ensemble1.score(X_test, Y_test))


#I was trying to make ensemble 1 the "first pass" if it was more than 80% confident in it's decision, return the result
#ELSE, ensemble 2 jumps in to make a decision


ensemble2=VotingClassifier(estimators=[
('LR',model[0]),
('DT',model[1]),
('RFC',model[2]),
('KNN',model[3]),
('GBB',model[4]),
('MLP',model[6]),
('EXT',model[8]),
('XG',model[9])
], voting='hard').fit(X_train,Y_train)


#I don't know how to make these two models work together though.

额外问题:
这些问题是为了解决我的一些额外问题,而不是主要问题:

  • 我正在尝试做的事情值得吗?

  • 混淆矩阵只有真阳性和假阳性是否正常?还是这表明训练不正确?如上图 Model 5 所示。

  • 我的模型在个人层面上的准确性是否被认为是好的?这些模型预测患心脏病的可能性。精度如下:
    All the models

抱歉发了这么长的帖子,感谢您的所有意见和建议。我是 ML 的新手,所以非常感谢任何指点。

最佳答案

这是一个简单的实现,有望解决链接多个估算器的主要问题:

class ChainEstimator(BaseEstimator,ClassifierMixin):
def __init__(self,est1,est2):
self.est1 = est1
self.est2 = est2

def fit(self,X,y):
self.est1.fit(X,y)
self.est2.fit(X,y)
return self

def predict(self,X):
ans = np.zeros((len(X),)) - 1
probs = self.est1.predict_proba(X) #averaging confidence of Ada & SVC
conf_samples = np.any(probs>=.8,axis=1) #samples with >80% confidence
ans[conf_samples] = np.argmax(probs[conf_samples,:],axis=1) #Predicted Classes of confident samples
if conf_samples.sum()<len(X): #Use est2 for non-confident samples
ans[~conf_samples] = self.est2.predict(X[~conf_samples])
return ans

你可以这样调用:

est1 = VotingClassifier(estimators=[('ada',AdaBoostClassifier()),('svm',SVC(probability=True))],voting='soft')
est2 = VotingClassifier(estimators=[('dt',DecisionTreeClassifier()),('knn',KNeighborsClassifier())])
clf = ChainEstimator(est1,est2).fit(X_train,Y_train)
ans = clf.predict(X_test)

现在如果你想将你的链接建立在 est1 的性能上,你可以做这样的事情来记录它在训练期间的性能,并添加更多的 if predict 函数上的 s:

def fit(self,X,y):
self.est1.fit(X,y)
self.est1_perf = cross_val_score(self.est1,X,y,cv=4,scoring='f1_macro')
self.est2.fit(X,y)
self.est2_perf = cross_val_score(self.est2,X,y,cv=4,scoring='f1_macro')
return self

请注意,您不应该对此类问题使用简单准确度。

关于python - 如何按顺序链接 ML 模型/管道模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58665133/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com