node_map: Dict[str, type] = {}

在尝试启动Python3.5的Spyder集成开发环境时,遇到了导入错误。错误源头在于`jedi`库的版本不兼容。解决方法是通过conda安装指定版本的`parso`库,例如`parso==0.3.1`,以确保与现有环境兼容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

python3.5启动spyder报错
Traceback (most recent call last):
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/spyder/app/mainwindow.py”, line 3110, in main
mainwindow = run_spyder(app, options, args)
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/spyder/app/mainwindow.py”, line 3007, in run_spyder
main.setup()
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/spyder/app/mainwindow.py”, line 932, in setup
from spyder.plugins.ipythonconsole import IPythonConsole
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/spyder/plugins/ipythonconsole.py”, line 59, in
from spyder.widgets.ipythonconsole import ClientWidget
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/spyder/widgets/ipythonconsole/init.py”, line 12, in
from .debugging import DebuggingWidget
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/spyder/widgets/ipythonconsole/debugging.py”, line 16, in
from qtconsole.rich_jupyter_widget import RichJupyterWidget
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/qtconsole/rich_jupyter_widget.py”, line 14, in
from .jupyter_widget import JupyterWidget
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/qtconsole/jupyter_widget.py”, line 20, in
from IPython.lib.lexers import IPythonLexer, IPython3Lexer
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/IPython/init.py”, line 55, in
from .terminal.embed import embed
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/IPython/terminal/embed.py”, line 16, in
from IPython.terminal.interactiveshell import TerminalInteractiveShell
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/IPython/terminal/interactiveshell.py”, line 32, in
from .debugger import TerminalPdb, Pdb
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/IPython/terminal/debugger.py”, line 6, in
from IPython.core.completer import IPCompleter
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/IPython/core/completer.py”, line 146, in
import jedi
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/jedi/init.py”, line 41, in
from jedi.api import Script, Interpreter, set_debug_function,
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/jedi/api/init.py”, line 15, in
import parso
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/parso/init.py”, line 41, in
from parso.parser import ParserSyntaxError
File “/home/luiseia/anaconda3/envs/pcl/lib/python3.5/site-packages/parso/parser.py”, line 113
node_map: Dict[str, type] = {}

安装了一个可用版本的parso
conda install parso==0.3.1

def func_parse_find_by_dict(self, root, dict_find): list_result=[] if 'dict_L2_find' in dict_find.keys(): List_node_L1 = self.func_ET_find_node_from_parent_node(root, dict_find, 'str_L1_findall', 'str_L1_find') list_L2_find_current = dict_find['dict_L2_find']['list_current'] for node_L1 in List_node_L1: list_L2_current_result = [self.func_ET_find_item_from_node(node_L1, str_t) for str_t in list_L2_find_current] # list_L2_L3_current_result = list_L2_current_result if 'dict_L3_find' in dict_find.keys(): List_node_L2 = self.func_ET_find_node_from_parent_node(node_L1, dict_find['dict_L2_find'], 'str_next_findall', 'str_next_find') list_L3_find_current = dict_find['dict_L3_find']['list_current'] if List_node_L2 == []: list_L3_current_result = ['--' for str_t in list_L3_find_current] list_result.append(list_L2_current_result + list_L3_current_result) else: for node_L2 in List_node_L2: list_L3_current_result = [self.func_ET_find_item_from_node(node_L2, str_t) for str_t in list_L3_find_current] if 'dict_L4_find' in dict_find.keys(): List_node_L3 = self.func_ET_find_node_from_parent_node(node_L2, dict_find['dict_L3_find'], 'str_next_findall', 'str_next_find') list_L4_find_current = dict_find['dict_L4_find']['list_current'] if List_node_L3 == []: list_L4_current_result = ['--' for str_t in list_L4_find_current] list_result.append(list_L2_current_result + list_L3_current_result + list_L4_current_result) else: for node_L3 in List_node_L3: list_L4_current_result = [self.func_ET_find_item_from_node(node_L3, str_t) for str_t in list_L4_find_current] list_result.append(list_L2_current_result + list_L3_current_result + list_L4_current_result) else: list_result.append(list_L2_current_result + list_L3_current_result) else: list_result.append(list_L2_current_result) list_result_key=[] if 'dict_L2_find' in dict_find.keys(): list_result_key = list(map(os.path.basename, dict_find['dict_L2_find']['list_current'])) if 'dict_L3_find' in dict_find.keys(): list_result_key += list(map(os.path.basename, dict_find['dict_L3_find']['list_current'])) if 'dict_L4_find' in dict_find.keys(): list_result_key += list(map(os.path.basename, dict_find['dict_L4_find']['list_current'])) return list_result,list_result_key
03-25
from random import choice from collections import Counter import math # 定义数据集 D = [ {'色泽': '青绿', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '青绿', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '平坦', '触感': '硬滑', '好瓜': '否'}, {'色泽': '乌黑', '根蒂': '蜷缩', '敲声': '沉闷', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '平坦', '触感': '硬滑', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '蜷缩', '敲声': '沉闷', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '浅白', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '浅白', '根蒂': '蜷缩', '敲声': '沉闷', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '清晰', '脐部': '稍凹', '触感': '软粘', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '稍糊', '脐部': '稍凹', '触感': '软粘', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '清晰', '脐部': '稍凹', '触感': '硬滑', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '清脆', '纹理': '稍糊', '脐部': '稍凹', '触感': '硬滑', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '沉闷', '纹理': '稍糊', '脐部': '稍凹', '触感': '硬滑', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '硬挺', '敲声': '清脆', '纹理': '清晰', '脐部': '平坦', '触感': '软粘', '好瓜': '否'}, {'色泽': '浅白', '根蒂': '硬挺', '敲声': '清脆', '纹理': '模糊', '脐部': '平坦', '触感': '硬滑', '好瓜': '否'}, {'色泽': '浅白', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '模糊', '脐部': '平坦', '触感': '软粘', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '稍糊', '脐部': '凹陷', '触感': '硬滑', '好瓜': '否'}, {'色泽': '浅白', '根蒂': '稍蜷', '敲声': '沉闷', '纹理': '稍糊', '脐部': '凹陷', '触感': '硬滑', '好瓜': '否'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '清晰', '脐部': '稍凹', '触感': '软粘', '好瓜': '否'}, {'色泽': '浅白', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '模糊', '脐部': '平坦', '触感': '硬滑', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '蜷缩', '敲声': '沉闷', '纹理': '稍糊', '脐部': '稍凹', '触感': '硬滑', '好瓜': '否'}, ] # ========== # 决策树生成类 # ========== class DecisionTree: def __init__(self, D, label, chooseA): self.D = D # 数据集 self.label = label # 哪个属性作为标签 self.chooseA = chooseA # 划分方法 self.A = list(filter(lambda key: key != label, D[0].keys())) # 属性集合A # 获得A的每个属性的可选项 self.A_item = {} for a in self.A: self.A_item.update({a: set(self.getClassValues(D, a))}) self.root = self.generate(self.D, self.A) # 生成树并保存根节点 # 获得D中所有className属性的值 def getClassValues(self, D, className): return list(map(lambda sample: sample[className], D)) # D中样本是否在A的每个属性上相同 def isSameInA(self, D, A): for a in A: types = set(self.getClassValues(D, a)) if len(types) > 1: return False return True # 构建决策树,递归生成节点 def generate(self, D, A): node = {} # 生成节点 remainLabelValues = self.getClassValues(D, self.label) # D中的所有标签 remainLabelTypes = set(remainLabelValues) # D中含有哪几种标签 if len(remainLabelTypes) == 1: # 当前节点包含的样本全属于同个类别,无需划分 return remainLabelTypes.pop() # 标记Node为叶子结点,值为仅存的标签 most = max(remainLabelTypes, key=remainLabelValues.count) # D占比最多的标签 if len(A) == 0 or self.isSameInA(D, A): # 当前属性集为空,或是所有样本在所有属性上取值相同,无法划分 return most # 标记Node为叶子结点,值为占比最多的标签 a = self.chooseA(D, A, self) # 划分选择 for type in self.A_item[a]: condition = (lambda sample: sample[a] == type) # 决策条件 remainD = list(filter(condition, D)) # 剩下的样本 if len(remainD) == 0: # 当前节点包含的样本集为空,不能划分 node.update({type: most}) # 标记Node为叶子结点,值为占比最多的标签 else: # 继续对剩下的样本按其余属性划分 remainA = list(filter(lambda x: x != a, A)) # 未使用的属性 _node = self.generate(remainD, remainA) # 递归生成子代节点 node.update({type: _node}) # 把生成的子代节点更新到当前节点 return {a: node} # 定义划分方法 # 随机选择 def random_choice(D, A, tree: DecisionTree): return choice(A) # 信息熵 def Ent(D, label, a, a_v): D_v = filter(lambda sample: sample[a] == a_v, D) D_v = map(lambda sample: sample[label], D_v) D_v = list(D_v) D_v_length = len(D_v) counter = Counter(D_v) info_entropy = 0 for k, v in counter.items(): p_k = v / D_v_length info_entropy += p_k * math.log(p_k, 2) return -info_entropy # 信息增益 def information_gain(D, A, tree: DecisionTree): gain = {} for a in A: gain[a] = 0 values = tree.getClassValues(D, a) counter = Counter(values) for a_v, nums in counter.items(): gain[a] -= (nums / len(D)) * Ent(D, tree.label, a, a_v) return max(gain.keys(), key=lambda key: gain[key]) # 创建决策树 desicionTreeRoot = DecisionTree(D, label='好瓜', chooseA=information_gain).root print('决策树:', desicionTreeRoot) # 决策树可视化类 class TreeViewer: def __init__(self): from graphviz import Digraph self.id_iter = map(str, range(0xffff)) self.g = Digraph('G', filename='decisionTree.gv') def create_node(self, label, shape=None): id = next(self.id_iter) self.g.node(name=id, label=label, shape=shape, fontname="Microsoft YaHei") return id def build(self, key, node, from_id): for k in node.keys(): v = node[k] if type(v) is dict: first_attr = list(v.keys())[0] id = self.create_node(first_attr + "?", shape='box') self.g.edge(from_id, id, k, fontsize='12', fontname="Microsoft YaHei") self.build(first_attr, v[first_attr], id) else: id = self.create_node(v) self.g.edge(from_id, id, k, fontsize='12', fontname="Microsoft YaHei") def show(self, root): first_attr = list(root.keys())[0] id = self.create_node(first_attr + "?", shape='box') self.build(first_attr, root[first_attr], id) self.g.view() # 显示创建的决策树 viewer = TreeViewer() viewer.show(desicionTreeRoot) 分别使用c4.5和cart重新实现这段代码的功能,数据集用D = [ {'色泽': '青绿', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '青绿', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '平坦', '触感': '硬滑', '好瓜': '否'}, {'色泽': '乌黑', '根蒂': '蜷缩', '敲声': '沉闷', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '平坦', '触感': '硬滑', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '蜷缩', '敲声': '沉闷', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '浅白', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '是'}, {'色泽': '浅白', '根蒂': '蜷缩', '敲声': '沉闷', '纹理': '清晰', '脐部': '凹陷', '触感': '硬滑', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '清晰', '脐部': '稍凹', '触感': '软粘', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '稍糊', '脐部': '稍凹', '触感': '软粘', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '清晰', '脐部': '稍凹', '触感': '硬滑', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '清脆', '纹理': '稍糊', '脐部': '稍凹', '触感': '硬滑', '好瓜': '是'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '沉闷', '纹理': '稍糊', '脐部': '稍凹', '触感': '硬滑', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '硬挺', '敲声': '清脆', '纹理': '清晰', '脐部': '平坦', '触感': '软粘', '好瓜': '否'}, {'色泽': '浅白', '根蒂': '硬挺', '敲声': '清脆', '纹理': '模糊', '脐部': '平坦', '触感': '硬滑', '好瓜': '否'}, {'色泽': '浅白', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '模糊', '脐部': '平坦', '触感': '软粘', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '稍糊', '脐部': '凹陷', '触感': '硬滑', '好瓜': '否'}, {'色泽': '浅白', '根蒂': '稍蜷', '敲声': '沉闷', '纹理': '稍糊', '脐部': '凹陷', '触感': '硬滑', '好瓜': '否'}, {'色泽': '乌黑', '根蒂': '稍蜷', '敲声': '浊响', '纹理': '清晰', '脐部': '稍凹', '触感': '软粘', '好瓜': '否'}, {'色泽': '浅白', '根蒂': '蜷缩', '敲声': '浊响', '纹理': '模糊', '脐部': '平坦', '触感': '硬滑', '好瓜': '否'}, {'色泽': '青绿', '根蒂': '蜷缩', '敲声': '沉闷', '纹理': '稍糊', '脐部': '稍凹', '触感': '硬滑', '好瓜': '否'}, ],生成的决策树模型进行预剪枝/后剪枝,需体现做剪枝前后的模型变化,使用graphviz生成可视化结果,不调包
05-13
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值