第一次Kaggle

in writing

Posted by chinaljr on April 2, 2018

简述

这是Data mining课上的第一个作业。训练集是32W条左右的HTML格式的新闻文本,分成两类0和1,各自比例大概是10:1,老师给的描述是,1代表一个站主会选择这条消息放到自己网站上,0代表不会。测试数据为4W条新闻文本。测试标准为AUC曲线下面积。

历程

  • 随机数
  • fasttext,无论如何挣扎都没有超过weak baseline
    • 在此期间,使用了解析HTML的库BeautifulSoup
    • 使用了jieba中文分词
    • 使用了去停顿词
    • 处理个各种编码问题
    • fasttext是facebook的一个中文分类模型,类似于word2vec
    • 最好0.77
  • 后来助教发通知告诉,提交的应该是概率(真他妈尴尬,课白上了)
    • 改了之后变成0.86
  • 转战sklearn
  • tfidf
    • sklearn.feature_extraction.text import TfidfVectorizer
  • sklearn.naive_bayes 朴素贝叶斯
    • MultinomialNB
    • GaussianNB
  • sklearn.neighbors
    • KNeighborsClassifier
  • sklearn.svm
    • SVC
  • sklearn.linear_model
    • SGDClassifier
    • LogisticRegression
    • LogisticRegressionCV
  • SVC时间太久,在阿里云上租用了一个9.5的单核2G应用服务器(貌似用来部署web的)来跑我的小程序
    • pip一堆东西
    • WinSCP来和服务器传送文件
    • nohup后台挂起运行
  • 不删除停用词使得分类有了质的(超过strong baseline)提升
    • 0.89
    • 深刻意识到,抛开数据本身谈数据挖掘,就是买彩票
  • 确定两个努力方向,神经网络 and 特征提取

jieba.cut/lcut

需要分词字符串

cut_all 是否采用全模式,默认是精准模式

HMM模型

seg_text = jieba.cut(text.encode("utf-8"))
ans = " ".join(seg_text)

fasttext

参数

input_file     training file path (required)
output         output file path (required)
lr             learning rate [0.05]
lr_update_rate change the rate of updates for the learning rate [100]
dim            size of word vectors [100]
ws             size of the context window [5]
epoch          number of epochs [5]
min_count      minimal number of word occurences [5]
neg            number of negatives sampled [5]
word_ngrams    max length of word ngram [1]
loss           loss function {ns, hs, softmax} [ns]
bucket         number of buckets [2000000]
minn           min length of char ngram [3]
maxn           max length of char ngram [6]
thread         number of threads [12]
t              sampling threshold [0.0001]
silent         disable the log output from the C++ extension [1]
encoding       specify input_file encoding [utf-8]