MML(skl)——C3

Feature Extraction and Preprocessing

Extracting features from categorical variables

categorical/nominal is discrete, a def against continuous variable
encoding: one-of-K, One-Hot

**Extracting features from the text

The bag-of-words representation (词库)

Bag-of-words can be thought of as an extension to one-hot encoding
vocabulary:= the corpus's unique words set

CountVectorizer
:converts the characters in the documents to lowercase, and tokenizes词块化 the documents. Tokenization is the process of splitting a string into tokens, or meaningful sequences of characters

e.g.

from sklearn.feature_extraction.text import CountVectorizer
corpus = [  
    'UNC played Duke in basketball',  
    'Duke lost the basketball game',  
    'I ate a sandwich'  
]  
vectorizer = CountVectorizer()  
print (vectorizer.fit_transform(corpus).todense())  
print (vectorizer.vocabulary_)  
out:  
[[0 1 1 0 1 0 1 0 0 1]  
 [0 1 1 1 0 1 0 0 1 0]  
 [1 0 0 0 0 0 0 1 0 0]]  
{'game': 3, 'ate': 0, 'sandwich': 7, 'lost': 5, 'duke': 2, 'unc': 9, 'played': 6, 'in': 4, 'the': 8, 'basketball': 1}  

problems

sparse vectors :High-dimensional feature vectors that have many zero-valued elements
curse of dimensionality

Stop-word filtering

1.A basic strategy to reduce the dimensions of the feature space is to convert all of the text to lowercase
2.stop words, words that are common to most of the documents in the corpus (remove it)
e.g. determiners like a an the
use

vectorizer = CountVectorizer(stop_words='english')
...
[[0 1 1 0 0 1 0 1]
 [0 1 1 1 1 0 0 0]
 [1 0 0 0 0 0 1 0]]
{u'duke': 2, u'basketball': 1, u'lost': 4, u'played': 5, u'game': 3, u'sandwich': 6, u'unc': 7, u'ate': 0}

Stemming词跟还原 and lemmatization词形还原

corpus = [ 'I am gathering ingredients for the sandwich.', 'There were many wizards at the gathering.']

We will use the Natural Language Tool Kit (NTLK) to stem and lemmatize the corpus. NLTK can be installed using the instructions at http://www.nltk.org/install.html. After installation, execute the following code

import nltk
nltk.download()
...
from nltk.stem.wordnet import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()  
print(lemmatizer.lemmatize('gathering','v'))  
print(lemmatizer.lemmatize('gathering','n'))  
  
out:  
gather  
gathering 

Extending bag-of-words with TF-IDF weights

lead to a dissimilarity between small and large text
so now we use frequency instead of counts
1.normalizing raw term counts
integer to rate:tf(t,d) = \frac{f(t,d) + 1}{||x||} or no +1 in the nominator
f(t,d) frequency of term t in document d
||x|| norm (L-2 generally) of the count vector

2.logarithmically scaled term frequencies
mitigates the bias for longer documents
tf(t,d) = \log(f(t,d)+1)

3.Augmented term frequencies
further mitigates the bias for longer documents
tf(t,d) = .5 + \frac{.5*f(t,d)}{maxf(w,d):w \in d}
{maxf(w,d):w \in d} is greatest frequency of all of the words in document d

4.IDF
The inverse document frequency (IDF) is a measure of how rare or common a word is in a corpus.
idf(t,d) = log\frac{N}{1+|d\in D:t \in d|} or no +1 in the denominator
N: total number of docs in the corpus
d\in D:t \in d : the number of documents in the corpus that contain the term t

5.TF-IDF
TF*IDF

from sklearn.feature_extraction.text import TfidfVectorizer  
corpus = [  
'The dog ate a sandwich and I ate a sandwich',  
'The wizard transfigured a sandwich'  
]  
vectorizer = TfidfVectorizer(stop_words='english')  
print(vectorizer.fit_transform(corpus).todense())  
print(vectorizer.vocabulary_)  
  
out:  
[[ 0.75458397  0.37729199  0.53689271  0.          0.        ]  
 [ 0.          0.          0.44943642  0.6316672   0.6316672 ]]  
{'wizard': 4, 'transfigured': 3, 'ate': 0, 'dog': 1, 'sandwich': 2}  

NOTE: the outcome vector has been normalized!!!!!!!!!!!!!!! and sklearn uses different formulas

summary
1).单词频率对文档意思有重要作用,但是在对比不同文档时,还需考虑文档的长度,可通过scikit-learn的TfdfTransformer类对词频(term frequency)特征向量归一化实现不同文档向量的可比性(L2范数)。

2).对数词频调整方法(logarithmically scaled term frequencies),把词频调整到一个更小的范围

3).词频放大法(augmented term frequencies),适用于消除较长文档的差异,scikit-learn没有现成可用的词频放大公式,不过通过CountVectorizer可以实现。

归一化,对数调整词频和词频放大三支方法都消除文档不同大小对词频的影响,另一个问题仍然存在,那就是特征向量里高频词的权重更大,即使这些词在文集内其他文档里面也经常出现。这些词可以被看成是该文集的停用词,因为它们太普遍,对区分文档的意思没任何作用。

4).逆向文件频率(inverse document frequency,IDF)就是用来度量文集中单词频率的。

单词的TF-IDF值就是其频率与逆向文件频率的乘积,TfdfTransformer类默认返回TF-IDF值,其参数use_idf默认为True。由于TF-IDF加权特征向量经常用来表示文本,所以scikit-learn提供了TfidfVectorizer类将CountVectorizer和TfdfTransformer类封装在一起。


有空学习下图像处理 ,很有意思

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,928评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,192评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,468评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,186评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,295评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,374评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,403评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,186评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,610评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,906评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,075评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,755评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,393评论 3 320
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,079评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,313评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,934评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,963评论 2 351

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,319评论 0 10
  • If you do not like the man, just look at him for a while....
    kanthegel阅读 447评论 0 5
  • 有时候,追求财富的问题不在于财富,而在于“追求”,从人类有历史以来,人都在尝试追求一些不朽的事物,这是由...
    沐芝阳阅读 1,558评论 0 1
  • 最近对培养新习惯越来越有心得,已经慢慢培养出几个新习惯了,也没有感觉太难。 如果一件事很难,就把它分解成容易做的小...
    银河星海阅读 413评论 0 1
  • 失足与觉醒 许自立刚刚醒来,刘金莲就来到了他的身边。 一阵少妇的体香夹杂着浴液的香味,随着刘金莲的靠近,冲入了许自...
    高丘上阅读 332评论 13 19