将上述代码举例并完善
时间: 2024-09-18 21:02:16 浏览: 77
由于C语言的代码比较繁琐,这里我会简化示例并提供一个基本的例子,展示如何使用C语言实现KNN算法。假设我们有一个二维空间的数据集,其中包含一些训练样本(`x`坐标和`y`坐标),以及它们的标签(0或1)。下面是完整的例子:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 数据结构表示样本
typedef struct {
float x, y;
int label;
} Point;
// 欧氏距离
float euclidean_distance(Point a, Point b) {
float dx = a.x - b.x;
float dy = a.y - b.y;
return sqrt(dx * dx + dy * dy);
}
// 预测新的点
int knn_classify(const Point* train_data, int train_count, Point test_point, int k) {
int class_counts[2] = {0, 0}; // 初始化两类计数
for (int i = 0; i < train_count; ++i) {
if (euclidean_distance(train_data[i], test_point) <= k) {
class_counts[train_data[i].label]++;
}
}
// 返回多数类别的索引
return class_counts[0] > class_counts[1] ? 0 : 1;
}
int main() {
// 示例数据
const Point train_data[] = {
{1.0, 1.0, 1}, // 类别1
{2.0, 2.0, 1},
{3.0, 3.0, 1},
{4.0, 4.0, 0},
{5.0, 5.0, 0},
};
int train_count = sizeof(train_data) / sizeof(train_data[0]);
Point test_point = {3.0, 3.0};
// 使用K=1预测测试点
int prediction = knn_classify(train_data, train_count, test_point, 1);
printf("Given test point (%f, %f), the predicted label is: %d\n",
test_point.x, test_point.y, prediction);
return 0;
}
```
在这个例子中,我们只用了四个训练样本,但在实际应用中,你会需要更大的数据集。请注意,这个示例仅适用于二维空间,如果你的特征维度更高,你需要调整`Point`结构体和相关的计算。
阅读全文