KNN学习笔记

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 08 21:58:22 2016

@author: Administrator
"""  
from numpy import *
import xlrd
import operator
from os import listdir
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
data = xlrd.open_workbook('data1.xlsx')
table = data.sheets()[0]
nrows = table.nrows #行数
ncols = table.ncols #列数
c1=arange(0,nrows,1)
datamatrix=zeros((nrows,ncols))
for x in range(ncols):
    cols =table.col_values(x)    
    minVals=min(cols)
    maxVals=max(cols)
    cols1=matrix(cols)# 把list转换为矩阵进行矩阵操作
    ranges=maxVals-minVals
    b=cols1-minVals
    normcols=b/ranges# 数据进行归一化处理
    datamatrix[:,x]=normcols# 把数据进行存储

# 对得到的数据进行画图
fig=plt.figure()
#ax=fig.add_subplot(111)#参数111的意思是:将画布分割成1行1列,图像画在从左到右从上到下的第1块
plt.scatter(datamatrix[:,0],datamatrix[:,1])# 对于矩阵进行画图,注意与matlab里面的不同,它的第一列为[0]   
ply.show()
inX=[1,10]
#k均值分类函数的定义

def classify0(inX,datamatrix,labels,k):

    datamatrixSize = datamatrix.shape[0]# 得到矩阵的行与列数,[0]代表行数,[1]代表列数
    diffMat=tile(inX,(datamatrixSize,1))-datamatrix
    #tile(inX,(datamatrixSize,1))把inX扩展为5行一列的矩阵
    sqDiffMat=diffMat**2
    sqDistances=sqDiffMat.sum(axis=1)#对每行元素进行求和
    distances=sqDistances**0.5
    sortedDistIndices=distances.argsort()#argsort函数返回的是数组值从小到大的索引值
    classCount={}
    for i in range(k):           
        voteIlabel=labels[sortedDistIndices[0]]
        k=classCount.get(voteIlabel,0)

    classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
    sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
#reverse=True 进行反向的排序
    return sortedClassCount[0][0]


#定义的算法的调用
# 数据的初始化    
inX=[1,10]# 预测的坐标
labels=['A','A','B','B','A']
k=2
h=classify0(inX,datamatrix,labels,k)




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值