sklearn.metrics中包含了许多模型评估指标,例如决定系数R2、准确度等,下面对常用的分类模型与回归模型的评估指标做一个区分归纳,
分类准确率分数是指所有分类正确的百分比。分类准确率这一衡量分类器的标准比较容易理解,但是它不能告诉你响应值的潜在分布,并且它也不能告诉你分类器犯错的类型。
对应函数:
sklearn.metrics.accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)
另外,模型基本都有model.score()方法,也可以查看准确率。
代码实例:
from sklearn.tree import DecisionTreeClassifier from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.datasets import load_iris iris = load_iris() # 读取iris数据 x_trian, x_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, random_state=0) # 将数据分为训练集与测试集 tree_model = DecisionTreeClassifier('gini', 'best') # 构建决策树 tree_model.fit(X=x_trian, y=y_train) # 传入训练数据 y_pridct = tree_model.predict(x_test) # 对测试数据进行预测 print(accuracy_score(y_test, y_pridct)) # 计算准确度 print(tree_model.score(y_test, y_pridct)) # 计算准确度
''' 结果: 0.9777777777777777 '''
分类评估指标报告中包含了 precision recall f1-score support 四个指标,基本包括了分类需要看到的指标。
对应函数:
sklearn.metrics.classification_report(y_true, y_pred, labels=None, target_names=None, sample_weight=None, digits=2, output_dict=False)
代码示例
from sklearn.metrics import classification_report y_true=['a','b','c','a','b'] y_pre=['b','b','c','a','b'] target_names=['class_a','class_b','class_c'] print(classification_report(y_true,y_pre,target_names=target_names)) ''' 结果: precision recall f1-score support class_a 1.00 0.50 0.67 2 class_b 0.67 1.00 0.80 2 class_c 1.00 1.00 1.00 1 accuracy 0.80 5 macro avg 0.89 0.83 0.82 5 weighted avg 0.87 0.80 0.79 5 '''
结果说明:
将预测结果和真实结果用混淆矩阵展示,可以用于二分类与多分类。
对应函数:
sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)
代码示例:
from sklearn.metrics import precision_score,recall_score,f1_score y_true=['a','b','c','a','b'] y_pre=['b','b','c','a','b'] target_names=['class_a','class_b','class_c'] print(precision_score(y_true,y_pre)) print(recall_score(y_true,y_pre)) print(f1_score(y_true,y_pre)) ''' 结果: [[1 1 0] [0 2 0] [0 0 1]] '''
这三个指标通常用在分类中,sklearn中的函数可以用于二分类与多分类,只要调整参数average就能达到。
对应函数:
precision_score、recall_score、f1_score,这三个有共同的参数,这里以precision为例:
sklearn.metrics.precision_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)
代码示例:
from sklearn.metrics import precision_score,recall_score,f1_score y_true=['a','b','c','a','b'] y_pre=['b','b','c','a','b'] target_names=['class_a','class_b','class_c'] print(precision_score(y_true,y_pre,average='micro')) print(recall_score(y_true,y_pre,average='micro')) print(f1_score(y_true,y_pre,average='micro')) ''' 结果: 0.8 0.8 0.8000000000000002 '''
常用与逻辑回归等二分类,ROC与KS的说明在下一篇的逻辑回归、ROC曲线与KS曲线中有讲解。
当R2的值约接近1说明效果约好,R2=1-残差平方和/总平方和=回归平方和/总平方和。
对应函数:
sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput=’uniform_average’)
代码示例:
from sklearn.metrics import r2_score from sklearn.linear_model import LinearRegression import numpy as np x=np.random.normal(0,1,[1000,1]) y=2*x**2+3 model=LinearRegression() model.fit(x,y) y_pre=model.predict(x) print(r2_score(y,y_pre)) ''' 结果: 3.805452379912477e-05 '''
explained_variance_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
mean_absolute_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
mean_squared_error(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
median_absolute_error(y_true, y_pred)
分类: sklearn与机器学习