内容简介:即k-近邻算法,属监督学习。即处理输出格式数据差值大的数据严重影响计算结果,将数值归一化(即取值范围在0-1之间),可以有效减小影响
趁着准备即将到来的笔试,也为了回顾一下这一星期来所学的三个机器学习算法,觉得还是重新理一下思路,好理解一下这几个算法。 复制代码
kNN算法
即k-近邻算法,属监督学习。
概述
- 优点:精度高,对异常值不敏感,无数据输入假定(其实还是没有很理解优点体现在什么方面
- 缺点:复杂度高(时间复杂度、空间复杂度)
- 适用数据范围:数值型和标称型
-
原理:
- 对给定的数据集,提取出特征值和标签分别存放
- 输入新数据
- 计算与给定数据集的距离
- 排序
- 选取距离最近(即最相似)的前k个数据的标签
- 统计所有出现的标签被提取次数
- 选取提取次数最多的标签分类作为新数据的分类
详细步骤
导入数据
即处理输出格式
import numpy as np
def getDataSet(filename):
dataSet = np.loadtxt(filename,delimiter=',',usecols=(0,1,2,3))
#获取特征值
#delimiter为分割符,需要查看所有获取的数据集里面的内容
#usecols为指定获取的列
#np.loadtxt()得到的矩阵为float类型
#以下获取数据集中的分类标签
arrayLines = open(filename).readlines()#打开文件并获取所有行
labelsVector = [] #空列表用以存储标签
for line in arrayLines:
line = line.strip().split(',') #strip用以消除回车,split(',')用以分割行
labelsVector.append(line[-1]) #标签存在于最后一列,改语句将最后一列输入到列表
return dataSet,labelsVector
复制代码
分类器(kNN主算法)
#辅助函数:欧式距离
def distEuro(vecA,vecB):
return np.power(np.sum(np.power(vecA-vecB),2),0.5)
#kNN主算法函数
def classify(inX,labels,dataSet,k):
#参数分别为:
#inX:输入向量
#labels:标签向量:所有数据的分类
#dataSet:数据集
#k:指定获取距离最近的数据的标签的数量
m = dataSet.shape[0] #获取数据集的行数
diffMat = distEuro(np.tile(inX,(m,1)),dataSet) #距离矩阵
#排序并获得索引
sortedDist = diffMat.argsort() #得到diffMat中从小到大排好序的索引值
labelCount = {} # 以键值对形式存储所提取标签及其出现次数
for i in range(k):
label = labels[sortedDist[i]] #提取标签
labelCount[label] = labelCount.get(label,0) + 1
#也可:labelCount[label] = labelCount.setdefault(label,0) + 1
#表示标签已存在是加一,不存在时将标签存入字典设置初始值为0再加一
sortedCount = sorted(labelCount.item(),key=operator.itemgetter(1),reverse=True)
#reverse=True表示降序排序
#key=operator.itemgetter(0)表示按键排序
#key=operator.itemgetter(1)表示按值排序
return sotedCount[0][0] #返回标签
复制代码
归一化
数据差值大的数据严重影响计算结果,将数值归一化(即取值范围在0-1之间),可以有效减小影响
def autoNorm(dataSet):
dmin = dataSet.min(0)
dmax = dataSet.max(0)
ranges = dmax-dmin
m = dataSet.shape[0] #获取行数
minMat = np.tile(dmin,(m,1)) #将dmin扩充为于数据集相同行数的矩阵
rangeMat = np.tile(ranges,(m,1)) #将取值向量扩充为与数据集相同行数的矩阵
normSet = (dataSet-minMat)/ranges #减去最小值,除以取值范围可得到归一化数组
return normSet,ranges,dmin #返回归一化矩阵,范围,最小值
复制代码
测试和预测函数先略过。注意点位,对于处理过的数据集,采用随机分配测试集和训练集,对于未处理可以采用前百分之十作为测试集
以上所述就是小编给大家介绍的《关于kNN、kMeans、Apriori算法小结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Text Processing in Python
David Mertz / Addison-Wesley Professional / 2003-6-12 / USD 54.99
Text Processing in Python describes techniques for manipulation of text using the Python programming language. At the broadest level, text processing is simply taking textual information and doing som......一起来看看 《Text Processing in Python》 这本书的介绍吧!