GridSearchCV 结果热图
GridSearchCV results heatmap
我正在尝试为 sklearn 的 GridSearchCV 结果生成热图。我喜欢 sklearn-evaluation 的一点是生成热图真的很容易。但是,我遇到了一个问题。当我将参数指定为 None 时,例如
max_depth = [3, 4, 5, 6, None]
生成热图时,显示错误信息:
TypeError: '<' not supported between instances of 'NoneType' and 'int'
有什么解决方法吗?
我找到了其他生成热图的方法,比如使用 matplotlib 和 seaborn,但是没有什么比 sklearn-evalutaion 更能提供漂亮的热图了。
我摆弄了 grid_search.py
文件 /lib/python3.8/site-packages/sklearn_evaluation/plot/grid_search.py
。在第 192/193 行更改行
来自
row_names = sorted(set([t[0] for t in matrix_elements.keys()]),
key=itemgetter(1))
col_names = sorted(set([t[1] for t in matrix_elements.keys()]),
key=itemgetter(1))
收件人:
row_names = sorted(set([t[0] for t in matrix_elements.keys()]),
key=lambda x: (x[1] is None, x[1]))
col_names = sorted(set([t[1] for t in matrix_elements.keys()]),
key=lambda x: (x[1] is None, x[1]))
将所有 None
移动到列表的末尾,同时根据之前的 answer 进行排序
来自安德鲁·克拉克。
使用这个调整,我的演示脚本如下所示:
import numpy as np
import sklearn.datasets as datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn_evaluation import plot
data = datasets.make_classification(n_samples=200, n_features=10, n_informative=4, class_sep=0.5)
X = data[0]
y = data[1]
hyperparameters = {
"max_depth": [1, 2, 3, None],
"criterion": ["gini", "entropy"],
"max_features": ["sqrt", "log2"],
}
est = RandomForestClassifier(n_estimators=5)
clf = GridSearchCV(est, hyperparameters, cv=3)
clf.fit(X, y)
plot.grid_search(clf.cv_results_, change=("max_depth", "criterion"), subset={"max_features": "sqrt"})
import matplotlib.pyplot as plt
plt.show()
输出如下图:
我正在尝试为 sklearn 的 GridSearchCV 结果生成热图。我喜欢 sklearn-evaluation 的一点是生成热图真的很容易。但是,我遇到了一个问题。当我将参数指定为 None 时,例如
max_depth = [3, 4, 5, 6, None]
生成热图时,显示错误信息:
TypeError: '<' not supported between instances of 'NoneType' and 'int'
有什么解决方法吗? 我找到了其他生成热图的方法,比如使用 matplotlib 和 seaborn,但是没有什么比 sklearn-evalutaion 更能提供漂亮的热图了。
我摆弄了 grid_search.py
文件 /lib/python3.8/site-packages/sklearn_evaluation/plot/grid_search.py
。在第 192/193 行更改行
来自
row_names = sorted(set([t[0] for t in matrix_elements.keys()]),
key=itemgetter(1))
col_names = sorted(set([t[1] for t in matrix_elements.keys()]),
key=itemgetter(1))
收件人:
row_names = sorted(set([t[0] for t in matrix_elements.keys()]),
key=lambda x: (x[1] is None, x[1]))
col_names = sorted(set([t[1] for t in matrix_elements.keys()]),
key=lambda x: (x[1] is None, x[1]))
将所有 None
移动到列表的末尾,同时根据之前的 answer 进行排序
来自安德鲁·克拉克。
使用这个调整,我的演示脚本如下所示:
import numpy as np
import sklearn.datasets as datasets
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import GridSearchCV
from sklearn_evaluation import plot
data = datasets.make_classification(n_samples=200, n_features=10, n_informative=4, class_sep=0.5)
X = data[0]
y = data[1]
hyperparameters = {
"max_depth": [1, 2, 3, None],
"criterion": ["gini", "entropy"],
"max_features": ["sqrt", "log2"],
}
est = RandomForestClassifier(n_estimators=5)
clf = GridSearchCV(est, hyperparameters, cv=3)
clf.fit(X, y)
plot.grid_search(clf.cv_results_, change=("max_depth", "criterion"), subset={"max_features": "sqrt"})
import matplotlib.pyplot as plt
plt.show()
输出如下图: