文章目录
一、数据分析竞赛中的任务种类
- 回归任务
- 分类任务
- 二分类任务
可依输出的预测值分为标签预测和概率预测 - 多分类任务
- 多元分类:一个资料属于一个类别
- 多标签分类:一个资料同时属于多个类别
- 二分类任务
- 推荐任务
预测消费者可能会购买的商品或是消费者可能对哪些广告有兴趣 - 图像任务
- 目标识别任务
- 图像分割任务
二、数据分析竞赛的资料集
- 表格资料:结构化数据
- 外部资料
大部分允许使用外部资料的竞赛都规定参赛者必须在Discussion中的专用讨论群组内分享自己已使用的外部资料。 - 时间序列资料:以时间的推移进行测量的资料
- 图像或自然语言资料
三、任务评价指标
评价模型的性能及预测值的好坏的指标就是评价指标。
1.回归任务的评价指标
1.1 均方根误差(RMSE)
计算方式是:先将每个资料的实际值与预测值相减得到差值,再求得差值的平方,然后求平均并开根号,就可以计算出RMSE
。
R M S E = 1 N ∑ i = 1 N ( y i − y i ^ ) 2 RMSE=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(y_i-\hat{y_i})^2} RMSE=N1i=1∑N(yi−yi^)2
注意:RMSE
较容易受到极端值的影响,因此,必须事先排除极端值,否则,最后建立的模型很有可能会过于偏向于极端值。
例子:
import numpy as np
from sklearn.metrics import mean_squared_error
# y_true为真实值、y_pred为预测值
y_true = [1.0, 1.5, 2.0, 1.2, 1.8]
y_pred = [0.8, 1.5, 1.8, 1.3, 3.0]
# 计算均方误差(MSE)
mse = mean_squared_error(y_true,y_pred)
# 对MSE进行平方根得到RMSE
rmse = np.sqrt(mse)
print(rmse)
# 0.5531726674375732
1.2 均方根对数误差(RMSLE)
计算方式是计算实际值与预测值各自加1的对数,并将两个对数的差平方后,取平均并开根号。
R M S L E = 1 N ∑ i = 1 N ( l o g ( 1 + y i ) − l o g ( 1 + y i ^ ) ) 2 RMSLE=\sqrt{\frac{1}{N}\sum_{i=1}^{N}(log(1+y_i)-log(1+\hat{y_i}))^2} RMSLE=N1i=1∑N(log(1+yi)−log(1+yi^))2
注意:
RMSLE
与RMSE
的关系为:将每个资料的实际值进行对数转换后,再使用RMSE
来进行评估- 当标签呈现重尾分布,先做对数运算再取RMSE,可以避免受到少数较大值的影响
例子:
from sklearn.metrics import mean_squared_log_error
# y_true为真实值、y_pred为预测值
y_true = [1.0, 1.5, 2.0, 1.2, 1.8]
y_pred = [0.8, 1.5, 1.8, 1.3, 3.0]
# mean_squared_log_error(y_true,y_pred)等价于np.mean(np.square(np.log1p(y_true)-np.log1p(y_pred)))
rmlse = np.sqrt(mean_squared_log_error(y_true,y_pred))
print(rmlse)
# 0.02901076588100996
1.3 平均绝对值误差(MAE)
计算方式为取实际值与绝对值的差值,计算其绝对值的平均。
M A E = 1 N ∑ i = 1 N ∣ y i − y i ^ ∣ MAE=\frac{1}{N}\sum_{i=1}^{N}|y_i-\hat{y_i}| MAE=N1i=1∑N∣yi−yi^∣
注意:
MAE
不易受到极端值的影响MAE
在微分时有一些较难处理的特性
例子:
from sklearn.metrics import mean_absolute_error
# y_true为真实值、y_pred为预测值
y_true = [1.0, 1.5, 2.0, 1.2, 1.8]
y_pred = [0.8, 1.5, 1.8, 1.3, 3.0]
mae = mean_absolute_error(y_true,y_pred)
print(mae)
# 0.33999999999999997
1.4 决定系数( R 2 R^2 R2)
决定系数的计算公式为:
R 2 = 1 − ∑ i = 1 N ( y i − y i ^ ) 2 ∑ i = 1 N ( y i − y i ‾ ) 2 R^2=1-\frac{\sum_{i=1}^{N}(y_i-\hat{y_i})^2}{\sum_{i=1}^{N}(y_i-\overline{y_i})^2} R2=1−∑i=1N(yi−yi)2∑i=1N(yi−yi^)2
注意:
- 让决定系数最大化就等于让
RMSE
最小化 - 决定系数最大值为1,越接近于1表示预测越准确
例子:
from sklearn.metrics import r2_score
# y_true为真实值、y_pred为预测值
y_true = [1.0, 1.5, 2.0, 1.2, 1.8]
y_pred = [0.8, 1.5, 1.8, 1.3, 1.8]
r2 = r2_score(y_true,y_pred)
print(r2)
# 0.8676470588235294
2.二元分类任务的评价指标——标签预测
2.1 混淆矩阵(confusion matrix)
根据预测值是正例或负例,以及预测正确或错误可分为以下情况:
TP
:真阳性,预测值为正例,且预测正确的情况TN
:真阴性,预测值为负例,且预测正确的情况FP
:伪阳性,预测值为正例,但预测错误的情况(实际值为负例)FN
:伪阴性,预测值为负例,但预测错误的情况(实际值为正例)
将以上四种情况作为矩阵图中的元素来显示预测的结果就可以成为混淆矩阵。
例子:
from sklearn.metrics import confusion_matrix
# 以 0,1 来表示二元分类的正例与负例
y_true = [1, 0, 1, 1, 0, 1, 1, 0]
y_pred = [0, 0, 1, 1, 0, 0, 1, 1]
tp = np.sum((np.array(y_true) == 1) & (np.array(y_pred) == 1))
tn = np.sum((np.array(y_true) == 0) & (np.array(y_pred) == 0))
fp = np.sum((np.arr