六月一日培训笔记
- k-近邻算法
- 从文本解析和导入数据
- 归一化数据
- KNN原理
- 只选择样本数据中前K个最相似的数据,这就是K近邻算法中K的出处,通常K是不大于20的整数,最后,选择K个最相似的数据中出现次数最多的分类,作为新数据的分类。
- KNN算法指导思想“近朱者赤,近墨者黑”,由你的邻居来判别你的类别
- KNN计算步骤:
- (1)算距离:给定测试对象,计算它与训练集中的每个对象的距离 (2)找邻居:圈定距离最近的k个训练对象,作为测试对象的近邻 (3)做分类:根据这k个近邻归属的主要类别,来对测试对象分类
- 距离或相似度的衡量:合适的距离衡量,距离越近应该意味着这两个点属于一个分类的可能性越大。角的距离衡量包括欧式距离、夹角余弦等。相对来说用余弦计算相似度比欧式距离更合适
- 类别的判定:(1)投票决定:少数服从多数,近邻中哪个类别的点最多就分为该类 (2)加权投票法:根据距离的远近,对近邻的投票进行加权,距离越近则权重越大(权重为距离平方的倒数)
- 优缺点(1)优点:简单,易于理解,易于实现,无需估计参数,无需训练,适合对稀有事件进行分类(例如当流失率很低时,比如低于0.5%,构建流失预测模型)特别适合于多分类问题 (multi-modal,对象具有多个类别标签),例如根据基因特征来判断其功能分类,KNN比SVM表现要好(2)缺点:懒惰算法,对测试样本分类时的计算量大,内存开销大,评分慢。可解释性较差,无法给出决策树那样的规则。
#对未知类别属性的数据集中的没个点依次执行以下操作:
(1)计算已知类别数据集中的点与当前点之间的距离;
(2)依照距离依次递增的次序排序;
(3)选取与当前点所在数据最小的k个点
(4)确定前k个点所在类别的出现频率
(5)返回前k个点出现频率最高的类别作为当前点的预测分类
# 使用Python导入数据
from numpy import #导入numpy数据包
impor operator #导入运算数据包
#加载样本数据的方法,返回样本数据和样本标签
def createDatabaseSet():
gtoup = array([[1.0,2.0],[1.2,0.1],[0.1,1.4],[0.3,3.5]]) #样本点数据
lables = ['A','A','B','B'] #样本点标签
return group,lables
array()数组 #很多人把二维的array也叫做矩阵
newValue = (Oldvalue-min)/(max-min) 数据进行相除