目录:html
1、数据拆分:训练数据集&测试数据集算法
2、评价回归结果:分类准确度、混淆矩阵、精准率、召回率、F一、ROC等dom
3、评价回归结果:MSE、RMSE、MAE、RSquared机器学习
1、数据拆分:训练数据集&测试数据集函数
顾名思义,训练数据集即为用于训练模型的子集。测试数据集即为 用于测试训练后模型的子集。工具
通常状况下对整个数据集按照0.8:0.2的比例进行拆分,可是若是遇到特殊状况:若有顺序的数据集,咱们能够先打乱再进行拆分。性能
方法一:将X和y合并为同一个矩阵,而后对矩阵进行shuffle,以后再分解学习
方法二:对y的索引进行乱序,根据索引肯定与X的对应关系,最后再经过乱序的索引进行赋值。测试
对于拆分数据集,sklearn中的train_test_split能够帮助咱们作到。spa
from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
2、评价回归结果
分类准确度:
在划分出测试数据集后,咱们就能够验证其模型准确率了。在这了引出一个很是简单且经常使用的概念:accuracy(分类准确度)
因accuracy定义清洗、计算方法简单,所以常常被使用。可是它在某些状况下并不必定是评估模型的最佳工具。精度(查准率)和召回率(查全率)等指标对衡量机器学习的模型性能在某些场合下要比accuracy更好。
#sklearn中的准确度 from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=666) knn_clf = KNeighborsClassifier(n_neighbors=3) knn_clf.fit(X_train, y_train) y_predict = knn_clf.predict(X_test) accuracy_score(y_test, y_predict) # 不看y_predict knn_clf.score(X_test,y_test)
混淆矩阵:
对于二分类问题来讲,全部的问题被分为0和1两类,混淆矩阵是2*2的矩阵:
* TN:真实值是0,预测值也是0,即咱们预测是negative,预测正确了。
* FP:真实值是0,预测值是1,即咱们预测是positive,可是预测错误了。
* FN:真实值是1,预测值是0,即咱们预测是negative,但预测错误了。
* TP:真实值是1,预测值是1,即咱们预测是positive,预测正确了。
from sklearn.metrics import confusion_matrix confusion_matrix(y_test, y_log_predict)
精准率: 即精准率为8/(8+12)=40%。所谓的精准率是:分母为全部预测为1的个数,分子是其中预测对了的个数,即预测值为1,且预测对了的比例。
为何管它叫精准率呢?在有偏的数据中,咱们一般更关注值为1的特征,好比“患病”,好比“有风险”。在100次结果为患病的预测,平均有40次预测是对的。即精准率为咱们关注的那个事件,预测的有多准。
from sklearn.metrics import precision_score precision_score(y_test, y_log_predict)
召回率:即精准率为8/(8+2)=80%。所谓召回率是:全部真实值为1的数据中,预测对了的个数。每当有100个癌症患者,算法能够成功的预测出8个 。也就是咱们关注的那个事件真实的发生状况下,咱们成功预测的比例是多少。
from sklearn.metrics import recall_score recall_score(y_test, y_log_predict)
若是要咱们综合精准率和召回率这两个指标,咱们可能会想到取平均值这样的方法。F1 Score的思想也差很少: F1 Score 是精准率和召回率的调和平均值。
什么是调和平均值?为何要取调和平均值?调和平均值的特色是若是两者极度不平衡,如某一个值特别高、另外一个值特别低时,获得的F1 Score值也特别低;只有两者都很是高,F1才会高。这样才符合咱们对精准率和召回率的衡量标准。
在了解ROC曲线以前,先看三个概念:分类阈值、TPR和FPR
分类阈值,即设置判断样本为正例的阈值thr,
若是某个逻辑回归模型对某封电子邮件进行预测时返回的几率为 0.9995,则表示该模型预测这封邮件很是多是垃圾邮件。相反,在同一个逻辑回归模型中预测分数为 0.0003 的另外一封电子邮件极可能不是垃圾邮件。可若是某封电子邮件的预测分数为 0.6 呢?为了将逻辑回归值映射到二元类别,您必须指定分类阈值(也称为断定阈值)。若是值高于该阈值,则表示“垃圾邮件”;若是值低于该阈值,则表示“非垃圾邮件”。人们每每会认为分类阈值应始终为 0.5,但阈值取决于具体问题,所以您必须对其进行调整。
在sklearn中有一个方法叫:decision_function,即返回分类阈值
TPR:预测为1,且预测对了的数量,占真实值为1的数据百分比。很好理解,就是召回率
FPR:预测为1,但预测错了的数量,占真实值不为1的数据百分比。与TPR相对应,FPR除以真实值为0的这一行全部的数字和 。
TPR和FPR之间是成正比的,TPR高,FPR也高。ROC曲线就是刻画这两个指标之间的关系。
ROC曲线(Receiver Operation Characteristic Cureve),描述TPR和FPR之间的关系。x轴是FPR,y轴是TPR。
咱们已经知道,TPR就是全部正例中,有多少被正确地断定为正;FPR是全部负例中,有多少被错误地断定为正。 分类阈值取不一样值,TPR和FPR的计算结果也不一样,最理想状况下,咱们但愿全部正例 & 负例 都被成功预测 TPR=1,FPR=0,即 全部的正例预测值 > 全部的负例预测值,此时阈值取最小正例预测值与最大负例预测值之间的值便可。
TPR越大越好,FPR越小越好,但这两个指标一般是矛盾的。为了增大TPR,能够预测更多的样本为正例,与此同时也增长了更多负例被误判为正例的状况。
from sklearn.metrics import roc_curve fprs, tprs, thresholds = roc_curve(y_test, decision_scores) plt.plot(fprs, tprs) plt.show()
通常在ROC曲线中,咱们关注是曲线下面的面积, 称为AUC(Area Under Curve)。这个AUC是横轴范围(0,1 ),纵轴是(0,1)因此总面积是小于1的。
ROC和AUC的主要应用:比较两个模型哪一个好?主要经过AUC可以直观看出来。
ROC曲线下方由梯形组成,矩形能够当作特征的梯形。所以,AUC的面积能够这样算:(上底+下底)* 高 / 2,曲线下面的面积能够由多个梯形面积叠加获得。AUC越大,分类器分类效果越好。
能够在sklearn中求出AUC值
from sklearn.metrics import roc_auc_score roc_auc_score(y_test, decision_scores)
3、评价回归结果
待补充
参考连接:公众号数据科学家联盟文章