《kaggle竞赛攻顶秘笈》 | 任务种类 | 任务评价指标 | 评价指标与目标函数 | 评价指标最佳化

一、数据分析竞赛中的任务种类

  1. 回归任务
  2. 分类任务
    • 二分类任务
      可依输出的预测值分为标签预测和概率预测
    • 多分类任务
      • 多元分类:一个资料属于一个类别
      • 多标签分类:一个资料同时属于多个类别
  3. 推荐任务
    预测消费者可能会购买的商品或是消费者可能对哪些广告有兴趣
  4. 图像任务
    • 目标识别任务
    • 图像分割任务

二、数据分析竞赛的资料集

  1. 表格资料:结构化数据
  2. 外部资料
    大部分允许使用外部资料的竞赛都规定参赛者必须在Discussion中的专用讨论群组内分享自己已使用的外部资料。
  3. 时间序列资料:以时间的推移进行测量的资料
  4. 图像或自然语言资料

三、任务评价指标

  评价模型的性能及预测值的好坏的指标就是评价指标。

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=1N(yiyi^)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=1N(log(1+yi)log(1+yi^))2
注意:

  • RMSLERMSE的关系为:将每个资料的实际值进行对数转换后,再使用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=1Nyiyi^
注意

  • 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=1i=1N(yiyi)2i=1N(yiyi^)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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是英文电影评论情感分类的Kaggle竞赛的代码: 1. 数据预处理: ```python import pandas as pd import numpy as np from sklearn.model_selection import train_test_split # 读取数据 df = pd.read_csv('train.csv') # 分割训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(df['review'], df['sentiment'], test_size=0.2, random_state=42) # 处理数据 import re import string from nltk.corpus import stopwords from nltk.stem import WordNetLemmatizer lemmatizer = WordNetLemmatizer() stop_words = stopwords.words('english') def preprocess(text): text = text.lower() # 小写化 text = re.sub('\[.*?\]', '', text) # 移除方括号及其内容 text = re.sub('[%s]' % re.escape(string.punctuation), '', text) # 移除标点符号 text = re.sub('\w*\d\w*', '', text) # 移除包含数字的单词 text = re.sub('[‘’“”…]', '', text) # 移除不规则的单引号、双引号和省略号 tokens = re.split('\W+', text) # 分词 tokens = [lemmatizer.lemmatize(word) for word in tokens if word not in stop_words] # 词形还原和移除停用词 return ' '.join(tokens) X_train = X_train.apply(lambda x: preprocess(x)) X_test = X_test.apply(lambda x: preprocess(x)) ``` 2. 特征提取: ```python from sklearn.feature_extraction.text import TfidfVectorizer # 特征提取 tfidf_vect = TfidfVectorizer(max_features=5000) tfidf_vect.fit(X_train) X_train_tfidf = tfidf_vect.transform(X_train) X_test_tfidf = tfidf_vect.transform(X_test) ``` 3. 模型训练和评估: ```python from sklearn.linear_model import LogisticRegression from sklearn.metrics import accuracy_score # 模型训练 lr = LogisticRegression() lr.fit(X_train_tfidf, y_train) # 模型评估 y_pred = lr.predict(X_test_tfidf) print('Test accuracy is {}'.format(accuracy_score(y_test, y_pred))) ``` 在这个例子中,我们使用了逻辑回归作为分类模型,使用TF-IDF作为特征提取方法。我们可以使用其他的模型和特征提取方法,比如使用词袋模型和使用神经网络等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

幼稚的人呐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值