• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python机器学习入门(六)之Python优化模型

    有时提升一个模型的准确度很困难。你会尝试所有曾学习过的策略和算法,但模型正确率并没有改善。这时你会觉得无助和困顿,这也正是90%的数据科学家开始放弃的时候。不过,这才是考验真正本领的时候!这也是普通的数据科学家和大师级数据科学家的差距所在。

    1.集成算法

    三个臭皮匠,顶个诸葛亮。群体的智慧是很强大的。那么,在机器学习中能否同样采用此策略呢?答案是肯定的,就是集成算法——将多个不同算法从集成起来,使结果更优。

    1.1袋装算法

    袋装算法是一种提高分类准确率的算法。通过给定组合投票的方式获得最优解。比如你生病了,去个医院看了个医生,每个医生都给你开了药方,最后哪个药方的出现次数多,就说明这个药方可能是最优解。

    1.1.1袋装决策树

    袋装算法在数据具有很大方差时非常有效,最常见的例子就是决策树的袋装算法。

    from pandas import read_csv
    from sklearn.model_selection import KFold
    from sklearn.model_selection import cross_val_score
    from sklearn.ensemble import BaggingClassifier
    from sklearn.tree import DecisionTreeClassifier
     
    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]
    num_folds = 10
    seed = 7
    kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed)
     
    #袋装决策树
    cart = DecisionTreeClassifier()
    num_tree = 100
    model = BaggingClassifier(base_estimator=cart,n_estimators=num_tree,random_state=seed)
    result = cross_val_score(model, X, Y, cv=kfold)
    print(result.mean())

    0.7578263841421736

    1.1.2随机森林

    随机森林是由很多决策树构成的,不同决策树之间没有关联。

    当我们进行分类任务时,新的输入样本进入,就让森林中的每一棵决策树分别进行判断和分类,每个决策树会得到一个自己的分类结果,决策树的分类结果中哪一个分类最多,那么随机森林就会把这个结果当做最终的结果。

    from sklearn.ensemble import RandomForestClassifier
     
    #随机森林
    num_tree = 100
    max_features = 3
    model = RandomForestClassifier(n_estimators=num_tree,random_state=seed,max_features=max_features)
    result = cross_val_score(model, X, Y, cv=kfold)
    print(result.mean())

    0.759107997265892

    1.1.3极端随机树

    极端随机数与随机森林十分相似,都是由许多决策树构成的,但它与随机森林由两个主要区别:

    from sklearn.ensemble import ExtraTreesClassifier
     
    #极端随机树
    num_tree = 100
    max_features = 3
    model = ExtraTreesClassifier(n_estimators=num_tree,random_state=seed,max_features=max_features)
    result = cross_val_score(model, X, Y, cv=kfold)
    print(result.mean())

    0.7630211893369789

    1.2提升算法

    提升算法也称为boosting算法,它是将弱学习算法提升为强学习算法的一类算法,可用来提升弱分类器的准确度。

    1.2.1AdaBoost

    AdaBoost是一种迭代算法,其核心思想是针对同一个训练集训练不同的分类器(弱分类器),然后把这些弱分类器集合起来,构成一个更强的最终分类器(强分类器)。

    from pandas import read_csv
    from sklearn.model_selection import KFold
    from sklearn.model_selection import cross_val_score
    from sklearn.ensemble import AdaBoostClassifier
     
    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]
    num_folds = 10
    seed = 7
    kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed)
     
    #AdaBost
    num_tree = 100
    model = AdaBoostClassifier(n_estimators=num_tree,random_state=seed)
    result = cross_val_score(model, X, Y, cv=kfold)
    print(result.mean())

    0.7578605604921395

    1.2.2随机梯度提升

    随机梯度提升法(GBM)的基本思想是:要找到某个函数的最大值,最好的办法就是沿着该函数的梯度方向探寻。梯度算子总是指向函数增长值最快的方向。

    from sklearn.ensemble import GradientBoostingClassifier
     
    #随机 梯度提升
    num_tree = 100
    model = GradientBoostingClassifier(n_estimators=num_tree,random_state=seed)
    result = cross_val_score(model, X, Y, cv=kfold)
    print(result.mean())

    0.7591934381408066

    1.3投票算法

    投票算法(Voting)是一个非常简单的多个机器学习算法的集成算法。投票算法是通过创建两个或多个算法模型,利用投票算法将这些算法包装起来,计算各个子模型的平均预测情况。

    from pandas import read_csv
    from sklearn.model_selection import KFold
    from sklearn.model_selection import cross_val_score
    from sklearn.ensemble import VotingClassifier
    from sklearn.tree import DecisionTreeClassifier
    from sklearn.svm import SVC
    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]
    num_folds = 10
    seed = 7
    kfold = KFold(n_splits=num_folds,shuffle=True,random_state=seed)
     
    #投票算法
    models=[]
    model_logistic = LogisticRegression(max_iter=3000)
    model_cart = DecisionTreeClassifier()
    model_svc = SVC()
    models.append(('logistic',model_logistic))
    models.append(('cart',model_cart))
    models.append(('svc',model_svc))
    ensemble_model = VotingClassifier(estimators=models)
    result = cross_val_score(ensemble_model, X, Y, cv=kfold)
    print(result.mean())

    0.7721804511278196

    2.算法调参

    机器学习的模型都是参数化的,可以通过调参来提高模型的准确度。模型参数的调整应该遵循偏差和方差协调的原则。

    调整算法参数是机器学习解决问题的最后一个步骤,有时也被成为超参数优化。学会调参是进行机器学习项目的前提。参数可分为两种:一种是影响模型在训练集上的准确度或防止过拟合能力的参数;另一种是不影响这两者的参数。模型在样本总体上的准确度由其在训练集上的准确度及其防止过拟合的能力共同决定,所以在调参时主要针对第一种参数进行调整,最终达到的效果是:模型在训练集上的准确度和防止过拟合能力的大和谐

    2.1网络搜索优化参数

    网格搜索优化参数是一种算法参数优化的方法。它是通过遍历已定义参数的列表,来评估算法的参数,从而找到最优参数。

    from pandas import read_csv
    from sklearn.linear_model import Ridge
    from sklearn.model_selection import GridSearchCV
     
    #导入数据
    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]
    #算法实例化
    model = Ridge()
    #设置要遍历的参数
    param_grid = {'alpha':[1,0.1,0.01,0.001,0]}
    #通过网格搜索查询最优参数
    grid = GridSearchCV(model, param_grid)
    grid.fit(X,Y)
    #搜索结果
    print('max_score:%.3f'% grid.best_score_)
    print('best_para:%.3f'% grid.best_estimator_.alpha)

    max_score:0.276
    best_para:1.000

    2.2随机搜索优化参数

    随机搜索优化参数是另一种对算法参数优化的方法。随机搜索优化参数通过固定次数的迭代,采用随机采样分布的方式搜索合适的参数。

    from sklearn.model_selection import RandomizedSearchCV
    from scipy.stats import uniform
     
    #随即搜索优化参数
    grid = RandomizedSearchCV(model, param_grid,100,random_state=7)
    grid.fit(X,Y)
    #搜索结果
    print('max_score:%.3f'% grid.best_score_)
    print('best_para:%.3f'% grid.best_estimator_.alpha)

    max_score:0.276
    best_para:1.000

    总结

    本文主要讲解了如何优化模型,包括集成算法和算法调参,这些都是在实际项目中非常有用的。

    到此这篇关于Python机器学习入门(六)优化模型的文章就介绍到这了,更多相关Python机器学习内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • Python机器学习入门(一)序章
    • Python机器学习入门(二)之Python数据理解
    • Python机器学习入门(三)之Python数据准备
    • Python机器学习入门(四)之Python选择模型
    • Python机器学习入门(五)之Python算法审查
    • python机器学习高数篇之函数极限与导数
    上一篇:Python机器学习入门(五)之Python算法审查
    下一篇:Python制作脚本帮女朋友抢购清空购物车
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python机器学习入门(六)之Python优化模型 Python,机器,学习,入门,六,