【问题标题】:Sklearn validation_curve : Which possibilities do I have for the "param_name" parameterSklearn validation_curve:我对“param_name”参数有哪些可能性
【发布时间】:2017-12-06 12:44:56
【问题描述】:

如果我计算 validation curve 如下:

PolynomialRegression(degree=2,**kwargs):
    return make_pipeline(PolynomialFeatures(degree),LinearRegression(**kwargs))

#...

degree=np.arange(0,21)

train_score,val_score=validation_curve(PolynomialRegression(),X,y,"polynomialfeatures__degree",degree,cv=7)

函数声明参数“param_name”,这是将被评估的参数的名称(“param_range”)在这种情况下,它是多项式特征__度。 但是:

  1. 我一般从哪里得到“param_name”的字符串,特别是从哪里得到字符串“polynomialfeatures__degree”,因为我在任何文档中都找不到这个param_name...“function__param name”是一个指向函数的 param_name 的常用方法??
  2. 我可以对哪些估算器使用 validation_curve 函数?

【问题讨论】:

  • 我试图回答这些问题,但不确定我得到了你想要做什么。你的目标是什么?

标签: python-3.x scipy scikit-learn


【解决方案1】:

第 1 部分

回答你的问题 #1:

作为param_name,您可以使用您选择的估计器的可用参数之一。

例如:假设您选择了估算器:LinearRegression。从这个link 你可以看到可用的参数/参数是fit_intercept=True, normalize=False, copy_X=True, n_jobs=1。所以现在您知道具体估算器的可用参数是什么了。

现在,从this link 我们可以看到如何定义param_nameparam_range

此链接中的部分示例:

param_range = np.logspace(-6, -1, 5)

train_scores, test_scores = validation_curve(
SVC(), X, y, param_name="gamma", param_range=param_range,
cv=10, scoring="accuracy", n_jobs=1)

编辑 1

对于你所说的“字符串”:如果我理解正确,你想做这样的事情:

from sklearn.preprocessing import PolynomialFeatures

a= PolynomialFeatures(degree=2)
a.get_params()

结果:

{'include_bias': True, 'interaction_only': False, 'degree': 2}

这些是多项式特征可用的param_names

编辑 2:

查看param_names 的另一种方法是转到源代码。

例如,在这里link,您可以在第 1149-1160 行看到 PolynomialFeatures 估计器的参数字符串。

最后,在这里link,您可以在第 421-444 行看到 LinearRegression 估计器的参数字符串。

编辑 3:

在 sklearn 中获取设置估计器参数的其他方式。

from sklearn.linear_model import LinearRegression

lr = LinearRegression()
lr.get_params(deep=True)

结果:

{'copy_X': True, 'normalize': False, 'n_jobs': 1, 'fit_intercept': True}

现在您知道了创建参数的参数:

params = {  'copy_X': False,  'fit_intercept': True,  'normalize': True }

然后你可以在估算器中解压它们:

lr_new = LinearRegression(**params)
lr_new

结果:

LinearRegression(copy_X=True, fit_intercept=False, n_jobs=1, normalize=True)

第 2 部分:

回答您的问题 #2:

我认为对于sklearn 模块,您可以将validation_curve 用于所有估算器。

希望对你有帮助

【讨论】:

  • 谢谢,这对我帮助很大,但 param_name 参数仍有一些不确定性。我已经编辑了我的问题
  • @2Obe 你说的“字符串”是什么意思?我编辑了我的答案,添加了一个新的小例子。这是你需要的吗?
  • @ser...几乎。现在我明白了从哪里可以获得一般的 param_names。但我找不到“多项式特征__度”。这是否应该是“”查看 param_name“度”的多项式特征函数的另一种表示法?如果是这样,“函数中的某个函数__参数名称”符号是否始终是从其他函数调用“参数名称”的符号?
  • 我明白你的意思。一般来说,sklearn 网站上有一些示例和教程,您可以在其中看到这些符号(例如 link 1 link 2 )我会检查是否有其他方法并让您知道
  • @2Obe 是的,我同意。从这里link 您可以再次看到 k_neighbors 参数,但看不到 smote__k_neighbors。我今天会检查是否有其他方法。但是,也可以使用 Params ={'k_neighbots'=10} 而不是必需的 Params = {'smote__k_neigbors'=10} 应该可以工作。
猜你喜欢
  • 1970-01-01
  • 2021-08-28
  • 1970-01-01
  • 2012-07-02
  • 2014-12-07
  • 1970-01-01
  • 2021-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多