import numpy as np """ 函数说明:装载数据集 Parameters: fileName - 文件名 Returns: group - 数据集 labels - 分类标签 """ def loadDataSet(fileName): g=[] l=[] for。。。。 按行读取数据前两列--g,后一列--l 处理\t return group, labels """ 函数说明:曼哈顿距离求解 Parameters: x1 - 向量1 x2 - 向量2 Returns: dist - x1与x2间的曼哈顿距离 """ def distManhattan(x1,x2): diff=|x1-x2| 求绝对值abs dist=sum求和(diff,axis=?) return dist """ 函数说明:kNN算法,分类器 Parameters: inX - 用于分类的数据(测试集) dataSet - 用于训练的样本特征(训练集) labels - 分类标准 k - kNN算法参数,选择距离最小的k个点 Returns: predClass - 分类结果 """ def classifyKNN(inX, dataSet, labels, k): dataSet= dist=distManhattan( , ) 一:for循环排序 二:函数argsort,对值从大到小 for i in range(k): 对labels遍历排序的前k个标签 统计k个类别出现的次数 判断inX的类别 return predClass #设置测试数据test test=[0.45,0.1] group,labels=loadDataSet(' TrainingSet.txt') test_class = classifyKNN(test, group, labels, 3) #打印预测结果 if predClass== 1: p() else p() 代码实现
时间: 2024-02-14 07:04:53 浏览: 106
这段代码实现了一个简单的kNN算法,用于对测试数据进行分类。具体实现过程如下:
1. loadDataSet()函数用于加载数据集,将数据集和标签分别存储在group和labels变量中。
2. distManhattan()函数计算两个向量之间的曼哈顿距离。
3. classifyKNN()函数是kNN算法的主要实现。首先,它计算测试数据点和训练集中每个数据点之间的距离,并将它们存储在dist列表中。然后,它使用argsort()函数对这些距离进行排序,并得到距离最近的k个数据点的索引。接着,它统计这k个数据点所属的类别,并找到出现次数最多的类别,作为测试数据点的预测类别。
4. 最后,它使用预测类别进行输出。
需要注意的是,代码中可能有一些语法错误,如缺少冒号、括号不匹配等。需要仔细检查并修正这些错误才能使代码正确运行。
以下是完整的代码实现:
```python
import numpy as np
def loadDataSet(fileName):
group = []
labels = []
with open(fileName) as f:
for line in f.readlines():
line = line.strip().split('\t')
group.append([float(line[0]), float(line[1])])
labels.append(int(line[2]))
return group, labels
def distManhattan(x1, x2):
diff = np.abs(np.array(x1) - np.array(x2))
dist = np.sum(diff)
return dist
def classifyKNN(inX, dataSet, labels, k):
dataSetSize = len(dataSet)
distList = []
for i in range(dataSetSize):
dist = distManhattan(inX, dataSet[i])
distList.append(dist)
sortedDistIndices = np.argsort(np.array(distList))
classCount = {}
for i in range(k):
voteLabel = labels[sortedDistIndices[i]]
classCount[voteLabel] = classCount.get(voteLabel, 0) + 1
sortedClassCount = sorted(classCount.items(), key=lambda x:x[1], reverse=True)
return sortedClassCount[0][0]
if __name__ == '__main__':
test = [0.45, 0.1]
group, labels = loadDataSet('TrainingSet.txt')
test_class = classifyKNN(test, group, labels, 3)
print(test_class)
```
其中,TrainingSet.txt是存储训练数据集的文件,每行包含两个特征值和一个标签值,用制表符分隔。
阅读全文