# 监督学习
分类:预测数据标签(类别)。
二分类 / 二值分类:例如一张图片,不是猫就是狗。<img src="https://s3.ax1x.com/2021/02/08/yai4I0.jpg" width="250px">
多分类:例如鸢尾花种类。
回归:预测数据真实值。例如股票价格。
流程:
- 初始化
- 设置参数
- 训练模型
- 预测新标签
- 给模型评分
# 度量模型性能
# 分类 - 准确率・精度・召回率
二分类,有标准数组 yTrue 与预测数组 yPred ,以下计算预估准确率:
In [1]: import numpy as np | |
In [2]: np.random.seed(233) #设置种子 | |
In [3]: yTrue = np.random.randint(0, 2, size = 5) #[0, 2) 随机整数 5 个 | |
In [4]: yTrue | |
Out[4]: array([1, 1, 1, 1, 0]) | |
In [5]: yPred = np.ones(5, dtype = np.int32) #假设全猜 1 | |
In [6]: yPred | |
Out[6]: array([1, 1, 1, 1, 1]) | |
In [7]: from sklearn import metrics as mts | |
In [8]: mts.accuracy_score(yTrue, yPred) #计算准确率 | |
Out[8]: 0.8 | |
#另一种姿势计算准确率 | |
In [10]: setSize = len(yTrue) | |
In [11]: correctSum = np.sum(yTrue == yPred) | |
In [12]: accuracyScore = correectSum / setSize | |
... accuracyScore | |
Out[12]: 0.8 |
一些概念
记标签为 1 的数据为正样例,标签为 0/-1 的数据点为负样例。
实际正样例 | 实际负样例 | |
---|---|---|
预测正样例 | 真阳性 | 假阳性 (I 型错误) |
预测负样例 | 假阴性 (II 型错误) | 真阴性 |
计算:
In [1]: import numpy as np | |
In [2]: np.random.seed(233) | |
In [4]: yTrue = np.random.randint(0, 2, size = 20) | |
In [5]: yTrue | |
Out[5]: array([1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0]) | |
In [6]: yPred = np.ones(20, dtype = np.int32) | |
In [7]: yPred | |
Out[7]: array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]) | |
In [8]: true_positive = np.sum(yTrue * yPred) #真阳性 | |
In [9]: true_positive | |
Out[9]: 14 | |
In [10]: false_positive = np.sum((yTrue == 0) * yPred) #假阳性 | |
In [11]: false_positive | |
Out[11]: 6 | |
In [12]: false_negative = true_negative = 0 #由于全猜测 1,真假阴性都是 0 | |
In [13]: set_size = len(yTrue) |
另一些概念:
# from sklearn import metrics as mts | |
In [16]: accuracy = (true_positive + true_negative) / set_size #准确率 | |
...: accuracy | |
Out[16]: 0.7 | |
# mts.accuracy_score(yTrue, yPred) | |
In [8]: mts.accuracy_score(yTrue, yPred) #计算准确率 | |
In [17]: precision = true_positive / (true_positive + false_positive) #精度 | |
...: precision | |
Out[17]: 0.7 | |
# mts.precision_score(yTrue, yPred) | |
In [20]: recall = true_positive / (true_positive + false_negative) #召回率 | |
...: recall | |
Out[20]: 1.0 | |
#mts.recall_score(yTrue, yPred) |
# 回归 - 均方差・可释方差・R 平方
留坑,跑路~