您的位置:首页 > 其它

主动学习 Active Learning-2

2016-09-01 10:29 148 查看
1. 导入20 新闻组数据集

为了更快操作,我们只对4个分类进行研究

>>> categories = ['alt.atheism', 'soc.religion.christian',
...               'comp.graphics', 'sci.med']

我们导入文件的列表去匹配这些分类(随机打乱)

>>> from sklearn.datasets import fetch_20newsgroups
>>> twenty_train = fetch_20newsgroups(subset='train',
...     categories=categories, shuffle=True, random_state=42)

target_names是

>>> twenty_train.target_names
['alt.atheism', 'comp.graphics', 'sci.med', 'soc.religion.christian']

这些文件是在data里

>>> len(twenty_train.data)
2257
>>> len(twenty_train.filenames)
2257

主动学习算法需要一个类标签给每一个文档在训练集中。这样,类就是新闻组的名字,也是每一个文件的文档名

为了加速,scikit-learn导入目标属性作为integers的数列,它们与类名的索引一致,储存在target—names列表里。类的id储存在target里。

>>> twenty_train.target[:10]
array([1, 1, 3, 3, 3, 3, 3, 2, 2, 2])

2. 从文本文件中提取特征

为了运用机器学习,首先将文档内容转换成数值特征向量。

bags of words

1)给每个出现在训练集的文档中每个字一个固定的id

2)对于每个文档(i),查每个单词出现的次数然后将他们储存在X【i,j】,这里j为每个字的索引

bags of words 表示n_features 是库里明显字的数量,这个数量通常大于100,000。

Tokenizing text 

文本预处理,标记和过滤--停止字是被包含在一个高层次的部分里---能够建立一个特征的字典然后将文档转换成特征向量

>>> from sklearn.feature_extraction.text import CountVectorizer
>>> count_vect = CountVectorizer()
>>> X_train_counts = count_vect.fit_transform(twenty_train.data)
>>> X_train_counts.shape
(2257, 35788)

CountVectorizer 支持N-grams的字或间接字符的总数。一旦合适,矢量器就建了一个特征索引词典

>>> count_vect.vocabulary_.get(u'algorithm')
4690

每一个字的索引值与它在整个训练库的概率相对应。

From occurences to frequencies

出现总数问题:长一点的文档将获得高的平均数值比短一点的文档。为了避免这些潜在的矛盾,它将每个字在一个文档的出现总数除以文档的字的总数。这些新的特征叫做tf(Term frequencies).另一个对tf上面的提炼是去缩减字的重量(这些字是出现在库中多篇文档,所以有很好的信息量比那些只出现在库中少部分)。这个缩减方法叫tf-idf(terms frequency times inverse document frequency)

>>> from sklearn.feature_extraction.text import TfidfTransformer
>>> tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
>>> X_train_tf = tf_transformer.transform(X_train_counts)
>>> X_train_tf.shape
(2257, 35788)


上面例子中,fit()方法是我们的估量器适应我们的数据,然后tranform()去转换count-matrix to a tf-idf。所以合成:

>>> tfidf_transformer = TfidfTransformer()
>>> X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
>>> X_train_tfidf.shape
(2257, 35788)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: