• 大小: 786KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Python
  • 标签: kNNpython3  

资源简介

python3下kNN数据和源码

资源截图

代码片段和文件信息

# -*- coding: cp936 -*-
# 1:约会网站
from numpy import *
import operator
from os import listdir

#创造数据集
def createDataSet():
    group = array([[1.0 1.1] [1.0 1.0] [0 0] [0 0.1]])
    labels = [‘A‘ ‘A‘ ‘B‘ ‘B‘]
    return group labels

#第一个kNN分类器  inX-测试数据 dataSet-样本数据  labels-标签 k-邻近的k个样本
def classify0(inXdataSet labels k):
    #数据集大小
    dataSetSize = dataSet.shape[0]
#计算距离
    diffMat = tile(inX (dataSetSize1))- dataSet
    sqDiffMat = diffMat ** 2#是幂运算,这里用的是欧氏距离
    sqDistances = sqDiffMat.sum(axis = 1)
    distances = sqDistances **0.5
#按距离排序
    sortedDistIndicies = distances.argsort()#返回数值从小到大的索引值
    #统计前k个点所属的类别
    classCount={}
    #选择距离最小的k个点
    for i in range(k):
        #根据排序结果的索引值返回靠近的前k个标签
        voteIlabel = labels[sortedDistIndicies[i]]
        #各个标签出现频率
        classCount[voteIlabel] = classCount.get(voteIlabel0)+1
    #排序
    #sortedClassCount = sorted(classCount.iteritems() key = operator.itemgetter(1)reverse = True)
    sortedClassCount = sorted(classCount.items() key = operator.itemgetter(1)reverse = True)#排序频率
    #返回前k个点钟频率最高的类别
    return sortedClassCount[0][0]


# 将文本记录到转换numPy的解析程序
def file2matrix(filename):
    #打开文件并得到文件行数
    fr = open(filename)
    arrayOLines = fr.readlines()
    numberOfLines = len(arrayOLines)#读出数据行数
    #创建返回的numPy矩阵
    returnMat = zeros((numberOfLines 3))
    classLabelVector = []
    index =0
    #解析文件数据到列表
    for line in arrayOLines:
        line = line.strip()#删除空白符
        listFormLine = line.split(‘\t‘)#split指定分隔符对数据切片
        returnMat[index:] = listFormLine[0:3]#选取前3个元素(特征)存储在返回矩阵中
        classLabelVector.append(int(listFormLine[-1]))
        #-1索引表示最后一列元素,为label信息存储在classLabelVector
        index += 1
    return returnMat classLabelVector

#归一化特征值
def autoNorm(dataSet):
    minVals = dataSet.min(0);#存放每列最小值,参数0使得可以从列中选取最小值,而不是当前行
    maxVals = dataSet.max(0);#存放每列最大值
    ranges = maxVals - minVals;
    normDataSet = zeros(shape(dataSet))#初始化归一化矩阵为读取的dataset
    m = dataSet.shape[0]#m保存第一行
    #特征矩阵是3*1000,minmax,range是1*3因此采用tile将变量内容复制成输入矩阵同大小
    normDataSet = dataSet - tile(minVals (m1))
    normDataSet = normDataSet/tile(ranges(m1))
    return normDataSet ranges minVals


#测试代码
def datingClassTest():
    hoRatio = 0.10    #测试数据占的百分比
    datingDataMat datingLabels = file2matrix(‘datingTestSet2.txt‘)
    normMat ranges minVals = autoNorm(datingDataMat)
    m = normMat.shape[0]
    numTestVecs = int(m*hoRatio)
    errorCount = 0.0
    for i in range(numTestVecs):
        classifierResult = classify0(normMat[i:] normMat[numTestVecs:m:]datingLabels[numTestVecs:m]3)
        print (‘the classifier came back with: %d the real answer is: %d‘ %(classifierResult datingLabels[i]))
        if(classifierResult != datingLabels[i]): errorCount += 1.0
    print (“the total error rate is: %f “ % (errorCount/float(numTestVecs)))
    

#输入某人的信息,便得出对对方喜欢程度的预测值
def classifyPer

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-08-22 16:10  kNN\
     文件       27067  2012-03-01 15:39  kNN\datingTestSet.txt
     文件       27067  2012-03-01 15:39  kNN\datingTestSet2.txt
     文件        5811  2017-08-22 15:46  kNN\kNN.py
     目录           0  2017-08-22 16:10  kNN\testDigits\
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_0.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_1.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_10.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_11.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_12.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_13.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_14.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_15.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_16.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_17.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_18.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_19.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_2.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_20.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_21.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_22.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_23.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_24.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_25.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_26.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_27.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_28.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_29.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_3.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_30.txt
     文件        1088  2010-10-07 21:35  kNN\testDigits\0_31.txt
............此处省略2855个文件信息

评论

共有 条评论

相关资源