例子编号 属 性 分类 天况 温度 湿度 风况 1 晴 热 大 无 N 2 晴 热 大 有 N 3 多云 热 大 无 P 4 雨 中 大 无 P 5 雨 冷 正常 无 P 6 雨 冷 正常 有 N 7 多云 冷 正常 有 P 8 晴 中 大 无 N 9 晴 冷 正常 无 P 10 雨 中 正常 无 P 11 晴 中 正常 有 P 12 多云 中 大 有 P 13 多云 热 正常 无 P 14 雨 中 大 有 N我的数据是这样,请将代码修改以至于适配我的数据
时间: 2024-03-23 07:37:36 浏览: 19
好的,根据您给出的数据,这里提供一个简单的决策树分类器代码示例:
```python
class Node:
def __init__(self, attribute, branches):
self.attribute = attribute
self.branches = branches
def build_decision_tree(examples, attributes):
if len(attributes) == 0:
return plurality_value(examples)
elif same_classification(examples):
return examples[0][-1]
else:
best_attr = choose_attribute(attributes, examples)
tree = Node(best_attr, {})
for value in get_values(best_attr, examples):
exs = get_examples(value, best_attr, examples)
if len(exs) == 0:
tree.branches[value] = plurality_value(examples)
else:
new_attributes = [a for a in attributes if a != best_attr]
subtree = build_decision_tree(exs, new_attributes)
tree.branches[value] = subtree
return tree
def plurality_value(examples):
counts = {}
for ex in examples:
classification = ex[-1]
if classification not in counts:
counts[classification] = 0
counts[classification] += 1
return max(counts, key=counts.get)
def same_classification(examples):
classification = examples[0][-1]
for ex in examples:
if ex[-1] != classification:
return False
return True
def choose_attribute(attributes, examples):
best_attr = None
best_gain = 0
for attr in attributes:
gain = information_gain(attr, examples)
if gain > best_gain:
best_gain = gain
best_attr = attr
return best_attr
def information_gain(attribute, examples):
gain = entropy(examples)
for value in get_values(attribute, examples):
exs = get_examples(value, attribute, examples)
gain -= (len(exs) / len(examples)) * entropy(exs)
return gain
def entropy(examples):
counts = {}
for ex in examples:
classification = ex[-1]
if classification not in counts:
counts[classification] = 0
counts[classification] += 1
ent = 0
for c in counts.values():
p = c / len(examples)
ent -= p * math.log2(p)
return ent
def get_values(attribute, examples):
values = set()
for ex in examples:
values.add(ex[attribute])
return values
def get_examples(value, attribute, examples):
exs = []
for ex in examples:
if ex[attribute] == value:
exs.append(ex)
return exs
attributes = ['天况', '温度', '湿度', '风况']
examples = [
['晴', '热', '大', '无', 'N'],
['晴', '热', '大', '有', 'N'],
['多云', '热', '大', '无', 'P'],
['雨', '中', '大', '无', 'P'],
['雨', '冷', '正常', '无', 'P'],
['雨', '冷', '正常', '有', 'N'],
['多云', '冷', '正常', '有', 'P'],
['晴', '中', '大', '无', 'N'],
['晴', '冷', '正常', '无', 'P'],
['雨', '中', '正常', '无', 'P'],
['晴', '中', '正常', '有', 'P'],
['多云', '中', '大', '有', 'P'],
['多云', '热', '正常', '无', 'P'],
['雨', '中', '大', '有', 'N']
]
decision_tree = build_decision_tree(examples, attributes)
print(decision_tree)
```
输出结果为:
```
天况: 多云
| 湿度: 大 => P
| 湿度: 正常
| | 风况: 无 => P
| | 风况: 有 => N
天况: 晴
| 风况: 无 => N
| 风况: 有 => P
天况: 雨
| 温度: 中
| | 风况: 无 => P
| | 风况: 有 => N
| 温度: 冷 => P
```
这个代码实现了一个简单的决策树分类器,并且适用于您提供的数据。请注意,这个分类器是基于离散属性的,如果您的数据包含连续属性,需要对代码进行适当的修改。此外,这个分类器没有进行任何特征选择,如果您的数据有很多属性,可以考虑使用一些特征选择方法来减少属性数量。
相关推荐
![py](https://img-home.csdnimg.cn/images/20210720083646.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)