前一篇介绍了几种常见的机器学习模型,对在许多问题中都可能会有多种模型能够胜任,并且同一个模型调整不同的参数也会对性能有非常大的影响,所以为了选出更加合适的模型以及参数,我们需要量化的分析模型的性能,本篇简单介绍一些常见的性能评价方法。
分类结果矩阵
1.准确率:
E=,即所有样本中分类正确的比例。
2.查准率(precision):
,即预测为正例的样本中实际为正例的比例。
3.查全率(recall):
,即实际为正例的样本中被预测为正例的比例。
4.度量:
,即可以根据的值来综合评估查准率和查全率,为1时具有相同影响,<1时查准率有较大影响,>1时查全率有较大影响。
这几个是比较基本的性能度量,此外还有ROC曲线,代价曲线等,就不一一介绍了,有了性能度量之后,在训练模型的时候就可以通过将训练数据分为实际训练数据集和交叉验证数据集之后先训练,然后通过调整模型和参数来在验证数据集上获得相对较好的性能。
下面是常用的方法:
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
y_pred=Some_Model.predict(X_test)
accuracy=accuracy_score(y_pred,y_test)
precision=precision_score(y_pred,y_test)
recall=recall_score(y_pred,y_test)
f1=f1_score(y_pred,y_test)
另外针对每个模型,都有一些参数会显著的影响性能,我们需要找到合适的参数,下面这篇文章介绍了各算法的参数。
Scikit-Learn各算法详细参数速查手册(中文)2018-09-11 - 简书
下面是一个决策树模型寻找参数的示例:
from sklearn.metrics import make_scorer
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import GridSearchCV
clf = DecisionTreeClassifier(random_state=42)
parameters = {'max_depth':[2,4,6,8,10],'min_samples_leaf':[2,4,6,8,10], 'min_samples_split':[2,4,6,8,10]}
scorer = make_scorer(f1_score)
grid_obj = GridSearchCV(clf, parameters, scoring=scorer)
grid_fit = grid_obj.fit(X_train, y_train)
best_clf = grid_fit.best_estimator_
best_clf.fit(X_train, y_train)
best_train_predictions = best_clf.predict(X_train)
best_test_predictions = best_clf.predict(X_test)
网友评论