Scikit-Learn 模型可视化教程
更多信息请查看原文:https://www.yanxishe.com/TextTranslation/2464?from=jianshu0324
介绍
在这个报告中,我将向您展示如何用几行代码可视化scikit学习模型的性能。我们还将探讨这些情节如何帮助我们更好地理解我们的模型。
创建这些图很简单。
步骤1:导入wandb并初始化新的运行。
importwandbwandb.init(project="visualize-sklearn")
第二步:将各个图可视化。
#Visualizesingleplotwandb.sklearn.plot_confusion_matrix(y_true,y_probas,labels)
或一次可视化所有图:
# Visualize all classifier plotswandb.sklearn.plot_classifier(clf, X_train, X_test, y_train, y_test, y_pred, y_probas, labels,model_name='SVC', feature_names=None)# All regression plotswandb.sklearn.plot_regressor(reg, X_train, X_test, y_train, y_test, model_name='Ridge')# All clustering plotswandb.sklearn.plot_clusterer(kmeans, X_train, cluster_labels, labels=None, model_name='KMeans')
分类
数据集
在这份报告中,我在泰坦尼克号数据集上训练了几个模型,这些数据集描述了泰坦尼克号上的乘客。我们的目标是预测乘客是否幸存。
学习曲线
![](https://img.haomeiwen.com/i13894005/905afac9c19c58ab.png)
在不同长度的数据集上训练模型,并为训练集和测试集生成交叉验证分数与数据集大小的关系图。
在这里我们可以观察到我们的模型是过拟合的。虽然它在击球后的训练中表现良好,但测试精度逐渐提高,但从未达到与训练精度相当的水平。
示例wandb.sklearn.plot_learning_curve(model,X,y)
模型(clf或reg):采用拟合回归或分类器。
X(arr):数据集特性。
y(arr):数据集标签。
ROC曲线
ROC曲线显示真阳性率(y轴)与假阳性率(x轴)。理想的分数是TPR=1和FPR=0,这是左上角的分数。通常我们计算ROC曲线下的面积(AUC-ROC),AUC-ROC越大越好。
![](https://img.haomeiwen.com/i13894005/69bf7262606630ba.png)
在这里,我们可以看到我们的模型在预测类存活方面稍微好一些,AUC-ROC更大就证明了这一点。
示例wandb.sklearn.plot_roc(y_true,y_probas,labels)
y_true(arr):测试集标签。
y_probas(arr):测试集预测概率。
labels(list):目标变量的命名标签(y)。
阶级比例
绘制训练和测试集中目标类的分布。有助于检测不平衡类并确保一个类不会对模型产生不成比例的影响。
![](https://img.haomeiwen.com/i13894005/1b13ede5c768409a.png)
在这里,我们可以看到更多的乘客谁没有生存的例子比那些谁幸存。训练和测试集似乎共享了目标类的分布,这对于推广我们的模型输出是个好消息。
示例wandb.sklearn.plot_class_比例(y_train,y_test,['dog','cat','owl'])
y _train(arr):训练集标签。
y_test(arr):测试集标签。
标签(列表):目标变量的命名标签(y)。
精确召回曲线
计算不同阈值的精确性和召回之间的折衷。曲线下的高区域表示高召回率和高精度,其中高精度表示低误报率,高召回表示低误报率。
![](https://img.haomeiwen.com/i13894005/a1f1d50e04374c0f.png)
两者的高分都表明分类器返回的是准确的结果(高精度),同时返回的也是大部分的阳性结果(高召回率)。当类非常不平衡时,PR曲线非常有用。
示例wandb.sklearn.plot_precision_recall(y_true,y_probas,labels)
y_true(arr):测试集标签。
y_probas(arr):测试集预测概率。
labels(list):目标变量的命名标签(y)。
特征重要性
评估和绘制分类任务中每个特征的重要性。仅适用于具有feature_importances_u属性的分类器,如树。
![](https://img.haomeiwen.com/i13894005/9e4d518ccf2a8eff.png)
在这里我们可以看到这个头衔(小姐,太太,先生,主人)是谁幸存下来的高度象征。这是有道理的,因为头衔同时反映了乘客的性别、年龄和社会地位。很奇怪的是,name_length_是第二个最具预测性的特性,深入探究为什么会出现这种情况可能很有趣。
示例wandb.sklearn.plot_feature_importances(model,['width',height',length'])
模型(clf):接受一个合适的分类器。
特征名称(列表):要素的名称。通过用相应的名称替换要素索引,使绘图更易于读取。
校准曲线
绘制分类器预测概率的校准程度以及如何校准未校准的分类器。比较基线logistic回归模型(该模型作为参数传递)和其等张校正和乙状结肠校正估计的预测概率。
![](https://img.haomeiwen.com/i13894005/84f4db506ccf06bf.png)
校准曲线越接近对角线越好。转置的乙状结肠曲线表示分类器过度拟合,而乙状结肠曲线表示分类器欠拟合。通过训练模型的等张和乙状结肠校准,并比较它们的曲线,我们可以判断模型是否过拟合或欠拟合,如果是这样,哪种校准(乙状结肠或等张)可能有助于解决这个问题。
有关更多详细信息,请查看sklearn的文档。
在这种情况下,我们可以看到vanilla AdaBoost遭受过度拟合(如转置的乙状结肠曲线所证明),可能是因为冗余特征(如标题)违反了特征独立性假设。使用乙状结肠校准校准AdaBoost似乎是最有效的解决这一过度拟合。
示例wandb.sklearn.plot_calibration_curve(clf,X,y,'RandomForestClassifier')
model(clf):接受一个合适的分类器。
X(arr):训练集特征。
y(arr):训练集标签。
model_name(str):模型名称。默认为“分类器”
混淆矩阵
计算混淆矩阵以评估分类的准确性。这对于评估模型预测的质量和发现模型出错的预测模式很有用。
![](https://img.haomeiwen.com/i13894005/8edc1e7c96bc1d2e.png)
对角线表示模型正确得到的预测,即实际标签等于预测标签。
示例wandb.sklearn.plot_confusion_matrix(y_true,y_probas,labels)
y_true(arr):测试集标签。
y_probas(arr):测试集预测概率。
labels(list):目标变量的命名标签(y)。
汇总指标
计算回归和分类算法的汇总指标(如分类的f1、准确性、精度和召回率以及回归的mse、mae、r2分数)。
![](https://img.haomeiwen.com/i13894005/2d8adbcdd52c2e8d.png)
示例wandb.sklearn.plot_summary_metrics(model,X_train,X_test,y_train,y_test)
model(clf或reg):采用拟合回归或分类器。
X(arr):训练集特征。
y(arr):训练集标签。
X_test(arr):测试集特性。
y_test(arr):测试集标签。
聚类
肘形图
测量并绘制方差百分比,解释为聚类数的函数,以及训练时间。有助于选择最佳簇数。
![](https://img.haomeiwen.com/i13894005/85eca91759a99506.png)
在这里我们可以看到,根据肘部图的最佳簇数是3,这反映了数据集(它有3个类——鸢尾、鸢尾、鸢尾)。
示例wandb.sklearn.plot_elbow_curve(model,X_train)
model(clusterer):设置一个clusterer。
X(arr):训练集特征。
Silhouette 图
测量并绘制一个簇中的每个点与相邻簇中的点之间的距离。簇的厚度与簇的大小相对应。垂直线表示所有点的平均轮廓得分。
![](https://img.haomeiwen.com/i13894005/653de19ccb3ae4e4.png)
接近+1的轮廓系数表明样本远离相邻的簇。值为0表示样本位于或非常接近两个相邻簇之间的决策边界,负值表示这些样本可能分配给了错误的簇。
一般来说,我们希望所有剪影聚类分数都高于平均值(超过红线),并尽可能接近1。我们还喜欢反映数据中底层模式的集群大小。
示例wandb.sklearn.plot_剪影(model,X_train,['spam',not spam'])
model(clusterer):设置clusterer。
X(arr):训练集特征。
cluster_labels(list):群集标签的名称。通过用相应的名称替换群集索引,使绘图更易于读取。
回归
离群值图
![](https://img.haomeiwen.com/i13894005/2e6488bb5dd872b2.png)
其利用库克距离测量数据点对回归模型的影响。其对异常值检测有用。具有严重偏移影响的实例可能是异常值。
示例 wandb.sklearn.plot_outlier_candidates(model, X, y)
model(回归器):接受一个合适的分类器。
X(矩阵):训练集特征。
y(矩阵):训练集标签。
回归
离群值图
![](https://img.haomeiwen.com/i13894005/20be79dbea9be7a1.png)
其利用库克距离测量数据点对回归模型的影响。其对异常值检测有用。具有严重偏移影响的实例可能是异常值。
示例 wandb.sklearn.plot_outlier_candidates(model, X, y)
model(回归器):接受一个合适的分类器。
X(矩阵):训练集特征。
y(矩阵):训练集标签。
残差图
测量绘图:目标预测值vs预测值与真实值间差值,残差分布。
![](https://img.haomeiwen.com/i13894005/157d813d0d63f024.png)
通常,一个好的拟合模型的残差应该是随机分布的,因为好的模型可以解释数据集中除随机误差以外的大多数现象。
在这里,我们可以看到我们的模型所产生的大部分误差分布在正负5之间,并且对于训练数据集和测试数据集都是均匀分布的。
示例 wandb.sklearn.plot_residuals(model, X, y)
model(模型):接受一个合适的分类器。
X(矩阵):训练集特征。
y(矩阵):训练集标签。
举个例子
让我们运行一个完整的例子
![](https://img.haomeiwen.com/i13894005/d7e4c2302a0d1f0e.png)
如果你有任何的问题,我们愿意在我们的slack社区回答它们
更多信息请查看原文:https://www.yanxishe.com/TextTranslation/2464?from=jianshu0324