有这么多的帖子这样有关如何提取sklearn决策树的规则,但我找不到任何有关使用熊猫。
以这个数据和模型为例,如下
# Create Decision Tree classifer object
clf = DecisionTreeClassifier(criterion="entropy", max_depth=3)
# Train Decision Tree Classifer
clf = clf.fit(X_train,y_train)
Run Code Online (Sandbox Code Playgroud)
结果:
预期:
关于此示例,有8条规则。
从左到右,请注意该数据帧是 df
r1 = (df['glucose']<=127.5) & (df['bmi']<=26.45) & (df['bmi']<=9.1)
……
r8 = (df['glucose']>127.5) & (df['bmi']>28.15) & (df['glucose']>158.5)
Run Code Online (Sandbox Code Playgroud)
我不是提取sklearn决策树规则的大师。获取大熊猫布尔条件将有助于我为每个规则计算样本和其他指标。因此,我想将每个规则提取到熊猫的布尔条件。
使用H2O Python模块AutoML之后,发现XGBoost位于页首横幅的顶部。然后,我想做的是从H2O XGBoost中提取超参数,并将其复制到XGBoost Sklearn API中。但是,这两种方法之间的性能有所不同:
from sklearn import datasets
from sklearn.model_selection import train_test_split, cross_val_predict
from sklearn.metrics import classification_report
import xgboost as xgb
import scikitplot as skplt
import h2o
from h2o.automl import H2OAutoML
import numpy as np
import pandas as pd
h2o.init()
iris = datasets.load_iris()
X = iris.data
y = iris.target
data = pd.DataFrame(np.concatenate([X, y[:,None]], axis=1))
data.columns = iris.feature_names + ['target']
data = data.sample(frac=1)
# data.shape
train_df = data[:120]
test_df = data[120:]
# Import a sample binary outcome train/test …Run Code Online (Sandbox Code Playgroud) 我有一本字典,其中包含多个熊猫掩码作为特定数据帧的字符串,但我找不到使用这些掩码的方法。
这是一个简短的可重现示例:
df = pd.DataFrame({'age' : [10, 24, 35, 67], 'strength' : [0 , 3, 9, 4]})
masks = {'old_strong' : "(df['age'] >18) & (df['strength'] >5)",
'young_weak' : "(df['age'] <18) & (df['strength'] <5)"}
Run Code Online (Sandbox Code Playgroud)
我想做这样的事情:
df[masks['young_weak']]
Run Code Online (Sandbox Code Playgroud)
但由于掩码是一个字符串,我收到错误
KeyError: "(df['age'] <18) & (df['strength] <5)"
Run Code Online (Sandbox Code Playgroud) 我在列表理解中使用一个函数和一个 if 函数:
new_list = [f(x) for x in old_list if f(x) !=0]
Run Code Online (Sandbox Code Playgroud)
令我烦恼的是,该表达式f(x)在每个循环中计算两次。
有没有办法以更清洁的方式做到这一点?类似于存储值或在列表理解的开头包含 if 语句。
我正在 Jupyter 笔记本中运行一个函数,我想知道如果用户中断内核是否可以执行一些代码。
例如,如果你有这个功能:
import time
def time_sleep():
time.sleep(5)
print('hello')
Run Code Online (Sandbox Code Playgroud)
print('cell terminated')如果单元格被中断,我可以添加运行吗?