不同算法下校准曲线对比

from sklearn.datasets import make_classification
from sklearn.calibration import calibration_curve  # 校准曲线
from sklearn.ensemble import RandomForestClassifier
from sklearn.naive_bayes import GaussianNB
from sklearn.linear_model import LogisticRegression
from sklearn.svm import SVC
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import time
import matplotlib.pyplot as plt


x,y = make_classification(n_samples=10000
                           ,n_features=20
                           ,n_informative=10 # 含有用信息的特征
                           ,n_classes=2
                           ,random_state=42)

xtrain,xtest,ytrain,ytest = train_test_split(x,y,test_size=0.2,random_state=42)

for name,model in {'随机森林':RandomForestClassifier(),'高斯贝叶斯':GaussianNB(),'逻辑回归':LogisticRegression(C=0.1),'支持向量机':SVC()}.items():
    start = time.time()
    model.fit(xtrain,ytrain)
    end = time.time()
    print(f'{name}用时{end-start};正确率{accuracy_score(ytest,model.predict(xtest))}')



fig,axs = plt.subplots(2,4)
fig.suptitle('不同算法下的校准曲线')
for i in enumerate([5,15]):
    x,y = make_classification(n_samples=10000
                               ,n_features=20
                               #,n_informative=i[1]
                               ,n_redundant=i[1]
                               ,n_classes=2
                               ,random_state=42)

    for index,model in zip([0,1,2,3],{'随机森林':RandomForestClassifier(),
                                      '高斯贝叶斯':GaussianNB(),'逻辑回归':LogisticRegression(C=0.1),'支持向量机':SVC(probability=True)}.items()):
        model[1].fit(xtrain,ytrain)
        prob_true,prob_pred = calibration_curve(ytest,model[1].predict_proba(xtest)[:,1],n_bins=10)
        axs[i[0],index].plot([0,1],[0,1]) # 添加对角线做对比
        axs[i[0],index].plot(prob_pred,prob_true,linestyle='dashdot',label=f'{model[0]}(冗余特征{i[1]})')
        axs[i[0],index].legend(loc='upper center')

plt.show()

#结果如下:

在这里插入图片描述

  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值