SMS Spam Collection Dataset描述

是垃圾短信,不是垃圾短信,这是一个问题。

Link: https://www.kaggle.com/uciml/sms-spam-collection-dataset

题目描述

下面有一个数据集, 它包括了5574条英文短信,短信内容由长短不一的几句话组成。每条短信都标注好了该短信是否为垃圾短信,通过该训练集训练出一个分类器,预测短信内容是否为垃圾短信。

小提示

  • 数据处理:可以使用分词工具,然后将句子转换成词向量,建立词表。简单的,可以通过统计词汇表中词汇出现的次数构建向量。

  • 但是上述这种简单地构建向量的方式,会导致每个词的重要过于均衡,无法体现词向量中词汇的重要性,导致分类结果不理想。改进中,可以采用TF-IDF方式来构建词向量。

  • 此时建立的向量通常是高度稀疏的,我们需要对建立的向量进行降维。方法可以采用主成分分析法等。

  • 这之后,可以使用条件概率来进行分类,实现贝叶斯分类器

先修技能

解释术语

  • SVM分类:支持向量机,一般简称SVM。通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。

  • 贝叶斯(bayes)分类:贝叶斯分类器的分类原理是通过某对象的先验概率,利用贝叶斯公式计算出其后验概率,即该对象属于某一类的概率,选择具有最大后验概率的类作为该对象所属的类。

  • 主成分分析:主成分分析也称主分量分析,旨在利用降维的思想,把多指标转化为少数几个综合指标。
    在统计学中,主成分分析(PCA)是一种简化数据集的技术。它是一个线性变换。这个变换把数据变换到一个新的坐标系统中,使得任何数据投影的第一大方差在第一个坐标(称为第一主成分)上,第二大方差在第二个坐标(第二主成分)上,依次类推。主成分分析经常用减少数据集的维数,同时保持数据集的对方差贡献最大的特征。这是通过保留低阶主成分,忽略高阶主成分做到的。这样低阶成分往往能够保留住数据的最重要方面。但是,这也不是一定的,要视具体应用而定。

输入格式

数据文件train.csv包含5574英文短信。
每条短信占一行,每行由两列构成。第一列是短信相应的标签label,如果是ham表示为非垃圾短信,如果是spam表示为垃圾短信。第二列是短信的具体内容,由长短不一的几句英文组成。如下所示:

Label,Text
ham,Aight should I just plan to come up later tonight?
ham,Was the farm open?
ham,"I sent my scores to sophas and i had to do secondary application for a few schools. I think if you are thinking of applying, do a research on cost also. Contact joke ogunrinde, her school is one me the less expensive ones"
etc...

数据文件test.csv每行由两列构成。第一列是短信相应的IdSmsId,第二列是短信的具体内容,由长短不一的几句英文组成。如下所示:

SmsId,Text
4456,Aight should I just plan to come up later tonight?
690,Was the farm open?
944,"I sent my scores to sophas and i had to do secondary application for a few schools. I think if you are thinking of applying, do a research on cost also. Contact joke ogunrinde, her school is one me the less expensive ones"
etc...

输出格式

您的提交文件submission.csv应采用以下格式:对于测试集中的每条短信,输出一行,其中包含SmsId和您预测其是否为垃圾短信的结果,不是为ham、是为spam。 例如,如果您预测第一条短信是垃圾短信,第二条不是,那么您的提交文件将如下所示:

SmsId,Label
1,spam
2,ham
etc...

评价

使用准确率(accuracy)作为最后评判标准。

TP,True Positive,将正类预测为正类的数目

FP,False Positive,将负类预测为正类数

TN,True Negative,将负类预测为负类数

FN,False Negative,将正类预测为负类数

$$ Accuracy=\frac{TP+TN}{TP+FN+FP+TN} $$

代码与数据

完整代码

https://www.kaggle.com/jiuzhang/ninechapter-spam-ham-self/notebook

测评配置环境

python

pip install -U numpy
pip install pandas
pip install -U scikit-learn

测评代码

import pandas as pd
import numpy as np

from sklearn.metrics import accuracy_score

y_test = pd.read_csv("./correct_submission.csv").sort_values('SmsId')
y_pred = pd.read_csv("./correct_submission.csv").sort_values('SmsId')

accuracy = accuracy_score(y_test.Label,y_pred.Label)

results matching ""

    No results matching ""