# -*- coding: utf-8 -*-
"""
Created on Mon Oct 8 16:41:10 2018
@author: asus
"""
#10 新闻语料分类
#10.1 获取新闻文章
#本章将构建一个按照主题为最新的新闻报道分组的系统。你可以运行几周(或更长时间)以了解这
#段时间新闻趋势的变化。
#http://www.reddit.com/login
#找不到
#跳过
#10.3 新闻语料聚类
#无监督学习,聚类
#k-means
from sklearn.cluster import KMeans
#TfidfVectorizer这个向量化工具根据词语出现在多少篇文档中,对词语计数进行加权。出现在
#较多文档中的词语权重较低
from sklearn.feature_extraction.text import TfidfVectorizer
#创建数据分析流水线
from sklearn.pipeline import Pipeline
n_clusters = 10
pipeline = Pipeline([('feature_extraction', TfidfVectorizer(max_df=0.4)),
('clusterer', KMeans(n_cluster=n_clusters))])
#参数max_df设置了0.4,表示忽略出现在40%及以上的文档中的词语。
#训练算法,然后再用它来做预测。
pipeline.fit(documents)
labels = pipeline.predict(documents)
#我们可以使用Counter类来查看每个簇有多少数据点
from collections import Counter
c = Counter(labels)
for cluster_number in range(n_clusters):
print("Cluster {} contains {} samples".format(cluster_number,
c[cluster_number]))
#103.2 评估结果
pipeline.named_steps['clusterer'].inertia_
#对于k-means算法,寻找新质点的标准是,最小化每个数据点到最近置信点的距离。这叫算法的惯
#性权重(inertia),它可以用来确定分多少簇合适。
#下面代码n_clusters依次取2到20之间的值,每取一个值,k-means算法运行10次,每次算法都
#记录惯性权重。
inertia_scores = []
n_cluster_values = list(range(2, 20))
for n_clusters in n_cluster_values:
cur_inertia_scores = []
X = TfidfVect
10.新闻语料分类
最新推荐文章于 2022-01-20 05:32:02 发布