<machine learning traning> KNN

本文介绍了一种基于Python实现的K近邻(KNN)算法,并通过一个具体的约会匹配实例展示了如何使用该算法进行分类预测。从创建数据集开始,逐步介绍了距离计算、归一化处理等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


func: open().readline.strip().split('\t');zeros,index+=1

#func:add_subplot,scatter

func: min(0),tile


from numpy import *
import operator

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

def classify0(inX,dataSet,labels,k):
    dataSetSize=dataSet.shape[0]
    diffMat=tile(inX,(dataSetSize,1))-dataSet
    #tile(A,reps)
    sqDiffMat=diffMat**2
    sqDistance=sqDiffMat.sum(axis=1)
    distances=sqDistance**0.5
    sortedDistIndicies=distances.argsort()
    classCount={}
    for i in range(k):
        votelabel=labels[sortedDistIndicies[i]]
        classCount[votelabel]=classCount.get(votelabel,0)+1
    sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
    return sortedClassCount[0][0]

def filename(filename):
	classLabel=[]
	returnMat=zeros((len(open(filename).readlines()),3))
	index=0
	for line in open(filename).readlines():
		line=line.strip().split('\t')
		if line!=['']:
			classLabel.append(int(line[-1]))
			returnMat[index,:]=line[0:3]
			index+=1
	returnMat=returnMat[:len(classLabel),:]
	return returnMat,classLabel

def autonorm(data):
	min=data.min(0)
	max=data.max(0)
	range=max-min
	norm=data-tile(min,(data.shape[0],1))
	norm=norm/tile(range,(data.shape[0],1))
	return norm,range,min

def test():
	error=0
	data,label=filename('dating.txt')
	norm,ranges,min=autonorm(data)
	m=data.shape[0]
	n=int(0.1*m)
	for i in range(n):
		result=classify0(norm[i,:],norm[n:m,:],label[n:m],3)
		if(result!=label[i]):error+=1
		print result,label[i]
	print "the error ratio is %f" %(error/float(n))

def classify():
	resultlist=['not at all','in small doses','in large doses']
	a=float(raw_input("the first argument: "))
	b=float(raw_input("the second argument: "))
	c=float(raw_input("the third argument: "))
	x=array([a,b,c])
	data,label=filename('dating.txt')
	norm,ranges,mini=autonorm(data)
	result=classify0((x-mini)/ranges,norm,label,3)
	print "you probably like this person: %s" %(resultlist[result-1])	

资源下载链接为: https://pan.quark.cn/s/9e7ef05254f8 行列式是线性代数的核心概念,在求解线性方程组、分析矩阵特性以及几何计算中都极为关键。本教程将讲解如何用C++实现行列式的计算,重点在于如何输出分数形式的结果。 行列式定义如下:对于n阶方阵A=(a_ij),其行列式由主对角线元素的乘积,按行或列的奇偶性赋予正负号后求和得到,记作det(A)。例如,2×2矩阵的行列式为det(A)=a11×a22-a12×a21,而更高阶矩阵的行列式可通过Laplace展开或Sarrus规则递归计算。 在C++中实现行列式计算时,首先需定义矩阵类或结构体,用二维数组存储矩阵元素,并实现初始化、加法、乘法、转置等操作。为支持分数形式输出,需引入分数类,包含分子和分母两个整数,并提供与整数、浮点数的转换以及加、减、乘、除等运算。C++中可借助std::pair表示分数,或自定义结构体并重载运算符。 计算行列式的函数实现上,3×3及以下矩阵可直接按定义计算,更大矩阵可采用Laplace展开或高斯 - 约旦消元法。Laplace展开是沿某行或列展开,将矩阵分解为多个小矩阵的行列式乘积,再递归计算。在处理分数输出时,需注意避免无限循环和除零错误,如在分数运算前先约简,确保分子分母互质,且所有计算基于整数进行,最后再转为浮点数,以避免浮点数误差。 为提升代码可读性和可维护性,建议采用面向对象编程,将矩阵类和分数类封装,每个类有明确功能和接口,便于后续扩展如矩阵求逆、计算特征值等功能。 总结C++实现行列式计算的关键步骤:一是定义矩阵类和分数类;二是实现矩阵基本操作;三是设计行列式计算函数;四是用分数类处理精确计算;五是编写测试用例验证程序正确性。通过这些步骤,可构建一个高效准确的行列式计算程序,支持分数形式计算,为C++编程和线性代数应用奠定基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值