我最近看了一堆sklearn教程,它们都是相似的,它们对拟合优度的评分是:
clf.fit(X_train, y_train)
clf.score(X_test, y_test)
它会吐出:
0.92345...
或其他分数
我对clf的参数很好奇。分数函数,或者它如何给模型打分。我在网上找遍了,但似乎找不到相关的文档。有人知道吗?
取一个特征矩阵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.
以下是回归因子的得分计算方法:
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
我不确定我是否正确理解了你的问题。显然,为了计算一些误差或相似度,大多数评分函数接收一个参考值数组(y_true
)和一个由模型预测的值数组(y_score
)作为主要参数,但也可能接收一些特定于度量的其他参数。评分函数通常不需要X值。
我建议查看一下评分函数的源代码,以了解它们是如何工作的。
下面是scikit-learn中的评分函数列表
这取决于分类器。每个分类器提供它自己的评分函数。
估计器评分方法:估计器有一个评分方法,提供一个它们所设计的问题的默认评估标准解决。这不在本页讨论,但在每个估计器中都有讨论文档。
除了在其中一个答案中提供给您的文档之外,您可以做的唯一额外的事情是阅读估算器提供的参数类型。例如SVM分类器SVC有如下参数score(X, y, sample_weight=None)
语法: sklearn.metrics。accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
在多标签分类中,该函数计算子集精度:预测样本的标签集必须与y_true中相应的标签集完全匹配。
参数: y_true: 1d类数组,或标签指示数组/稀疏矩阵真实(正确)标签
y_pred: 1d类数组,或标签指示数组/稀疏矩阵预测标签,由分类器返回。
normalize: bool,可选(default=True)如果为False,返回正确分类样本的数量。否则,返回正确分类样本的百分比。
sample_weight: arraylike of shape = [n_samples],可选样本权重。
的回报:
score: float如果normalize == True,则返回正确分类样本的百分比(float),否则返回正确分类样本的数量(int)。
当normalize == True时,最佳性能为1,当normalize == False时,最佳性能为1。
更多信息请参考:[https://scikit-learn.org/stable/modules/model_evaluation.html正确分数][1]
scikit -learn model.score(X,y)的计算是基于判定的系数,即R^2是一个取模型的简单函数。得分= (X_test y_test) 。它不需要在外部提供y_predict 值来为您计算分数,而是在内部计算y_predict 并在计算中使用它。
是这样做的:
u = ((y_test - y_predicted) * * 2) .sum ()
v = ((y_test y_test.mean ()) * * 2) .sum ()
score = 1 - (u/v)
你就得到了分数!