机器学习理论基础

算法模型性能评估的指标和评估方法

1.过拟合和欠拟合

过拟合:很好地拟合训练样本,但对新数据预测准确定不好(高方差);

欠拟合:对训练样本和新数据都不能很好地拟合(高偏差)

2.成本函数

成本:衡量模型和训练样本符合程度的指标,拟合出来的值和真实值之间的误差平均值。

成本函数J(θ):成本和模型参数的函数关系。

针对一个数据集,可有多个模型来拟合数据;针对某个模型,又需从无穷多个参数中找出一个最优参数,使得J(θ)最小。

3.模型准确性

计算测试数据集的成本

scitik使用score来表达模型的性能,其与成本成反比。

把数据分为三份:训练数据集,交叉验证数据集和测试数据集,推荐比例6:2:2。

使用训练集和交叉验证集测试数据,求出每个模型的最好参数;测试数据集,选出最好的模型。

4.学习曲线

学习曲线:把Jtrain(θ)和Jcv(θ)作为纵坐标,画出与训练数据集m的大小关系。

作用:观察模型的准确定与训练集大小的关系。

画学习曲线的步骤

1)把数据集分成训练数据集和交叉验证数据集

2)把训练集的20%作为训练样本,训练出模型参数

3)使用交叉验证数据集来计算训练出来模型的准确性

4)以训练数据集的准确性,交叉验证的准确性作为纵坐标,训练数据集个数作为横坐标,在坐标轴上画出上述步骤计算出来的模型准确性。

5)训练样本集增加10%,调到第3步,直到训练数据集大小为100%为止

(1)实例:画出学习曲线

1)构建多项式模型

pipeline

def polynomial_model(degree=1):
    polynomial_features=PolynomialFeatures(degree=degree,include_bias=False)
    linear_regression=LinearRegression()
    pipeline=Pipeline([('polynomial_features',polynomial_features),
                      ('linear_regresiion',linear_regression)])
    return pipeline

 

learning_curve

from sklearn.model_selection import learning_curve,ShuffleSplit

def plot_learning_curve(estimator,title,X,y,ylim=None,cv=None,n_jobs=1,train_sizes=np.linspace(.1,1.0,5)):
    plt.title(title)
    if ylim is not None:
        plt.ylim(*ylim)
    plt.xlabel('Training examples')
    plt.ylabel('Score')
    train_sizes,train_scores,test_scores=learning_curve(estimator,X,y,cv=cv,n_jobs=n_jobs,train_sizes=train_sizes)
    train_scores_mean=np.mean(train_scores,axis=1)
    train_scores_std=np.std(train_scores,axis=1)
    test_scores_mean=np.mean(test_scores,axis=1)
    test_scores_std=np.std(test_scores,axis=1)
    plt.grid()
    
    plt.fill_between(train_sizes,train_scores_mean-train_scores_std,train_scores_mean+train_scores_std,alpha=0.1,color='r')
    plt.fill_between(train_sizes,test_scores_mean-test_scores_std,test_scores_mean+test_scores_std,alpha=0.1,color='g')
    plt.plot(train_sizes,train_scores_mean,'o-',color='r',label='Training score')
    plt.plot(train_sizes,test_scores_mean,'o-',color='g',label='Cross-validation score')
    
    plt.legend(loc='best')
    return plt

2)画学习曲线

cv=ShuffleSplit(n_splits=10,test_size=0.2,random_state=0)
titles=['Learning Curves (Under Fitting)','Learning Curves','Learning Curves (Over Fitting)']
degrees=[1,3,10]

plt.figure(figsize=(18,4),dpi=200)
for i in range(len(degrees)):
    plt.subplot(1,3,i+1)
    plot_learning_curve(polynomial_model(degrees[i]),titles[i],X,y,ylim=(0.75,1.01),cv=cv)
    plt.show()
   

欠拟合,仅增加训练样本,对算法准确性提高较小。

(2)过拟合和欠拟合的特征

过拟合:成本Jtrain(θ)较低,成本Jcv(θ)较高

欠拟合:成本Jtrain(θ)和Jcv(θ)都较高。

5.算法模型性能优化

先判断算法模型是欠拟合还是过拟合。

(1)过拟合

1).获取更多的训练数据;

2).减少输入的特征数量

(2)欠拟合

1).增加有价值的特征

2).增加多项式特征

6.查准率和召回率

处理先验概率低的问题,总是把概率较低的事件定义为1,把y=1作为Positive的预测结果。

查准率=TruePosition/(TruePositon+FalsePosition)  sklearn.metrics.prtcision_score()

召回率=TruePosition/(TruePosition+FalseNegative) sklearn.metrics.recall_score()

7.F1 Score

F1Score=2*P*R/(P+R)  sklearn.metrics.f1_score()

 

参考文献:《scikit-learn机器学习》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值