用C++实现天气决策树
时间: 2024-06-01 15:02:51 浏览: 87
天气决策树是一种基于决策树算法的预测模型,用于预测未来一段时间内的天气情况。下面是一个简单的用 C++ 实现天气决策树的示例代码:
```c++
#include <iostream>
using namespace std;
// 定义天气决策树结点
struct TreeNode {
int feature;
bool is_leaf;
string label;
TreeNode* left;
TreeNode* right;
};
// 创建天气决策树
TreeNode* create_decision_tree() {
// 创建根结点
TreeNode* root = new TreeNode;
root->feature = 1;
root->is_leaf = false;
root->left = nullptr;
root->right = nullptr;
// 创建左子树
TreeNode* left = new TreeNode;
left->feature = 2;
left->is_leaf = false;
left->left = nullptr;
left->right = nullptr;
root->left = left;
// 创建右子树
TreeNode* right = new TreeNode;
right->feature = 3;
right->is_leaf = false;
right->left = nullptr;
right->right = nullptr;
root->right = right;
// 创建左子树的左子树
TreeNode* left_left = new TreeNode;
left_left->feature = 0;
left_left->is_leaf = true;
left_left->label = "Sunny";
left_left->left = nullptr;
left_left->right = nullptr;
left->left = left_left;
// 创建左子树的右子树
TreeNode* left_right = new TreeNode;
left_right->feature = 0;
left_right->is_leaf = true;
left_right->label = "Rainy";
left_right->left = nullptr;
left_right->right = nullptr;
left->right = left_right;
// 创建右子树的左子树
TreeNode* right_left = new TreeNode;
right_left->feature = 0;
right_left->is_leaf = true;
right_left->label = "Cool";
right_left->left = nullptr;
right_left->right = nullptr;
right->left = right_left;
// 创建右子树的右子树
TreeNode* right_right = new TreeNode;
right_right->feature = 0;
right_right->is_leaf = true;
right_right->label = "Warm";
right_right->left = nullptr;
right_right->right = nullptr;
right->right = right_right;
return root;
}
// 预测天气情况
string predict_weather(TreeNode* root, int* features) {
TreeNode* node = root;
while (!node->is_leaf) {
if (features[node->feature] == 0) {
node = node->left;
} else {
node = node->right;
}
}
return node->label;
}
int main() {
// 创建天气决策树
TreeNode* root = create_decision_tree();
// 测试天气决策树
int features[4] = {1, 0, 1, 0};
string weather = predict_weather(root, features);
cout << "The weather is " << weather << endl;
return 0;
}
```
在上面的代码中,我们首先定义了一个 `TreeNode` 结构体,用于表示天气决策树的结点。然后,我们通过 `create_decision_tree` 函数来创建天气决策树。在这个函数中,我们按照天气决策树的结构来创建结点,并将它们连接起来,形成一颗完整的决策树。
接下来,我们定义了一个 `predict_weather` 函数,用于预测天气情况。该函数接收一个决策树的根结点和一个特征数组作为参数,返回预测的天气情况。在函数中,我们通过遍历决策树,根据特征数组的取值来决定向哪个子结点遍历,直到遍历到叶子结点为止,然后返回叶子结点的 label。
最后,在 `main` 函数中,我们调用 `create_decision_tree` 函数来创建天气决策树,并调用 `predict_weather` 函数来预测天气情况。我们定义了一个特征数组 `features`,用于表示当前的天气特征,然后将它作为参数传递给 `predict_weather` 函数,得到预测的天气情况并输出。
阅读全文