-
大小: 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个文件信息
评论
共有 条评论