数据分析之数据模型的测试和评估

162 阅读3分钟

概述

在这一节中,我们用到了数据模型对我们的数据进行训练,有两个模型:线性模型和决策树模型(也叫随机森林)怎么训练的呢?调参。然后我们还要对模型进行评估,用到三种方法:交叉验证,混淆矩阵和ROC曲线。下面就来看看具体内容吧。

内容

训练模型

  • 线性模型
    • LogisticRegression().fit(X_train, y_train)
    • 中间这个括号就是放参数,比如C=100,class_weight = 'balanced'等等
    • 得分:print('训练集得分:{:.3f}'.format(lr.score(X_train, y_train)))
      print('测试集得分:{:.3f}'.format(lr.score(X_test, y_test)))
  • 随机森林
    • RandomForestClassifier().fit(X_train, y_train)
    • 中间可以放的参数,比如n_estimators=1000,max_depth=5,bootstrap = False,oob_score = True等等
    • 得分:print('训练集得分:{:.3f}'.format(rf.score(X_train, y_train)))
      print('测试集得分:{:.3f}'.format(rf.score(X_test, y_test)))
  • 问题:为什么线性模型可以进行分类任务,背后是怎么的数学关系?\
    • 因为线可以划分区块
      对于多分类问题,线性模型是怎么进行分类的?\
    • 一个一个分,(圆圈和非圆圈,三角和非三角等等)
  • 训练模型的预测结果:predict(X_train)或者按百分比预测结果predict_proba(X_train)

模型评估

模型评估:模型评估是为了知道模型的泛化能力。

  • 交叉验证(cross-validation):是一种评估泛化性能的统计学方法,它比单次划分训练集和测试集的方法更加稳定、全面。在交叉验证中,数据被多次划分,并且需要训练多个模型。最常用的交叉验证是 k 折交叉验证(k-fold cross-validation),其中 k 是由用户指定的数字,通常取 5 或 10。
    • cross_val_score(lr, X_train, y_train, cv=10):cv表示几折-
  • 混淆矩阵:准确(precision)度量的是被预测为正例的样本中有多少是真正的正例。召回率(recall)度量的是正类样本中有多少被预测为正类。 f-分数是准确率与召回率的调和平均值。
    • 首先我们来介绍一下混淆矩阵还有这几个概念是什么,看下图
    • confusion_matrix(y_train, pred):计算混淆矩阵
    • classification_report(y_train, pred):计算精确率、召回率以及f1-score

image.png

image.png

image.png

image.png

image.png

  • ROC曲线:接受者操作特性曲线(receiver operating characteristic curve,简称ROC曲线),又称为感受性曲线(sensitivity curve)。得此名的原因在于曲线上各点反映着相同的感受性,它们都是对同一信号刺激的反应,只不过是在几种不同的判定标准下所得的结果而已。接受者操作特性曲线就是以虚惊概率为横轴,击中概率为纵轴所组成的坐标图,和被试在特定刺激条件下由于采用不同的判断标准得出的不同结果画出的曲线
    • fpr, tpr, thresholds = roc_curve(y_test, lr.decision_function(X_test)):计算fpr,tpr,thresholds
    • plt.plot(fpr, tpr, label="ROC Curve"):绘制ROC曲线
    • close_zero = np.argmin(np.abs(thresholds)) :abs加绝对值,argmin找最靠近0的数
    • plt.plot(fpr[close_zero], tpr[close_zero], 'o'):画出这个点

image.png

总结

说实话,这部分对我来说有点难点,所以我学了两遍看了两遍视频,现在来看就比较明朗了,当然这里是神奇的,是计算机带来的震撼,是算法带来的震撼,是无数数据科学家大展身手的地方。这个项目的学习也到此结束了,感谢自己,继续努力。一路走来,学到的东西很多,我还想再多学一些所以期待下一个项目,期待下一次进化。

代码存放处:HeteroCat-blog/hands-on-data-analysis at main · HeteroCat/HeteroCat-blog (github.com)