当前位置: 首页 > 后端技术 > Python

Python机器学习数据探索可视化库yellowbrick-tutorial

时间:2023-03-26 13:16:43 Python

.dataframetbodytrth:only-of-type{vertical-align:middle;}.dataframetbodytrth{vertical-align:top;}.dataframetheadth{text-align:right;}背景介绍学习sklearn时,除了算法的坎坷,还得学习matplotlib可视化。对于我的实际应用来说,可视化更重要,但是matplotlib的Easeofuse和美观度实在是不敢恭维。先后用过plotly和seaborn,最后看中了Bokeh,因为它可以和Flask完美结合,数据看板的开发难度大大降低。前段时间看到这个库可以更方便的实现数据探索,今天有空学习了下。本来是去看英文文档的,结果发现已经有人在做汉化了。虽然看起来是谷歌翻译的,但是本着用着省力一点的精神,我半抄半学,找了一些相关的文档。不太一致。#http://www.scikit-yb.org/zh/latest/tutorial.html模型选择教程在本教程中,我们将查看各种Scikit-Learn模型的分数,并使用Yellowbrick的可视化诊断工具比较来评估它们,以便为我们的数据选择最佳模型。模型选择三元组关于机器学习的讨论通常集中在模型选择上。无论是逻辑回归、随机森林、贝叶斯方法还是人工神经网络,机器学习从业者通常很快就会表明自己的偏好。这主要是出于历史原因。虽然现代第三方机器学习库使各种模型的部署变得微不足道,但传统上,即使是其中一种算法的应用和调整也需要多年的研究。因此,机器学习从业者往往比其他模型对特定(并且更可能是熟悉的)模型有强烈的偏好。然而,模型选择比简单地选择“正确”或“错误”算法更为微妙。实践中的工作流程包括:选择和/或设计最小和最具预测性的特征集,从模型族中选择一组算法,以及优化算法超参数以优化性能。模型选择三元组首先由Kumar等人提出。在2015年的SIGMOD论文中。在他们的论文中,他们讨论了为预测建模而构建的下一代数据库系统的开发。作者指出,由于机器学习在实践中具有高度实验性,因此迫切需要此类系统。“模型选择,”他们解释说,“是迭代和探索性的,因为(模型选择三元组的)空间通常是无限的,分析师通常不可能事先知道哪些(组合)会产生令人兴奋的结果。”令人满意的准确性和/或洞察力。“最近,许多工作流已经通过网格搜索方法、标准化API和基于GUI的应用程序实现了自动化。然而在实践中,人类的直觉和指导可以比穷举搜索更有效地关注模??型质量。通过可视化模型选择过程,使数据科学家们可以转向最终的、可解释的模型并避免陷阱。Yellowbrick库是机器学习的可视化诊断平台,允许数据科学家控制模型选择过程。Yellowbrick扩展了一个新的核心对象Scikit-Learn的API:Visualizer。Visualizers允许作为Scikit-Learn管道过程的一部分进行匹配和转换的视觉模型,在高维数据转换过程中提供视觉诊断。关于数据本教程使用蘑菇数据集的修改版本。我们的目标是预测是否根据蘑菇的特殊性,蘑菇是有毒还是可食用。这些数据包括t中的23种姬松茸科和Lepiota科对应于烤蘑菇的假设样本描述。每一种都被确定为绝对可食用、绝对有毒或未知可食用且不推荐(后一类与有毒物种相结合)。我们的文档“agaricus-lepiota.txt”包含8124个蘑菇实例(4208个可食用和3916个有毒)的3个名义上有价值的属性信息和目标值。让我们用Pandas加载数据。importosimportpandasaspdmushrooms='data/shrooms.csv'#数据集dataset=pd.read_csv(mushrooms)#dataset.columns=namesdataset.head()

.dataframetbodytrth:only-of-type{vertical-align:middle;}.dataframetbodytrth{vertical-align:top;}.dataframetheadth{text-align:right;}id类cap-shapecap-surfacecap-color瘀伤气味鳃-附件鳃-间距鳃大小...茎-颜色-环上方茎-颜色-环下方面纱类型面纱颜色环数环状孢子印迹颜色种群栖息地未命名:2401pxsntpfcn...wwpwopksuNaN12exsytafcb...wwpwopnngNaN23ebswtlfcb...wwpwopnnmNaN34pxywtpfcn...wwpwopksuNaN45exsgfnfwb...wwpwoenagNaN

5行×25列

featurespe=['cap-sha,'cap-surface','cap-color']target=['class']X=dataset[features]y=dataset[target]dataset.shape#比官方文档(8122,25)dataset少了两个蘑菇.groupby('class').count()#每个
.dataframetbodytrth:only-of-type{vertical-align:middle;}.dataframetbodytrth{vertical-缺少一个蘑菇align:top;}.dataframetheadth{text-align:right;}id帽状帽表面帽颜色瘀伤气味鳃附件鳃间距鳃大小鳃颜色...柄颜色环上柄颜色环下-typespore-print-colorpopulationhabitatUnnamed:24classe4207420742074207420742074207420742074207...4207420742074207420742074207420742070p3915391539153915391539153915391539153915...3915391539153915391539153915391539150

2行×24列

我们数据的特征提取,包括目标参数,是分类数据。为了使用机器学习,我们需要将这些值转换成数值数据。要从数据集中提取它,我们必须使用Scikit-Learn的转换器将输入数据集转换为适合模型的数据集。幸运的是,Sckit-Learn提供了一个将分类标签转换为整数的转换器:sklearn.preprocessing.LabelEncoder。不幸的是,它一次只能转换一个向量,所以我们必须调整它以将其应用于多列。有疑问,这个蘑菇分类就是一个向量吗?def__init__(self,columns=None):self.columns=[colforcolincolumns]self.encoders=Nonedeffit(self,data,target=None):"""期望具有命名列的数据框进行编码."""#EncodeallcolumnsifcolumnsisNoneifself.columnsisNone:self.columns=data.columns#为数据框中的每一列设置一个标签编码器self.encoders={column:LabelEncoder().fit(data[column])forcolumninself.columns}returnselfdeftransform(self,data):"""使用编码器转换数据帧。"""output=data.copy()forcolumn,encoderinself.encoders.items():output[column]=encoder.transform(data[column])返回输出建模和评估评估分类器的常用指标精度(Precision)对正结果正确计数除以所有阳性的数量(例如,我们预测实际有多少可食用蘑菇?)召回率是正确阳性的数量除以应该返回的阳性数量(例如,我们是否准确预测了多少有毒蘑菇是有毒的?)F1分数(F1score)是衡量测试准确度的指标。它同时考虑了测试的精确率和召回率来计算分数。F1分数可以解释为精度和召回率的加权平均值,其中F1分数在1时达到最佳值,在0时达到最差值。精度=真阳性/(真阳性+假阳性)召回=真阳性/(falsenegatives+truepositives)F1score=2((precisionrecall)/(precision+recall))现在我们准备好做一些预测了!让我们构建一种评估多个估计器的方法-首先使用传统的数字分数(稍后我们将与Yellowbrick库中的一些视觉诊断进行比较)。fromsklearn.metricsimportf1_scorefromsklearn.pipelineimportPipelinedefmodel_selection(X,y,estimator):"""测试各种估计器。"""y=LabelEncoder().fit_transform(y.values.ravel())model=Pipeline([('label_encoding',EncodeCategorical(X.keys())),('one_hot_encoder',OneHotEncoder(categories='auto')),#此处增加自动分类,否则有warning('estimator',estimator)])#实例化分类模型和可视化器model.fit(X,y)expected=ypredicted=model.predict(X)#计算并返回F1分数(精度和召回率的调和平均值)return(f1_score(expected,predicted))fromsklearn.svmimportLinearSVC,NuSVC,SVCfromsklearn.neighborsimportKNeighborsClassifierfromsklearn.linear_modelimportLogisticRegressionCV,LogisticRegression,SGDClassifierfromsklearn.ensembleimportBaggingClassifier,ExtraTreesClassifier,RandomForestClassifiermodel_selection(X,y,Linea)rSVC())0.6582119537920643importwarningswarnings.filterwarnings("ignore",category=FutureWarning,module="sklearn")#忽略警告model_selection(X,y,NuSVC())0.6878837238441299model_selection(X,y,SVC())0.66251405971model195(X,y,SGDClassifier())0.5738408700629649model_selection(X,y,KNeighborsClassifier())0.6856846473029046model_selection(X,y,LogisticRegressionCV())0.6582119537920643model_selection(X,y,LogisticRegression())0.6578749058025622model_selection(X,y,BaggingClassifier())0.6873901878632248model_selection(X,y,ExtraTreesClassifier())0.6872294372294372model_selection(X,y,RandomForestClassifier())0.6992081007399714初步模型评估根据以上F1分数的结果,哪个模型表现最好?可视化模型评估现在,让我们重构模型评估函数以使用Yellowbrick的ClassificationReport类,这是一个显示精度、召回率和F1分数的模型可视化工具。这种可视化模型分析工具集成了数字分数和颜色编码的热图,以支持轻松解释和检测,尤其是与我们的用例非常相关(危及生命!)的I类错误和II类错误的细微差别。第一种错误(或“误报”)是检测到不存在的影响(例如蘑菇有毒,但实际上可以食用)。第二种类型的错误(或“假阴性”)是未能检测到存在的影响(例如,当蘑菇实际上有毒时却认为它可以食用)。fromsklearn.pipelineimportPipelinefromyellowbrick.classifierimportClassificationReportdefvisual_model_selection(X,y,estimator):"""测试各种估计器。"""y=LabelEncoder().fit_transform(y.values.ravel())model=Pipeline([('label_encoding',EncodeCategorical(X.keys())),('one_hot_encoder',OneHotEncoder()),('estimator',estimator)])#实例化分类模型和可视化器visualizer=ClassificationReport(model,classes=['edible','poisonous'])visualizer.fit(X,y)visualizer.score(X,y)visualizer.poof()visual_model_selection(X,y,LinearSVC())#其他分类器的可视化略visual_model_selection(X,y,RandomForestClassifier())test现在,哪个模型看起来最好?为什么?哪种型号最有可能挽救您的生命?视觉模型评估与数值模型评估有何不同?Precision和recallRecall和综合评价指标F1-Measurehttp://www.makaidong.com/%E5%...f1-score综合考虑准确率和召回率。可视化直观,逃避~作者简介知道yeayee,Py5岁,擅长Flask+MongoDB+SKlearn+Bokeh