sklearn的score函数有哪些参数?

29

我最近查看了一堆sklearn教程,它们都有一个共同点:通过以下方法来评估拟合效果:

clf.fit(X_train, y_train)
clf.score(X_test, y_test)

它将会输出:

0.92345...

或其他得分。

我对clf.score函数的参数或它如何评估模型的方式很感兴趣。我在互联网上搜索了很多,但好像找不到相关文档。有人知道吗?


我认为这取决于模型。 - Korem
那么评分函数从SVM、线性模型和其他分类器和回归器中改变了吗?这似乎很头疼! - tooty44
6个回答

31

它需要一个特征矩阵X_test和期望的目标值y_test。对于X_test的预测将与y_test进行比较,并返回准确度(分类器)或R²得分(回归估计器)。

这在score方法的文档字符串中非常明确地说明了。分类器的文档字符串如下所示:

Returns the mean accuracy on the given test data and labels.

Parameters
----------
X : array-like, shape = (n_samples, n_features)
    Test samples.

y : array-like, shape = (n_samples,)
    True labels for X.

sample_weight : array-like, shape = [n_samples], optional
    Sample weights.

Returns
-------
score : float
    Mean accuracy of self.predict(X) wrt. y.

回归分析的公式也类似。


它从哪里获取y_test和x_test? - AturSams
@zehelvion 你需要准备X_test和y_test,有几种方法可以做到这一点。如果你正在使用scikit-learn,那么sklearn.model_selection中的train_test_split函数就是你要找的函数。 - Steven Chen
一个典型的分数度量标准是(真实值,预测值),真实值与预测值进行比较,那么为什么我们实际上说clf.score(X_test,y_test),这本质上是拟合模型的语法。你能帮我解释一下发生在引擎盖下的事情,或者至少指引我方向吗? - Ananthu

5
这是Regressor得分计算的方式:
score(self, X, y, sample_weight=None)[source] 返回预测的决定系数 R^2。
决定系数 R^2 定义为 (1 - u/v),其中 u 是残差平方和 ((ytrue - ypred) ** 2).sum(),v 是总平方和 ((ytrue - ytrue.mean()) ** 2).sum()。最佳得分是 1.0,可能为负(因为模型可能任意恶劣)。一个忽略输入特征,总是预测 y 的期望值的常量模型将获得 R^2 得分为 0.0。
来自 sklearn 文档。

https://scikit-learn.org/stable/modules/generated/sklearn.dummy.DummyRegressor.html#sklearn.dummy.DummyRegressor.score


2
这是分类器相关的。每个分类器都提供自己的评分函数。

估计器评分方法:估计器具有得分方法,为其设计解决的问题提供默认评估标准。这在本页中没有讨论,但在每个估计器的文档中有说明。

除了在答案中给出的文档之外,您唯一可以做的额外事情就是阅读您的估计器提供的参数类型。例如,SVM分类器SVC具有以下参数score(X,y,sample_weight = None)

2
我不确定我是否正确理解了你的问题。显然,为了计算一些错误或相似性,大多数评分函数都会接收一个参考值数组(y_true)和一个由您的模型预测的值数组(y_score)作为主要参数,但也可能接收某些其他特定于度量标准的参数。评分函数通常不需要 X 值。
我建议查看评分函数的源代码以了解它们的工作原理。
这是scikit-learn中的一些评分函数列表。

0

语法: sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)

在多标签分类中,此函数计算子集准确性:对于一个样本,预测的标签集必须与y_true中相应的标签集完全匹配。

参数: y_true : 1d 数组或标签指示器数组/稀疏矩阵 正确的标签(即地面真实值)。

y_pred: 1d 数组或标签指示器数组/稀疏矩阵 分类器返回的预测标签。

normalize : bool, 可选 (默认为True) 如果为False,则返回正确分类的样本数。否则,返回正确分类的样本比例。

sample_weight : 形状为[n_samples]的数组,可选 样本权重。

返回值:
score : 浮点数 如果normalize == True,则返回正确分类的样本比例(float),否则返回正确分类的样本数(int)。

当normalize == True时,最佳表现为1,而当normalize == False时,最佳表现为样本数。

更多信息请参考: [https://scikit-learn.org/stable/modules/model_evaluation.html#accuracy-score][1]


0
Scikit-learn的model.score(X,y)计算是基于决定系数,即R^2的。该函数使用model.score=(X_test,y_test),并在计算中内部计算y_predicted,而不需要外部提供y_predicted值来为您计算分数。

具体做法如下:

u = ((y_test - y_predicted) ** 2).sum()

v = ((y_test - y_test.mean()) ** 2).sum()

score = 1 - (u/v)

这样你就能得到分数了!希望对你有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接