knn算法c++实现例子
时间: 2024-09-25 17:01:09 浏览: 45
K近邻(K-Nearest Neighbors, KNN)是一种简单而有效的机器学习分类算法。在C++中实现KNN,你需要处理数据集、计算距离、找到最近邻居以及预测新样本的类别。以下是一个简单的步骤示例:
1. 首先,定义一个数据结构来存储训练样本,通常包括特征向量和对应的标签。
```cpp
struct Sample {
std::vector<double> features;
int label;
};
```
2. 定义一个函数来计算两个样本之间的欧氏距离,这里是单维空间的例子,实际应用可能需要更复杂的距离度量。
```cpp
double euclidean_distance(const Sample& s1, const Sample& s2) {
double distance = 0.0;
for (size_t i = 0; i < s1.features.size(); ++i) {
distance += pow(s1.features[i] - s2.features[i], 2);
}
return sqrt(distance);
}
```
3. 然后,可以创建一个KNN类,包含搜索k个最接近邻居并进行多数投票的功能。
```cpp
class KNNClassifier {
private:
std::vector<Sample> train_data;
size_t k;
public:
KNNClassifier(const std::vector<Sample>& data, size_t k_value)
: train_data(data), k(k_value) {}
int predict(const Sample& test_sample) {
// 计算测试样本与所有训练样本的距离
std::vector<std::pair<double, int>> distances_and_labels(train_data.size());
for (size_t i = 0; i < train_data.size(); ++i) {
distances_and_labels[i].first = euclidean_distance(test_sample, train_data[i]);
distances_and_labels[i].second = train_data[i].label;
}
// 对距离进行排序,并取前k个邻居
std::sort(distances_and_labels.begin(), distances_and_labels.end());
// 返回邻居中最多见的类别作为预测结果
int most_common_label = 0;
int max_count = 0;
for (size_t i = 0; i < k; ++i) {
if (distances_and_labels[i].second > max_count) {
max_count = distances_and_labels[i].second;
most_common_label = distances_and_labels[i].second;
}
}
return most_common_label;
}
};
```
阅读全文