当我们得到一个机器学习模型,我们需要确定几个指标用来评估模型的预测能力。对于回归分析,主要有mse和R 2 。对于分类算法,评价指标主要有AUC,accuracy,precision等。本文主要介绍相关术语。
回归是对连续的实数值进行预测,即输出值是连续的实数值,常用判决系数(coefficient of determination )来评估模型对数据的拟合程度.
对于 m 个样本 (x1,y1),(x2,y2),⋅⋅⋅(xm,ym)
模型估计值为 (x1,y1^),(x2,y2^)⋅⋅⋅(xm,y^m)
样本总平方和 TSS (Total Sum of Squares):
由公式可知 mse 大于0,越小拟合效果越好,当 mse=0 拟合效果最好。
定义 R2 为
由公式可知, R2 越大表示预测效果越好, R2=1 是其最大值。当预测值为样本期望, R2 为0。 R2 可能为负。sklearn中的线性模型的score返回的是模型的 R2
from sklearn.metrics import mean_squared_error
from sklearn.preprocessing import PolynomialFeatures, StandardScaler
from sklearn.pipeline import Pipeline
from sklearn.linear_model import ElasticNetCV
model = Pipeline([
('ss', StandardScaler()),
('poly', PolynomialFeatures(degree=3, include_bias=True)),
('linear', ElasticNetCV(l1_ratio=[0.1, 0.3, 0.5, 0.7, 0.99, 1],
alphas=np.logspace(-3, 2, 5),
fit_intercept=False, max_iter=1e3, cv=3))
])
model.fit(x_train, y_train.ravel())
linear = model.get_params('linear')['linear']
y_pred = model.predict(x_test)
r2 = model.score(x_test, y_test)
mse = mean_squared_error(y_test, y_pred)
print 'R2:', r2
print u'均方误差:', mse
准确率(Accuracy)是指在分类中,测试集中分类正确的样本个数占总个数的比例:
为了应对每个类别下样本的个数不一样的情况,对准确率进行优化,计算每个类别下的准确率,然后再计算它们的平均值,当每个类别下的样本个数一样,则平均准确率与准确率相等。 但平均准确率在数据分布不平衡时的准确率可靠性依旧不强。
当考虑到数据分布可能不平衡 ① 的情况,其实更多的会使用混淆矩阵(Confusion Matrix)去计算精确率(Precision)&召回率(Recall),然后在通过Precision&Recall去计算F值(F-score).
混淆矩阵是对分类的结果进行详细描述的一个表,无论是分类正确还是错误,并且对不同的类别进行了区分,如下表:
准确率(P值)是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。
召回率(R值)是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。
综合考虑P值与R值,最常见的方法就是F值,通过计算F值来评价一个指标!
AUC的全称是Area under the Curve,即曲线下的面积,这条曲线便是ROC曲线,全称为the Receiver Operating Characteristic曲线。
ROC曲线描述分类器的TPR(True Positive Rate,分类器分类正确的正样本个数占总正样本个数的比例,即R值)与FPR(False Positive Rate,分类器分类错误的负样本个数占总负样本个数的比例)之间的变化关系。
①:改变评判方式是处理不均衡数据时一种办法,当遇到不均衡数据时,还可以尝试以下方法:
1、获取更多数据
2、重组数据,第一种重组方式是复制少数数据里的样本,使其可以达到和多数数据样本差不多的数量,但这种方式增加数据容易改变原有分布,降低模型泛化能力,所以处理时需要考虑数据分布。第二种方式就是对多数样本的数据进行开刀,砍掉一些多数样本的数据,还是使两者的数量差不多。
3、修改算法,调整阈值,或尝试其他机器学习方法,像决策树这样的方法就不会受到不均衡数据的影响。