理论介绍
Kmeans算法
k-means算法又称k均值,是一种无监督的机器学习方法,通过多次求均值实现聚类。即无需知道所要搜寻的目标,而是直接通过算法来得到数据的共同特征。如图所示,通过找到合适的K值和合适的中心点,来实现目标的聚类。
其具体算法思想实现过程如下:
1.指定簇的个数
2.随机选取K个中心点
3.将每条记录归到离它最近的中心点所在的簇中
4.以各个簇的记录均值的中心点取代之前的中心点
5.不断迭代,直到收敛
优化目标
k-means的损失函数是平方误差:
其中表示第k个簇,表示第k个簇的中心点,是第k个簇的损失函数,表示整体的损失函数。优化目标就是选择恰当的记录归属方案,使得整体的损失函数最小。
K值选取
k-meams算法的能够保证收敛,但不能保证收敛于全局最优点,当初始中心点选取不好时,只能达到局部最优点,整个聚类的效果也会比较差。可以采用以下方法选取k-means中心点:
1、选择彼此距离尽可能远的那些点作为中心点;
2、先采用层次进行初步聚类输出k个簇,以簇的中心点的作为k-means的中心点的输入。
3、多次随机选择中心点训练k-means,选择效果最好的聚类结果
k-means的误差函数有一个很大缺陷,就是随着簇的个数增加,误差函数趋近于0,最极端的情况是每个记录各为一个单独的簇,此时数据记录的误差为0,但是这样聚类结果并不是我们想要的,因此在数据训练过程中需要选取合适的K值。
实验过程
1.数据处理
实验数据集是从新浪新闻THUCNews中筛选的150篇新闻,分为三类:体育,星座,游戏。
读取数据集。按文件夹遍历每篇文章,把每一条新闻进行分词,保存为wordlist,所有记录保存在datalist,所有类别保存在label.
for file in files:
with open(os.path.join(new_floder_path,file),mode="r",encoding="utf-8") as fp:
Word = fp.read(