了解基础的机器学习知识即了解基础的机器学习的一些名词但没有实现过机器学习算法的人观看且对python不了解的也可以看,每一处具有注释。本文使用的python3编译环境,与python2编译环境有一些差别,不过不影响大体。本文的理论部分以西瓜书和统计学习方法为参考,代码实现以机器学习实战为参考。
好!开始上代码!主要介绍聚类算法中的KMeans算法,其他的陆续更新
一、手写KMeans
理论部分
1、聚类算法:聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个"簇" (cluster). 通过这样的划分,每个簇可能对应于一些潜在的概念(类别) ,如"浅色瓜" "深色瓜","有籽瓜" "无籽瓜",甚至"本地瓜""外地瓜"等;需说明的是,这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名.
人话版本:当思考聚类算法的时候,我第一次想到的是人以群分,物以类聚。举个例子面对一个班级的学生我们可以根据数学考试的分数90-100分为一等,80-90分为二等。。面对我们不知道怎么分类的事物我们怎么实现物以类聚,(哈哈本专业来帮忙了),在植物学中我们怎么分类各种植物呢?动物学中我们怎么分类各种动物呢?全国的草地如何进行分类呢?拿全国的草地如何进行分类来说,我们要搜集各个草地所在地的降水量、温度、适度、主要的建群种等属性然后将其量化。为叙述简单仅取一个属性降水量来分析。输入不同地区的降水量,计算不同地区之间的差距,比如分为两类,从中随机选择两地,其他的地区以这俩地方为标准计算与这两地的距离,并选择最小的进行投靠,这样就能将其分类。那么问题来了?如何计算他们之间的差距?
2、距离的计算------距离算法的灵魂
介绍距离计算之前先介绍属性
连续属性:在定义域上有无穷多个可能的取值
离散属性:在定义域上是有限个取值
有序属性:能直接在属性值上计算距离 "1" 与 "2" 比较接近、与 "3" 比较远,这样属性称为"有序属性" (ordinal attribute),数据具