不同算法下校准曲线对比

这篇博客探讨了四种常见的机器学习模型——随机森林、高斯贝叶斯、逻辑回归和支持向量机在分类任务上的表现。通过使用sklearn库,作者创建了校准曲线来评估模型的预测概率与实际结果的一致性,并展示了当特征冗余度变化时,这些模型的性能如何受到影响。实验结果显示,模型的训练和预测时间、准确率以及校准性能各有差异,为选择合适的分类器提供了参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()

#结果如下:

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值