机器学习入门之K-近邻算法
沉沙 2018-12-21 来源 : 阅读 921 评论 0

摘要:本篇教程探讨了机器学习入门之K-近邻算法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

本篇教程探讨了机器学习入门之K-近邻算法,希望阅读本篇文章以后大家有所收获,帮助大家对相关内容的理解更加深入。

机器学习入门之K-近邻算法

<

 K-近邻算法的直观理解就是:给定一个训练集合,对于新的实例,在训练集合中找到k个与该实例最近的邻居,然后根据“少数服从多数”原则判断该实例归属于哪一类,又称“随大流”
K-近邻算法的三大要素:K值得选取,邻居距离度量,分类决策的制定。
(1)K值选取:通常采用交叉验证选取最优的K值(自己了解)
(2)邻居距离度量:根据不同的应用场景选取相应的距离度量。常见的距离度量有欧几里得距离、曼哈顿距离、马氏距离。同时要注意的是归一化机制。
(3)分类决策制定:一般分为平等投票表决原则和加权投票原则。
import operator
import csv
import math
import random
def loadDataSet(filename,split,trainingSet=[],testSet=[]):
    #读取本地数据#
    with open(filename,'r') as csvfile:
        lines=csv.reader(csvfile)
        dataset=list(lines)
        for x in range(len(dataset)-1):
            for y in range (4):
                dataset[x][y]=float(dataset[x][y])
            if random.random()<split:
                trainingSet.append(dataset[x])
            else:
                testSet.append(dataset[x])
def EuclidDist(instance1,instance2,len):
    #求欧几里得距离#
    distance=0.0
    for x in range(len):
        distance+=pow((instance1[x]-instance2[x]),2)
    return math.sqrt(distance)
def getNeighbors(trainSet,testInstance,k):
    #获取最近邻居#
    distance=[]
    length=len(testInstance)-1
    for x in range(len(trainSet)):
        dist=EuclidDist(testInstance,trainSet[x],length)
        distance.append((trainSet[x],dist))
    distance.sort(key=operator.itemgetter(1))
    #列表的sort(key)方法用来根据关键字排序
    neighbors=[]
    for x in range(k):
        neighbors.append(distance[x][0])
    return neighbors
def getClass(neighbors):
    #分类与评估函数#
     classVotes={}
     for x in range(len(neighbors)):
         instance_class=neighbors[x][-1]
         if instance_class in classVotes:
             classVotes[instance_class]+=1
         else:
             classVotes[instance_class]=1
         sortedVotes=sorted(classVotes.items(),key=operator.itemgetter(1),reverse=True)
     return sortedVotes[0][0]
def getAccuracy(testSet,predictions):
    #预测正确率计算#
    correct=0
    for x in range(len(testSet)):
        if testSet[x][-1]==predictions[x]:
            correct+=1
    return (correct/float(len(testSet)))*100.0
def main():
    trainingSet=[]
    testSet=[]
    split=0.7
    loadDataSet('iris.data.csv',split,trainingSet,testSet)
    print('训练集合:'+repr(len(trainingSet)))
    print('测试集合:'+repr(len(testSet)))
    predictions=[]
    k=3
    for x in range(len(testSet)):
        neighbors=getNeighbors(trainingSet,testSet[x],k)
        result=getClass(neighbors)
        predictions.append(result)
        print('>预测='+repr(result)+',实际='+repr(testSet[x][-1]))
    accuracy=getAccuracy(testSet,predictions)
    print('精确度为:'+repr(accuracy)+'%')
main()
   

本文由职坐标整理发布,学习更多的相关知识,请关注职坐标IT知识库!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程