KNN算法实例

《机器学习算法一书中的实战》

python 学习总结 中文注释需要 添加
# -*- coding:utf-8 -*-
# -*- coding:utf-8 -*-
from numpy import *
import operator
def file2matrix(filename):
fr=open(filename)
numberOfLines=len(fr.readlines())
returnMat=zeros((numberOfLines,3))
classLabelVector=[]
fr=open(filename)
index=0
for line in fr.readlines():
line=line.strip()#截取到回车字符,
listFromLine=line.split('\t')#并将整行数据分割成一个元素列表
returnMat[index,:]=listFromLine[0:3]#将前每一行放入元素列表
classLabelVector.append(int(listFromLine[-1]))
index+=1
return returnMat,classLabelVector
datingDataMat,datingLabels=file2matrix('datingTestSet.txt')
print(datingDataMat)
print(datingLabels)
需要采用datatingTestSet2.txt进行测试,字符串太长是不能够转换为整数的。

另外书一下python代码的运行,有两种方式,一种是直接输入 python filename.py

另外一种是输入python,相当于运行python编译器,接着运行命令行。两者的区别是,第一种属于shell运行,命令行前边不会有>>>,第二种前边有>>>

好的,下面是一个简单的KNN算法实例,包括一个数据集。请注意,这个数据集只是一个示例,您可以根据自己的需求修改它。 ```python import math # 定义KNN算法 def knn(data, query, k, distance_fn, choice_fn): """ data: 训练数据,是一个列表,每个元素都是一个元组,元组的第一个元素是数据点的特征,第二个元素是数据点的标签 query: 查询数据,是一个元组,元组的第一个元素是查询点的特征 k: 选择最近邻居的数量 distance_fn: 距离函数,用于计算数据点之间的距离 choice_fn: 投票函数,用于选择最终的标签 """ # 计算查询点与每个数据点之间的距离 distances = [] for index, point in enumerate(data): distance = distance_fn(point[0], query) distances.append((distance, index)) # 按照距离排序 distances = sorted(distances) # 选择最近的k个邻居 neighbors = distances[:k] # 对邻居进行投票,选择最终的标签 labels = [data[i][1] for distance, i in neighbors] return choice_fn(labels) # 定义欧几里得距离函数 def euclidean_distance(point1, point2): """ point1: 特征向量1 point2: 特征向量2 """ distance = 0 for i in range(len(point1)): distance += pow(point1[i] - point2[i], 2) return math.sqrt(distance) # 定义投票函数,选择标签出现最多的那个 def mode(labels): """ labels: 标签列表 """ return max(set(labels), key=labels.count) # 定义一个数据集 data = [ ([1, 2, 3], 'A'), ([4, 5, 6], 'B'), ([7, 8, 9], 'C'), ([10, 11, 12], 'D') ] # 测试KNN算法 print(knn(data, [1, 2, 1], 3, euclidean_distance, mode)) # 输出 A ``` 带有数据集的KNN算法实现到这里就结束了,您可以根据自己的需求修改数据集和特征向量的维度。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值