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

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

时间:2023-03-26 14:22:06 Python

背景介绍在学习sklearn的时候,除了算法的坎坷,还得学习matplotlib可视化。对于我的实际应用来说,可视化更重要,但是matplotlib的易用性和美观性实在不敢恭维。先后用过plotly和seaborn,最后看中了Bokeh,因为它可以和Flask完美结合,数据看板的开发难度大大降低。前段时间看到这个库可以更方便的实现数据探索,今天有空学习了下。本来是去看英文文档的,结果发现已经有人在做汉化了。虽然看起来是谷歌翻译的,但是本着用着省力一点的精神,我半抄半学,找了一些相关的文档。不太一致。#http://www.scikit-yb.org/zh/latest/quickstart.html#http://www.scikit-yb.org/en/latest/quickstart.htmlimportpandasaspddata=pd.read_csv('data/bikeshare/bikeshare.csv')X=data[[“季节”、“月份”、“小时”、“假期”、“工作日”、“工作日”、“天气”、“温度”、“感觉”、“humidity","windspeed"]]y=data["riders"]fromyellowbrick.featuresimportRank2Dvisualizer=Rank2D(algorithm="pearson")visualizer.fit_transform(X.values)visualizer.poof()#在笔记本中显示#visualizer.poof(outpath="pcoords.jpg",clear_figure=True)#输出为png和jpg格式。从上图可以看出,特征向量7和8是强相关的;0和1的相关系数也比较高。接下来我们通过曲线拟合来看一下两者之间的相关性。fromyellowbrick.featuresimportJointPlotVisualizervisualizer=JointPlotVisualizer(feature='temp',target='feelslike')visualizer.fit(X['temp'],X['feelslike'])visualizer.poof()JointPlotVisualizer可以让我们快速查看具有强相关性的特征,以及每个特征的范围和分布。需要注意的是,图中的每个轴都被归一化为0到1之间的值。这是机器学习中非常常用的技术,可以减少一个特征对另一个特征的影响。fromyellowbrick.regressorimportResidualsPlotfromsklearn.linear_modelimportLinearRegressionfromsklearn.model_selectionimporttrain_test_split#创建训练集和测试集X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.1)visualizer=ResidualsPlot(LinearRegression())visualizer.fit(X_train,y_train)visualizer.score(X_test,y_test)visualizer.poof()残差图也给我们展示了模型的error是如何产生的:粗横线表示residuals=0,即没有Error;线上方或下方的点表示误差值的大小。比如大部分残差都是负数,它们的值是按实际-预期计算的,也就是说大部分时候预测值大于实际值。例如,我们的模型总是预测骑手人数多于实际人数。|importnumpyasnpfromsklearn.linear_modelimportRidgeCVfromyellowbrick.regressorimportAlphaSelection#RidgeCV:多个alpha,得到多个对应的bestw,然后得到bestw和对应的alphaalphas=np.logspace(-10,1,200)visualizer=AlphaSelection(RidgeCV(alphas=alphas))visualizer.fit(X,y)visualizer.poof()alpha=visualizer.alpha_visualizer.alpha_3.612342699709438在探索模型族的过程中,第一个要考虑模型如何变得更加复杂。随着模型的复杂性增加,方差增加导致的误差也会增加,因为模型变得过拟合并且无法泛化到未知数据。但是,模型越简单,偏差越大;该模型欠拟合,因此有更多的错误预测。大多数机器学习的目的是产生一个适度复杂的模型,找到偏差和方差之间的中间点。对于线性模型,复杂性来自特征本身以及根据模型分配给它们的值。因此,希望用最少的线性模型特征获得最好的解释结果。正则化是实现上述目标的技术之一,它是引入一个alpha参数来归一化其互系数的权重并惩罚其复杂性。Alpha和复杂性之间存在负相关关系。alpha值越大,复杂度越小,反之亦然。我们现在可以训练我们的最终模型并使用PredictionError对其进行可视化:)visualizer.poof()使用预测误差可视化器将实际(测量)值与预期(预测)值进行可视化。黑色45度虚线表示误差为零的点。与残差图一样,这使我们能够看到错误发生的位置以及值是多少。在这张图上,我们可以看到大部分积分都集中在不到200名车手身上。我们可能想尝试正交匹配追踪(OMP)或样条曲线来训练考虑更多局部性的回归模型。我们还可以看到,残差图中的奇数拓扑似乎已经被Ridge回归修正了,我们的模型在大小值之间有更多的平衡。岭正则化可能纠正了两个特征之间的协方差问题。当我们以其他模型的形式推进我们的数据分析时,我们可以继续使用可视化工具来快速比较和可视化我们的结果。希望这个过程让您了解如何通过Scikit-Learn将Visualizers集成到机器学习中,并启发您将其应用到您的工作中!有关如何开始使用Yellowbrick的更多信息,请查看模型选择教程。然后,您可以在可视化工具和API上快速查看更具体的可视化工具。