```python import torch import torch.nn as nn from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score class RandomForest(nn.Module): def __init__(self, n_estimators=10, max_depth=None, random_state=None): super(RandomForest, self).__init__() self.n_estimators = n_estimators self.max_depth = max_depth self.random_state = random_state self.trees = nn.ModuleList([DecisionTree(max_depth=max_depth, random_state=random_state) for _ in range(n_estimators)]) def forward(self, X): predictions = [] for tree in self.trees: predictions.append(tree(X)) return torch.stack(predictions).mean(dim=0) class DecisionTree(nn.Module): def __init__(self, max_depth=None, random_state=None): super(DecisionTree, self).__init__() self.max_depth = max_depth self.random_state = random_state def forward(self, X): # 这里需要实现决策树的构建和预测过程,可以参考sklearn中的DecisionTreeClassifier实现 pass # 加载数据集 iris = load_iris() X = iris.data y = iris.target # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 转换为PyTorch张量 X_train = torch.tensor(X_train, dtype=torch.float32) y_train = torch.tensor(y_train, dtype=torch.long) X_test = torch.tensor(X_test, dtype=torch.float32) y_test = torch.tensor(y_test, dtype=torch.long) # 创建随机森林模型 rf = RandomForest(n_estimators=10, max_depth=3, random_state=42) # 训练模型(这里仅作示例,实际上需要实现决策树的训练过程) for epoch in range(10): y_pred = rf(X_train) loss = nn.CrossEntropyLoss()(y_pred, y_train) print(f"Epoch {epoch + 1}, Loss: {loss.item()}") # 预测 y_pred = rf(X_test) y_pred = torch.argmax(y_pred, dim=1) # 计算准确率 accuracy = accuracy_score(y_test, y_pred) print(f"Accuracy: {accuracy}") ``` [2024-06-04 20:38:11 | AI写代码神器 | 710点数解答]