2301_81671120 2024-02-29 17:15 采纳率: 0%
浏览 2

请问为什么python决策树运行结果会出现restart shell

如图

img

以下是代码

import numpy as np
import pandas as pd
from pandas import DataFrame,Series
from sklearn.ensemble import RandomForestRegressor
from sklearn import tree
import seaborn as sns
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
from rpy2.robjects import numpy2ri
from rpy2.robjects import pandas2ri
from rpy2.robjects.conversion import localconverter
from sklearn.model_selection import cross_val_predict




save_path=r"E:\研究生资料\数据清洗\CGSS\CGSS2010\df_result.csv"
path=r"E:\研究生资料\数据清洗\CGSS\CGSS2010\df_estima.csv"
varimp_path=r"E:\研究生资料\数据清洗\CGSS\CGSS2010"
df=pd.read_csv(path,index_col=0)

df=df[df["income"]>0]
df.index=np.arange(len(df))


#-------------------------描述性统计-------------------------



#生成虚拟变量:

init_var=list()

dumm_var=["fedu","fwork","ftype","medu","mtype",
          'mwork'
          ]

for i in dumm_var:
    df=pd.concat([df,pd.get_dummies(df[i],prefix=i)],axis=1)


remove_var=['id','provinces','hu','work','income']
remove_var.extend(dumm_var)
v=list(df.columns)
for i in remove_var:
    v.remove(i) 


income=np.log(df["income"].values) 
x=df[v].values

#-------------------------Python:回归树-------------------------
clf = tree.DecisionTreeRegressor() 
clf2 = clf.fit(x,income.ravel())
# py_rt_pre=clf.predict(x)

py_rt_pre=cross_val_predict(clf2,x,income.ravel(), cv=10)

#-------------------------Python:随机森林-------------------------
rfc=RandomForestRegressor(n_estimators=1000,random_state=2)
#n_estimators 迭代次数,即决策树的数量;random_state 控制随机性
rfc2= rfc.fit(x,income.ravel())
# py_rf_pre=rfc.predict(x)
py_rf_pre=cross_val_predict(rfc2,x,income.ravel(), cv=10)
varimp_rf=rfc2.feature_importances_ #特征筛选
# df_varimp_rf
df_varimp_rf=DataFrame({"var":v,"varimp":list(varimp_rf)})
df_varimp_rf=df_varimp_rf.sort_values(by=["varimp"],ascending=False)

#ascending=true 表示降序排列;ascending=false 表示升序排序




#------------------------------R:party------------------------------
party=importr("party")
base=importr("base")
stats=importr("stats")


df_r=df[v]
df_r.loc[:,"lny"]=income

with localconverter(ro.default_converter + pandas2ri.converter):
    df_r_use=ro.conversion.py2rpy(df_r)


x_name=list(df_r.columns)
x_name.remove("lny")
formula_str="+".join(x_name)
formula_str="lny~"+formula_str


#----------------------party:条件推断树----------------------
base.set_seed(1)
ct=party.ctree(formula=stats.as_formula(formula_str),
      data=df_r_use,
      control=party.ctree_control(
          mincriterion=0.90,
          testtype="Bonferroni",
          )
      )

pa_ct_pre=stats.predict(ct)
pa_ct_pre=np.array(pa_ct_pre)



#----------------------party:条件推断森林----------------------

base.set_seed(1)
ctf=party.cforest(formula=stats.as_formula(formula_str),
      data=df_r_use,
      control=party.cforest_control(
          mincriterion=0.90,
          mtry=len(v)**(0.5),
          testtype="Bonferroni",
          ntree=1000,
          fraction=0.5,
          replace=False
         )
      )

pa_cf_pre=stats.predict(ctf)
pa_cf_pre=np.array(pa_cf_pre)
varimp_cf=party.varimp(ctf)
df_varimp_cf=DataFrame({"var":x_name,"varimp":list(varimp_cf)})
df_varimp_cf.loc[:,"varimp_sd"]=df_varimp_cf["varimp"]/np.sum(df_varimp_cf["varimp"])
df_varimp_cf=df_varimp_cf.sort_values(by=["varimp"],ascending=False)


#整理最终数据表
df=df[init_var]
df.loc[:,"py_rt"]=py_rt_pre
df.loc[:,"py_rf"]=py_rf_pre
df.loc[:,"pa_ct"]=pa_ct_pre
df.loc[:,"pa_cf"]=pa_cf_pre


# sns.displot(data=df,x="py_rt",kde=True)
# sns.displot(data=df,x="py_rf",kde=True)
# sns.displot(data=df,x="pa_ct",kde=True)
# sns.displot(data=df,x="pa_cf",kde=True)

# income_pre=df[["income","py_rt","py_rf","pa_ct","pa_cf"]]

# f=lambda x:x.describe()


# income_pre.apply(f)
# income_pre.apply(np.quantile,q=(0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9))

df.to_csv(save_path,header=True)
df_varimp_cf.to_csv(varimp_path+"\\varimp_cf.csv",header=True)
df_varimp_rf.to_csv(varimp_path+"\\varimp_rf.csv",header=True)
  • 写回答

3条回答 默认 最新

  • 关注

    2301_81671120 下午好🌅🌅🌅
    本答案参考通义千问

    出现restart shell的错误可能是因为你的代码在某个地方遇到了问题,导致Python解释器需要重启以继续执行。在你提供的代码中,没有直接看到会导致这种问题的明显错误,但可以尝试以下步骤来排查问题:

    1. 检查数据格式和类型

      • 确保输入到模型的数据(xincome)是数值型,并且没有缺失值。
      • 检查pandas.get_dummies()函数处理虚拟变量时是否正确。
    2. 代码块的顺序

      • 有时候,如果一个库或函数的导入顺序有问题,可能会引发此错误。确保rpy2库的导入在使用之前完成。
    3. 异常处理

      • 添加适当的异常处理代码,以便在遇到错误时捕获并记录信息,而不是让程序崩溃。例如,在cross_val_predict函数调用后添加try/except块。
    4. 逐步调试

      • 使用print语句或debuggerimport pdb; pdb.set_trace())来查看代码执行过程中变量的值,查找可能的问题点。
    5. 代码优化

      • 如果数据量很大,考虑使用更高效的算法或减少数据量来训练模型。
    6. 环境问题

      • 确保你的Python环境没有冲突,比如不同的版本或库版本。

    由于你没有提供具体的错误信息,这些步骤可能需要一些试验才能找到问题所在。如果问题仍然存在,可能需要提供更详细的错误消息或者在问题发生的具体代码行上做标记。

    评论

报告相同问题?

问题事件

  • 修改了问题 2月29日
  • 创建了问题 2月29日

悬赏问题

  • ¥15 sessionStorage在vue中的用法
  • ¥15 wordpress更换域名后用户图片头像不显示
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework),并且基于qt实现打开一个web
  • ¥30 AD9854 为什么输出波形幅度受限,AI机器人勿扰
  • ¥15 如何在ubunto上安装CEF (Chromium Embedded Framework
  • ¥15 数据库原理及应用上机练习题
  • ¥15 如何联系真正的开发者而非公司
  • ¥15 有偿求苍穹外卖环境配置
  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)