【python机器学习手册】第11章 模型评估

本文深入探讨了Python在机器学习领域的模型评估方法,详细阐述了如何衡量预测模型的性能,包括各种评估指标和交叉验证技术。通过实例解析,读者将掌握如何使用常用库如sklearn进行模型性能分析。
摘要由CSDN通过智能技术生成
#11.1模型评估
#用于评估算法生成的模型在实际应用中的表现
#解决方案:创建一个流水线,对数据进行预处理、训练模型,然后用交叉验证方法评估模型的性能
from sklearn import datasets
from sklearn import metrics#计算性能指标
from sklearn.model_selection import KFold,cross_val_score#k折和交叉验证是两个东西
from sklearn.pipeline import make_pipeline#流水线
from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
digits=datasets.load_digits()#加载手写数字的数据集
features=digits.data#创建特征矩阵
target =digits.target#创建目标向量
standardizer=StandardScaler()#创建标准化对象
LR=LogisticRegression()#创建逻辑回归对象
pipeline=make_pipeline(standardizer,LR)#创建包含数据标准化和逻辑回归的流水线(pipeline),管道串行的一种实现方法
########
kf=KFold(n_splits=10,shuffle=True,random_state=1)#创建K折交叉验证对象
#n_splits=10 表示十折
# shuffle=True,random_state=1 表示是否随机打乱顺序,是的话当然要设置种子数
cv_results=cross_val_score(pipeline,#执行K折交叉验证
                           features,#特征矩阵
                           target,#目标向量
                           cv=kf, #交叉验证方法,cv表示交叉验证
                           scoring="accuracy", #损失函数为准确率
                           n_jobs=-1) #使用所有CPU内核
cv_results.mean()#计算得分的平均值
# sklearn.cross_validation.cross_val_score(estimator, X, y=None, scoring=None,
# cv=None, n_jobs=1, verbose=0, fit_params=None, pre_dispatch=‘2*n_jobs’)
# 其中主要参数含义:
# estimator:估计方法对象(分类器)
# X:数据特征(Features)
# y:数据标签(Labels)
# soring:调用方法(包括accuracy和mean_squared_error等等)
# cv:几折交叉验证(默认为5)
# n_jobs:同时工作的cpu个数(-1代表全部)
0.9693916821849783

#11.2创建一个基准回归模型:需要一个简单基础回归模型,用于与算法生成的模型进行对比。
#解决方案:使用sklearn的DummyRegressor创建一个简单的基准回归模型
#DummyRegressor允许我们创建一个简单的模型,以此为基准和实际的模型进行对比
from sklearn.datasets import load_boston
from sklearn.dummy import DummyRegressor
from sklearn.model_selection import train_test_split
boston = load_boston()# 加载数据
features,target = boston.data,boston.target#创建特征矩阵和目标向量
features_train,features_test,target_train,target_test = train_test_split(features,target,random_state=0)
#将数据分为测试集和训练集
# train_data:所要划分的样本特征集
# train_target:所要划分的样本结果
# test_size:样本占比,如果是整数的话就是样本的数量,test_size=0.4(默认值)
# random_state:是随机数的种子。
dummy = DummyRegressor(strategy='mean')#创建DummyRegressor对象,strategy='mean'表示所使用的预测方法为平均值
#如果将strategy='constant',并且使用常数,所有预测结果都会是一个常数
dummy.fit(features_train,target_train)#训练回归模型
dummy.score(features_test,target_test)#计算R方得分,R2->1,解释越好,相关性越高
-0.001119359203955339
#创建一个将所有样本预测为20的DummyRegressor
clf = DummyRegressor(strategy='constant',constant=20)
#如果将strategy='constant',并且使用常数,所有预测结果都会是一个常数
clf.fit(features_train,target_train)
clf.score(features_test,target_test)
-0.06510502029325727
#接下来训练自己的模型并计算性能得分,并于基准模型进行比较
from sklearn.linear_model import LinearRegression
ols=LinearRegression()
ols.fit(features_test,target_test)
ols.score(features_test,target_test)
0.6903824800762361

#11.3创建一个基准分类模型:需要一个简单基础分类模型,用于与算法生成的模型进行对比
#解决方案:使用sklearn的DummyClassifier创建一个简单的基准分类模型
from sklearn.datasets import load_iris
from sklearn.dummy import DummyClassifier
from sklearn.model_selection import train_test_split
iris=load_iris()# 加载数据
features,target=iris.data,iris.target#创建特征矩阵和目标向量
features_train,features_test,target_train,target_test = train_test_split(features,target,random_state=0)#将数据分为测试集和训练集
dummy = DummyClassifier(strategy='uniform',random_state = 1)#创建DummyClassifier对象
#strategy='uniform'随机生成均匀的预测二,if样本2男8女,预测结果在5男5女
#strategy='stratified'预测结果和样本结果一样,都2男8女
dummy.fit(features_train,target_train)#训练回归模型
dummy.score(features_test,target_test)#计算R方得分
0.42105263157894735
# 接下来训练自己的模型并计算性能得分,并于基准模型进行比较
from sklearn.ensemble import RandomForestClassifier
rfc=RandomForestClassifier()
rfc.fit(features_train,target_train)#这里是训练集
rfc.score(features_test,target_test)#这里是测试集
0.9736842105263158

#11.4评估二元分类器:给定一个训练后的二元分类器,评估它的性能
# 解决方案:使用sklearn的cross_val_score方法进行交叉验证,同时使用Scoring参数来决定性能评估指标
# 可以在准确率、精确度、召回率和F1分数等多种指标中选择。

##准确率
#当存在类别不均衡的时候,使用准确率作为衡量标准hui'chu
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值