机器学习Python(二)

三、选择模型

1.评估算法

    要知道算法模型对未知的数据表现如何,最好的评估办法是,利用已经明确知道结果的数据运行生成的算法模型进行验证。必须使用与训练数据集完全不同的评估数据集来评价算法。

  • 分离训练数据集和评估数据集:将评估数据集和训练数据集完全分开,用训练数据集训练算法生成模型,采用评估数据集来评估算法模型。通常会将67%的数据作为训练集,将33%的数据作为评估数据集。(由于执行效率比较高,所以通常会用于算法的执行效率比较低或者有大量数据的时候)
    #分离训练数据集和评估数据集,评估逻辑回归模型
    from pandas import read_csv
    from sklearn.model_selection import train_test_split
    from sklearn.linear_model import LogisticRegression
    # 导入数据
    filename = 'pima_data.csv'
    names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']
    data = read_csv(filename, names=names)
    #将数据分为输入数据和输出结果
    array = data.values
    X = array[:,0:8]
    Y = array[:,8]
    test_size = 0.33
    seed = 4#数据随机的粒度
    X_train,X_test,Y_traing,Y_test = train_test_split(X,Y,test_size=test_size,random_state=seed)
    model = LogisticRegression()
    model.fit(X_train,Y_traing)
    result = model.score(X_test,Y_test)
    print("算法评估结果:%.3f%%" % (result *100))

     

  • K折交叉验证分离:将原始数据分为K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1个子集作为训练集,得到K个模型,再用这个K个模型最终的验证集的分类准确率的平均数,作为K折交叉验证下分类器的性能指标。K一般取值为3、5、10。(评估机器学习算法的黄金准则)
  • #K折交叉验证分离
    from sklearn.model_selection import KFold
    from sklearn.model_selection import cross_val_score
    from sklearn.linear_model import LogisticRegression
    num_folds = 10#k一般取3,5,10
    seed = 7
    kfold = KFold(n_splits=num_folds,random_state=seed)
    model = LogisticRegression()
    result = cross_val_score(model,X,Y,cv=kfold)
    print("算法评估结果:%.3f%% (%.3f%%)" % (result.mean() * 100,result.std() * 100))
    

     

  • 弃一交叉验证分离:每个样本单独作为验证集,其余的N-1个样本作为训练集(一共有N个样本),得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为性能指标。
  • #弃一交叉验证分离,原始数据有N个,弃一就是N-1个交叉验证
    from sklearn.model_selection import LeaveOneOut
    loocv = LeaveOneOut()
    model = LogisticRegression()
    result = cross_val_score(model,X,Y,cv=loocv)
    print("算法评估结果:%.3f%% (%.3f%%)" % (result.mean() * 100,result.std() * 100))
    

     

  • 重复随机评估、训练数据集分离:随机分离数据为训练数据集和评估数据集,重复这个过程多次,就如同交叉验证分离。(通常用于平衡评估算法、模型训练的速度及数据集的大小)
  • 重复随机分离评估数据集与训练数据集
    from sklearn.model_selection import ShuffleSplit
    n_splits = 10
    test_size = 0.33
    seed = 7
    kfold = ShuffleSplit(n_splits,test_size=test_size,random_state=seed)
    model = LogisticRegression()
    result = cross_val_score(model,X,Y,cv=kfold)
    print("算法评估结果:%.3f%% (%.3f%%)" % (result.mean() * 100,result.std() * 100))
    

     

2.算法评估矩阵

      分类算法矩阵以逻辑回归为例,回归算法矩阵以线性回归为例,使用10折交叉验证来分离数据。使用scikit-learn的modei_selection中的cross_val_score方法来评估算法,分类和回归算法都适用。

  • 分类算法矩阵

         1)分类准确度:算法自动分类正确的样本数除以所有的样本数。通常准确度越高分类效果越好(不是所有的情况都是准确度越高越好)

from pandas import read_csv
from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score
from sklearn.linear_model import LogisticRegression
# 导入数据
filename = 'pima_data.csv'
names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', &
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值