关于kNN、kMeans、Apriori算法小结

栏目: 数据库 · 发布时间: 5年前

内容简介:即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算法小结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Rails 5敏捷开发

Rails 5敏捷开发

[美] Sam Ruby、[美] Dave Thomas、[美] David Heinemeier Hansson / 安道、叶炜、大疆Ruby技术团队 / 华中科技大学出版社 / 2017-12-30 / 115.00

本书以讲解“购书网站”案例为主线,逐步介绍Rails的内置功能。全书分为3部分,第一部分介绍Rails的安装、应用程序验证、Rails框架的体系结构,以及Ruby语言知识;第二部分用迭代方式构建应用程序,然后依据敏捷开发模式开展测试,最后用Capistrano完成部署;第三部分补充日常实用的开发知识。本书既有直观的示例,又有深入的分析,同时涵盖了Web开发各方面的知识,堪称一部内容全面而又深入浅出......一起来看看 《Rails 5敏捷开发》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换