精华内容
下载资源
问答
  • sklearn参数优化方法

    2019-04-09 21:08:09
    学习器模型中一般有两个参数:一类参数可以从数据中学习估计得到,还有一类参数无法从数据中估计,只能靠人的经验进行指定,后一类参数就叫超参数 比如,支持向量机里的C,Kernel,gama,朴素贝叶斯里的alpha等,在...

    学习器模型中一般有两个参数:一类参数可以从数据中学习估计得到,还有一类参数无法从数据中估计,只能靠人的经验进行指定,后一类参数就叫超参数

    比如,支持向量机里的C,Kernel,gama,朴素贝叶斯里的alpha等,在学习其模型的设计中,我们要搜索超参数空间为学习器模型找到最合理的超参数,可以通过以下方法获得学习器模型的参数列表和当前取值:estimator.get_params()

    sklearn 提供了两种通用的参数优化方法:网络搜索和随机采样,

    • 网格搜索交叉验证(GridSearchCV):以穷举的方式遍历所有可能的参数组合
    • 随机采样交叉验证(RandomizedSearchCV):依据某种分布对参数空间采样,随机的得到一些候选参数组合方案

    sklearn.model_selection:GridSearchCV,RandomizedSearchCV,ParameterGrid,ParameterSampler,fit_grid_point

    ①GridSearchCV:

    该方法提供了在参数网格上穷举候选参数组合的方法。参数网格由参数param_grid来指定,比如,下面展示了设置网格参数param_grid的一个例子:

    param_grid=[

      {'C':[1,10,100,1000],'kernel':['linear']},

      {'C':[1,10,100,1000],'gamma':[0.001,0.0001],'kernel':['rbf']}

      ]

    上面的参数指定了要搜索的两个网格(每个网格就是一个字典):第一个里面有4个参数组合节点,第二个里面有4*2=8个参数组合节点

    GridSearchCV的实例实现了通用的estimator API:当在数据集上训练的时候,所有可能的参数组合将会被评估,训练完成后选组最优的参数组合对应的estimator。

    复制代码

    from sklearn import svm,datasets
    from sklearn.model_selection import GridSearchCV
    
    iris=datasets.load_iris()
    parameters={'kernel':('rbf','linear'),'C':[1,5,10]}
    svr=svm.SVC()
    clf=GridSearchCV(svr,parameters)
    clf.fit(iris.data,iris.target)
    print(clf.best_estimator_)

    复制代码

    最终结果:

    SVC(C=1, cache_size=200, class_weight=None, coef0=0.0,
      decision_function_shape=None, degree=3, gamma='auto', kernel='linear',
      max_iter=-1, probability=False, random_state=None, shrinking=True,
      tol=0.001, verbose=False)

    ②RandomizedSearchCV

    RandomizedSearchCV类实现了在参数空间上进行随机搜索的机制,其中参数的取值是从某种概率分布中抽取的,这个概率分布描述了对应的参数的所有取值情况的可能性,这种随机采样机制与网格穷举搜索相比,有两大优点:

    • 相比于整体参数空间,可以选择相对较少的参数组合数量
    • 添加参数节点不影响性能,不会降低效率

    指定参数的采样范围和分布可以用一个字典开完成,跟网格搜索很像,另外,计算预算(总共要采样多少参数组合或者迭代做多少次)可以用参数n_iter来指定,针对每一个参数,既可以使用可能取值范围内的概率分布,也可以指定一个离散的取值列表(离散的列表将被均匀采样)

    {'C':scpiy.stats.expon(scale=100),'gamma':scipy.stats.expon(scale=.1),'kernel':['rbf'],'class_weight':['balanced':None]}

    上边的例子中:C服从指数分布,gamma服从指数分布,这个例子使用了scipy.stats模块,其中包含了很多有用的分布用来产生参数采样点,像expon,gamma,uniform or randint,原则上,任何函数都可以传递进去,只要他提供一个rvs(random variate sample)方法来返回采样值,rvs函数的连续调用应该能够保证产生独立同分布的样本值。

    复制代码

    import numpy as np
    from time import time
    from scipy.stats import randint as sp_randint
    from sklearn.model_selection import RandomizedSearchCV
    from sklearn.datasets import load_digits
    from sklearn.ensemble import RandomForestClassifier
    
    def report(results,n_top=3):
        for i in range(1,n_top+1):
            candidates=np.flatnonzero(results['rank_test_score']==i)
            for candidate in candidates:
                print("Model with rank:{0}".format(i))
                print("Mean validation score:{0:.3f}(std:{1:.3f})".format(
                    results['mean_test_score'][candidate],
                    results['std_test_score'][candidate]))
                print("Parameters:{0}".format(results['params'][candidate]))
                print("")
    
    
    digis=load_digits()
    X,y=digis.data,digis.target
    
    clf=RandomForestClassifier(n_estimators=20)
    #设置想要优化的超参数以及他们的取值分布
    param_dist={"max_depth":[3,None],
                "max_features":sp_randint(1,11),
                "min_samples_split":sp_randint(2,11),
                "min_samples_leaf":sp_randint(1,11),
                "bootstrap":[True,False],
                "criterion":['gini','entropy']
                }
    #开启超参数空间的随机搜索
    n_iter_search=20
    random_search=RandomizedSearchCV(clf,param_distributions=param_dist,n_iter=n_iter_search)
    start=time()
    random_search.fit(X,y)
    print("RandomizedSearchCV took %.3f seconds for %d candidates"
          "parameter settings."%((time()-start),n_iter_search))
    report(random_search.cv_results_)

    复制代码

    最终结果:

    复制代码

    RandomizedSearchCV took 3.652 seconds for 20 candidatesparameter settings.
    Model with rank:1
    Mean validation score:0.930(std:0.019)
    Parameters:{'max_depth': None, 'min_samples_leaf': 2, 'criterion': 'entropy', 'max_features': 8, 'bootstrap': False, 'min_samples_split': 10}
    
    Model with rank:2
    Mean validation score:0.928(std:0.009)
    Parameters:{'max_depth': None, 'min_samples_leaf': 2, 'criterion': 'gini', 'max_features': 4, 'bootstrap': False, 'min_samples_split': 10}
    
    Model with rank:3
    Mean validation score:0.924(std:0.009)
    Parameters:{'max_depth': None, 'min_samples_leaf': 1, 'criterion': 'gini', 'max_features': 9, 'bootstrap': True, 'min_samples_split': 5}

    复制代码

    ③超参数优化中的随机搜索和网格搜索对比试验以随机森林分类器为优化对象。所有影响分类器学习的参数都被搜索了,除了树的数量之外,随机搜索和网格优化都在同一个超参数空间上对随机森林分类器进行优化,虽然得到的超参数设置组合比较相似,但是随机搜索的运行时间却比网络搜索显著的少,随机搜索得到的超参数组合的性能稍微差一点,但这很大程度上由噪声引起的,在实践中,我们只能挑几个比较重要的参数组合来进行优化。

    复制代码

    import numpy as np
    from time import time
    from scipy.stats import randint as sp_randint
    from sklearn.model_selection import RandomizedSearchCV
    from sklearn.model_selection import GridSearchCV
    from sklearn.datasets import load_digits
    from sklearn.ensemble import RandomForestClassifier
    
    def report(results,n_top=3):
        for i in range(1,n_top+1):
            candidates=np.flatnonzero(results['rank_test_score']==i)
            for candidate in candidates:
                print("Model with rank:{0}".format(i))
                print("Mean validation score:{0:.3f}(std:{1:.3f})".format(
                    results['mean_test_score'][candidate],
                    results['std_test_score'][candidate]))
                print("Parameters:{0}".format(results['params'][candidate]))
                print("")
    
    
    digis=load_digits()
    X,y=digis.data,digis.target
    
    clf=RandomForestClassifier(n_estimators=20)
    
    print("==========下面是RandomizedSearchCV的测试结果===============")
    #设置想要优化的超参数以及他们的取值分布
    param_dist={"max_depth":[3,None],
                "max_features":sp_randint(1,11),
                "min_samples_split":sp_randint(2,11),
                "min_samples_leaf":sp_randint(1,11),
                "bootstrap":[True,False],
                "criterion":['gini','entropy']
                }
    #开启超参数空间的随机搜索
    n_iter_search=20
    random_search=RandomizedSearchCV(clf,param_distributions=param_dist,n_iter=n_iter_search)
    start=time()
    random_search.fit(X,y)
    print("RandomizedSearchCV took %.3f seconds for %d candidates"
          "parameter settings."%((time()-start),n_iter_search))
    report(random_search.cv_results_)
    
    print("==========下面是GridSearchCV的测试结果===============")
    #在所有参数上搜索,找遍所有网络节点
    param_grid={"max_depth":[3,None],
                "max_features":[1,3,10],
                "min_samples_split":[2,3,10],
                "min_samples_leaf":[1,3,10],
                "bootstrap":[True,False],
                "criterion":['gini','entropy']
                }
    #开启超参数空间的网格搜索
    grid_search=GridSearchCV(clf,param_grid=param_grid)
    start=time()
    grid_search.fit(X,y)
    print("GridSearchCV took %.2f seconds for %d candidates parameter settings."
         %(time()-start,len(grid_search.cv_results_['params'])))
    report(random_search.cv_results_)

    复制代码

    最终结果:

    复制代码

    ==========下面是RandomizedSearchCV的测试结果===============
    RandomizedSearchCV took 3.874 seconds for 20 candidatesparameter settings.
    Model with rank:1
    Mean validation score:0.928(std:0.010)
    Parameters:{'max_depth': None, 'min_samples_leaf': 2, 'criterion': 'entropy', 'max_features': 10, 'bootstrap': False, 'min_samples_split': 2}
    
    Model with rank:2
    Mean validation score:0.920(std:0.007)
    Parameters:{'max_depth': None, 'min_samples_leaf': 4, 'criterion': 'gini', 'max_features': 6, 'bootstrap': False, 'min_samples_split': 2}
    
    Model with rank:2
    Mean validation score:0.920(std:0.009)
    Parameters:{'max_depth': None, 'min_samples_leaf': 2, 'criterion': 'entropy', 'max_features': 7, 'bootstrap': True, 'min_samples_split': 10}
    
    ==========下面是GridSearchCV的测试结果===============
    GridSearchCV took 37.64 seconds for 216 candidates parameter settings.
    Model with rank:1
    Mean validation score:0.928(std:0.010)
    Parameters:{'max_depth': None, 'min_samples_leaf': 2, 'criterion': 'entropy', 'max_features': 10, 'bootstrap': False, 'min_samples_split': 2}
    
    Model with rank:2
    Mean validation score:0.920(std:0.007)
    Parameters:{'max_depth': None, 'min_samples_leaf': 4, 'criterion': 'gini', 'max_features': 6, 'bootstrap': False, 'min_samples_split': 2}
    
    Model with rank:2
    Mean validation score:0.920(std:0.009)
    Parameters:{'max_depth': None, 'min_samples_leaf': 2, 'criterion': 'entropy', 'max_features': 7, 'bootstrap': True, 'min_samples_split': 10}

    复制代码

    超参数空间的搜索技巧

    • 技巧一,指定一个合适的目标测度对模型进行估计

        默认情况下,参数搜索使用estimator的score函数来评估模型在某种参数配置下的性能:

          分类器对应于 sklearn.metrics.accuracy_score

          回归器对应于sklearn.metrics.r2_score

      但是在某些应用中,其他的评分函数获取更加的合适。(比如在非平衡的分类问题中,准确率sccuracy_score通常不管用。这时,可以通过参数scoring来指定GridSearchCV类或者RandomizedSearchCV类内  部用我们自定义的评分函数)

    • 技巧二、使用SKlearn的PipeLine将estimators和他们的参数空间组合起来
    • 技巧三、合理划分数据集:开发集(用于GridSearchCV)+测试集(Test)使用model_selection.train_test_split()函数来搞定!
    • 技巧四、并行化:(GridSearchCV)和(RandomizedSearchCV)在参数节点的计算上可以做到并行计算,这个通过参数”n_jobs“来指定。
    • 技巧五、提高在某些参数节点上发生错误时的鲁棒性:在出错节点上只是提示警告。可以通过设置参数error_score=0(or=np.NaN)来搞定!
    展开全文
  • Sklearn参数详解—聚类算法

    千次阅读 2018-07-07 09:00:00
    总第115篇 前言 聚类是一种非监督学习,是将一份给定数据集划分成k类,这一份数据集可能是某公司的一批用户...Sklearn参数详解—Adaboost 参考文章: http://www.cnblogs.com/pinard/p/6217852.html

    总第115篇

    前言

    聚类是一种非监督学习,是将一份给定数据集划分成k类,这一份数据集可能是某公司的一批用户,也可能是某媒体网站的一系列文章,如果是某公司的一批用户,那么k-means做的就是根据用户的表现对用户的分类;如果媒体的文章,那么k-means做的就是根据文章的类型,把他分到不同的类别。

    当一个公司用户发展到一定的量级以后,就没有办法以同样的精力去维护所有用户,这个时候就需要根据用户的种种表现对用户进行分类,然后根据用户类别的不同,采取不同的运营策略。而这里的分类方法就是聚类算法。我们这篇文章主要讲述一下常用的三种聚类方法:

    • K-means聚类

    • 层次聚类

    • 密度聚类

    K-means聚类算法

    K-means聚类算法是最简单、最基础的聚类算法,原理很简单,就是先指定k个点,然后计算每一个样本点分别到这k个点之间的距离,并将不同样本点划分到距离最近的那个点的集合,这样就把所有的样本分成k类了。比如下图就是将所有的样本分为3类。

    步骤:

    1. 随机选择K个点(质心)

    2. 通过计算每个点到这K个点之间的距离(这里的距离默认是欧式距离,一般也选择欧式距离,也可以是其他,比如DTW),并将样本点划分到距离最近的那个点。

    3. 计算划分后的点的平均值,并将均值作为新的质心,继续进行距离求解,然后重新进行划分,再次求均值,直到均值不发生变化时循环停止。

    参数

    class sklearn.cluster.KMeans
        (n_clusters=8, init='k-means++', n_init=10, max_iter=300, 
        tol=0.0001, precompute_distances='auto', verbose=0, 
        random_state=None, copy_x=True, n_jobs=1, algorithm='auto')
    

    n_clusters:质心数量,也就是分类数,默认是8个。

    init:初始化质心的选取方式,主要有下面三种参数可选,‘k-means++’、‘random’ or an ndarray,默认是'k-means++'。因为初始质心是随机选取的,会造成局部最优解,所以需要更换几次随机质心,这个方法在sklearn中通过给init参数传入=“k-means++”即可。

    K-means与K-means++区别:
    原始K-means算法最开始随机选取数据集中K个点作为聚类中心,而K-means++按照如下的思想选取K个聚类中心:
    假设已经选取了n个初始聚类中心(0<n<K),则在选取第n+1个聚类中心时:距离当前n个聚类中心越远的点会有更高的概率被选为第n+1个聚类中心,但在选取第一个聚类中心(n=1)时同样通过随机的方法,之所以这样做是因为聚类中心互相离得越远越好。

    n_init:随机初始化的次数,kmeans质心迭代的次数。
    max_iter:最大迭代次数,默认是300。
    tol:误差容忍度最小值。
    precompute_distances:是否需要提前计算距离,auto,True,False三个参数值可选。默认值是auto,如果选择auto,当样本数*质心数>12兆的时候,就不会提前进行计算,如果小于则会与提前计算。提前计算距离会让聚类速度很快,但是也会消耗很多内存。
    copy_x:主要起作用于提前计算距离的情况,默认值是True,如果是True,则表示在源数据的副本上提前计算距离时,不会修改源数据。
    algorithm:优化算法的选择,有autofullelkan三种选择。full就是一般意义上的K-Means算法,elkan是使用的elkan K-Means算法。默认的auto则会根据数据值是否是稀疏的(稀疏一般指是有大量缺失值),来决定如何选择fullelkan。如果数据是稠密的,就选择elkan K-means,否则就使用普通的Kmeans算法。

    刘建平大佬博客关于elkan算法的解释

    对象/属性

    cluster_centers_:输出聚类的质心。
    labels_:输出每个样本集对应的类别。
    inertia_:所有样本点到其最近点距离之和。

    层次聚类

    层次聚类有两种方式,一种是从上至下(凝聚法),另一种是从下至上(分裂法),如下图所示。

    从下至上(凝聚法)

    从上至下就是把每一个样本分别当作一类,然后计算两两样本之间的距离,将距离较近的两个样本进行合并,再计算两两合并以后的簇之间的距离,将距离最近的两个簇进行合并,重复执行这个过程,直到达到最后指定的类别数或者达到了停止条件。

    从上至下(分裂法)

    从下至上就是刚开始把所有样本都当作同一类,然后计算两两样本之间的距离,将距离较远的两个样本分割成两类,然后再计算剩余样本集中每个样本到这两类中的距离,距离哪类比较近,则把样本划分到哪一类,循环执行这个过程,直到达到最后指定的类别数或者达到了停止条件。

    参数

    AgglomerativeClustering是用来实现凝聚法聚类模型的。

    class sklearn.cluster.AgglomerativeClustering
        (n_clusters=2, affinity='euclidean', memory=None, 
        connectivity=None, compute_full_tree='auto', linkage='ward', 
        pooling_func=<function mean at 0x174b938>)
    

    n_clusters:目标类别数,默认是2。
    affinity:样本点之间距离计算方式,可以是euclidean(欧式距离), l1l2manhattan(曼哈顿距离)、cosine(余弦距离)、precomputed(可以预先设定好距离),如果参数linkage选择“ward”的时候只能使用euclidean
    linkage:链接标准,即样本点的合并标准,主要有wardcompleteaverage三个参数可选,默认是ward。每个簇(类)本身就是一个集合,我们在合并两个簇的时候其实是在合并两个集合,所以我们需要找到一种计算两个集合之间距离的方式,主要有这三种方式:wardcompleteaverage,分别表示使用两个集合方差、两个集合中点与点距离之间的平均值、两个集合中距离最小的两个点的距离。

    对象/属性

    labels_:每个样本点的类别。
    n_leaves_:层次树中叶结点树。

    密度聚类:

    密度聚类与前面两种聚类方式不同,密度聚类无法事先指定类别个数,只能通过去指定每个点的邻域,以及邻域内包含样本点的最少个数。

    先来看几个密度聚类里面用到的概念:

    • 邻域:邻域是针对样本集中的每个点而言的,我们把距离某个样本点(可以把该点理解为圆心)距离在r(可理解为圆的半径)以内的点的集合称为该点的邻域。

    • 核心对象:如果某个点的邻域内至少包含MinPts个样本,则该点就可以称为核心对象。

    • 密度直达:如果点A位于点B的邻域中,且点B是核心对象,则称A和B是密度直达。

    • 密度可达:对于点A和B,如果存在一个(或者若干个)点C,其中A到C是密度直达,C到B是密度直达,则A和B就称为密度可达。(你可以理解为C是一个跳板,你可以通过C从点A跳到B)

    • 密度相连:若存在一个点C,使得C到A是密度直达,C到B是密度直达,则称A和B是密度相连的。

    具体步骤

    1. 先建立几个集合,一个用来存储核心对象的集合Ω,初始值是空集;再初始化一个值k,用来存放簇的类别数,初始值为0;再新建一个集合Γ,用来存放未被使用的样本,初始值为全部样本集D。

    2. 遍历所有样本集中的每个样本点p,判断其是否满足核心对象的条件,如果满足,则把该点加入到核心对象集合Ω中;如果没有样本点满足核心对象条件,则结束遍历。

    3. 判断核心对象集合Ω是否为空,如果为空,则算法结束;如果不为空,则在集合Ω中随机选取一个样本点,将该点密度可达的所有样本点划分为一个簇,这个簇的样本集合称为Ck ,将簇的类别数k+1,未被使用样本Γ-Ck。
      4.再在剩余的核心对象中重复步骤3,直到没有核心对象为止。
      5.最后输出k个类别的样本集合{C1、C2、……、Ck}。

    参数

    class sklearn.cluster.DBSCAN
        (eps=0.5, min_samples=5, metric='euclidean', metric_params=None, 
        algorithm='auto', leaf_size=30, p=None, n_jobs=1)
    

    eps:即邻域中的r值,可以理解为圆的半径。
    min_samples:要成为核心对象的必要条件,即邻域内的最小样本数,默认是5个。
    metric:距离计算方式,和层次聚类中的affinity参数类似,同样也可以是precomputed
    metric_params:其他度量函数的参数。
    algorithm:最近邻搜索算法参数,autoball_tree(球树)、kd_tree(kd树)、brute(暴力搜索),默认是auto
    leaf_size:最近邻搜索算法参数,当algorithm使用kd_tree或者ball_tree时,停止建子树的叶子节点数量的阈值。
    p: 最近邻距离度量参数。只用于闵可夫斯基距离和带权重闵可夫斯基距离中p值的选择,p=1为曼哈顿距离,p=2为欧式距离。

    对象/属性

    core_sample_indices_:核心对象数。
    labels_:每个样本点的对应的类别,对于噪声点将赋值为-1。

    你还可以看:

    SKlearn参数详解—随机森林

    Sklearn参数详解—GBDT

    Sklearn参数详解—Adaboost

    参考文章:

    http://www.cnblogs.com/pinard/p/6217852.html

    展开全文
  • Sklearn参数详解—贝叶斯

    千次阅读 2019-02-28 18:41:53
    朴素贝叶斯一共有三种方法,分别是高斯朴素贝叶斯、多项式分布贝叶斯、伯努利朴素贝叶斯,在介绍不同方法的具体参数前,我们先看看这三种方法有什么区别。 这三种分类方法其实就是对应三种不同的数据分布类型。 ...

    朴素贝叶斯一共有三种方法,分别是高斯朴素贝叶斯、多项式分布贝叶斯、伯努利朴素贝叶斯,在介绍不同方法的具体参数前,我们先看看这三种方法有什么区别。

    这三种分类方法其实就是对应三种不同的数据分布类型。

    高斯分布又叫正太分布,我们把一个随机变量X服从数学期望为μ、方差为σ^2的数据分布称为正太分布,当数学期望μ=0,方差σ=1时称为标准正态分布。

    正太分布概率图

    伯努利分布又称“零一分布”、“两点分布”(即结果要么是0要么是1),是二项分布的特殊情况,之所以是特殊的二项分布,是因为二项分布是多重伯努利实验的概率分布。举个例子就是,伯努利分布是只扔一次硬币正面反面的概率,而二项分布是扔多次硬币以后得到正面反面的概率。

    多项式分布(Multinomial Distribution)是二项式分布的推广,二项分布是随机结果值只有两个(投硬币的结果),多项式分布是指随机结果值有多个(摇骰子的结果)。

    多项式模型朴素贝叶斯和伯努利模型朴素贝叶斯常用在文本分类问题中,高斯分布的朴素贝叶斯主要用于连续变量中,且假设连续变量是服从正太分布的

    高斯朴素贝叶斯

    高斯朴素贝叶斯算法是假设特征的可能性(即概率)为高斯分布。

    class sklearn.naive_bayes.GaussianNB(priors=None)
    

    priors:先验概率大小,如果没有给定,模型则根据样本数据自己计算(利用极大似然法)。

    对象

    class_prior_:每个样本的概率

    class_count:每个类别的样本数量

    theta_:每个类别中每个特征的均值

    sigma_:每个类别中每个特征的方差

    多项式分布贝叶斯

    适用于服从多项分布的特征数据。

    class sklearn.naive_bayes.MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None)
    

    alpha:先验平滑因子,默认等于1,当等于1时表示拉普拉斯平滑。

    fit_prior:是否去学习类的先验概率,默认是True

    class_prior:各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,等于类标记总个数N分之一。

    对象

    class_log_prior_:每个类别平滑后的先验概率

    intercept_:是朴素贝叶斯对应的线性模型,其值和class_log_prior_相同feature_log_prob_:给定特征类别的对数概率(条件概率)。 特征的条件概率=(指定类下指定特征出现的次数+alpha)/(指定类下所有特征出现次数之和+类的可能取值个数*alpha)coef_: 是朴素贝叶斯对应的线性模型,其值和feature_log_prob相同

    class_count_: 训练样本中各类别对应的样本数

    feature_count_: 每个类别中各个特征出现的次数

    伯努利朴素贝叶斯

    用于多重伯努利分布的数据,即有多个特征,但每个特征都假设是一个二元 (Bernoulli, boolean) 变量。

    class sklearn.naive_bayes.BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None)
    

    alpha:平滑因子,与多项式中的alpha一致。

    binarize:样本特征二值化的阈值,默认是0。如果不输入,则模型会认为所有特征都已经是二值化形式了;如果输入具体的值,则模型会把大于该值的部分归为一类,小于的归为另一类。

    fit_prior:是否去学习类的先验概率,默认是True

    class_prior:各个类别的先验概率,如果没有指定,则模型会根据数据自动学习, 每个类别的先验概率相同,等于类标记总个数N分之一。

    对象

    class_log_prior_:每个类别平滑后的先验对数概率。

    feature_log_prob_:给定特征类别的经验对数概率。

    class_count_:拟合过程中每个样本的数量。

    feature_count_:拟合过程中每个特征的数量。

    方法

    贝叶斯的方法和其他模型的方法一致。

    fit(X,Y):在数据集(X,Y)上拟合模型。

    get_params():获取模型参数。

    predict(X):对数据集X进行预测。

    predict_log_proba(X):对数据集X预测,得到每个类别的概率对数值。predict_proba(X):对数据集X预测,得到每个类别的概率。

    score(X,Y):得到模型在数据集(X,Y)的得分情况。

    转自https://zhuanlan.zhihu.com/p/39780650

    展开全文
  • Sklearn参数详解—Adaboost

    千次阅读 2018-06-18 15:16:32
    但是我们在实际中除了调整Adaboost模型参数外,还可以调整基分类器的参数,关于基分类的调参,和单模型的调参是完全一样的,比如默认的基分类器是决策树,那么这个分类器的调参和我们之前的Sklearn参数详解——决策...

    总第112篇

    前言

    今天这篇讲讲集成学习,集成学习就是将多个弱学习器集合成一个强学习器,你可以理解成现在有好多道判断题(判断对错即01),如果让学霸去做这些题,可能没啥问题,几乎全部都能做对,但是现实情况是学霸不常有,学渣倒是很多,怎么样做才能保证题做对的准确率较高呢?就是让多个学渣一起做, 每个人随机挑选一部分题目来做,最后将所有人的结果进行汇总,然后根据将票多者作为最后的结果;另一种方式就是先让学渣A做一遍,然后再让学渣B做,且让B重点关注A做错的那些题,再让C做,同样重点关注B做错的,依次循环,直到所有的学渣都把题目做了一遍为止。通过上面两种方式就可以做到学渣也能取得和学霸一样的成绩啦。我们把这种若干个学渣组合达到学霸效果的这种方式称为集成学习

    注:这里的学渣并无它意,请勿过度解读。

    理解了集成学习的原理以后,我们来看看关于集成学习的一些理论知识。

    理论知识

    集成学习,就是将多个弱学习器集合成一个强学习器,那么我们如何来选取弱学习器呢,主要有两种方式。

    • 第一种是所有的弱学习器都是一个种类的,比如都是决策树模型。

    • 另一种是所有的弱学习器并不完全一样,你可以用LR预测一个结果,然后再用贝叶斯预测一个,再用SVM预测一个,然后对三个模型的预测结果进行投票,票数多者做为最后的结果。

    我们实际业务中用的比较多的都是用同一种类的弱学习器去集合成一个强学习器。

    我们找到了弱学习器以后就可以对弱学习器进行组合,组合的方式也有两种,划分依据主要是看弱学习器之间是否有联系。

    • 一种是弱学习器之间没有联系,每个弱学习器都是随机从总样本中抽取部分数据集(有放回抽样)进行训练,各个弱学习器之间是并联关系,这样就会生成若干个弱学习器,这种集成方式叫做bagging。随机森林(RF)是bagging中比较有代表的算法。

    • 另一种是弱学习器之间是相互联系的,先所有训练集样本上训练一个基模型,然后根据基模型的分类效果,把那些分类错误的样本给予较高的权重(默认n个样本中每个样本的权重为1/n),再次进行训练,这样又会得出一个模型,模型又会有错分类的,再次提高这些错分类样本的权重;如此循环,直到满足预先设定的弱分类器数目。这种集成方式中各个弱学习器是串联关系,每个弱学习器是建立在前一个弱学习器的基础上的,我们把这种方式称为boosting。Boosting系列算法里主要有AdaBoost算法和提升树(boosting tree)系列算法。提升树中应用最广最普遍的算法就是梯度提升树(Gradient Boosting Tree)。

    Adaboost-模型

    讲完了集成学习,顺便讲讲Sklearn中Adaboost模型,关于Adaboost模型的原理篇见:提升方法-Adaboost算法

    Adaboost-参数

    class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm='SAMME.R', random_state=None)
    

    base_estimator:基分类器,默认是决策树,在该分类器基础上进行boosting,理论上可以是任意一个分类器,但是如果是其他分类器时需要指明样本权重。
    n_estimators:基分类器提升(循环)次数,默认是50次,这个值过大,模型容易过拟合;值过小,模型容易欠拟合。
    learning_rate:学习率,表示梯度收敛速度,默认为1,如果过大,容易错过最优值,如果过小,则收敛速度会很慢;该值需要和n_estimators进行一个权衡,当分类器迭代次数较少时,学习率可以小一些,当迭代次数较多时,学习率可以适当放大。
    algorithm:boosting算法,也就是模型提升准则,有两种方式SAMME, 和SAMME.R两种,默认是SAMME.R,两者的区别主要是弱学习器权重的度量,前者是对样本集预测错误的概率进行划分的,后者是对样本集的预测错误的比例,即错分率进行划分的,默认是用的SAMME.R
    random_state:随机种子设置。

    关于Adaboost模型本身的参数并不多,但是我们在实际中除了调整Adaboost模型参数外,还可以调整基分类器的参数,关于基分类的调参,和单模型的调参是完全一样的,比如默认的基分类器是决策树,那么这个分类器的调参和我们之前的Sklearn参数详解——决策树是完全一致。

    Adaboost-对象

    先生成一个分类器

    from sklearn.datasets import load_iris
    from sklearn.ensemble import AdaBoostClassifier
    iris=load_iris()
    model=AdaBoostClassifier(n_estimators=100)
    clf=model.fit(iris.data,iris.target)python
    

    estimators_:以列表的形式返回所有的分类器。

    运行结果

    列表长度

    可以看到该对象得到的list的长度为100,刚好是咱们自定义的基分类器个数。
    classes_:类别标签
    运行结果

    estimator_weights_:每个分类器权重。

    estimator_errors_:每个分类器的错分率,与分类器权重相对应。

    feature_importances_:特征重要性,这个参数使用前提是基分类器也支持这个属性。

    Adaboost-方法

    decision_function(X):返回决策函数值(比如svm中的决策距离)
    fit(X,Y):在数据集(X,Y)上训练模型。
    get_parms():获取模型参数
    predict(X):预测数据集X的结果。
    predict_log_proba(X):预测数据集X的对数概率。
    predict_proba(X):预测数据集X的概率值。
    score(X,Y):输出数据集(X,Y)在模型上的准确率。
    staged_decision_function(X):返回每个基分类器的决策函数值
    staged_predict(X):返回每个基分类器的预测数据集X的结果。
    staged_predict_proba(X):返回每个基分类器的预测数据集X的概率结果。
    staged_score(X, Y):返回每个基分类器的预测准确率。

    Adaboost的大部分方法和其他模型基本一致,比其他模型多了几个staged方法。staged是返回每个基分类的结果。


    可以看到,直接运行 staged方法,不会直接输出结果,而是输出一个生成器,要想得到具体的结果,需要遍历打印输出。

    还可以看到,共输出100项,这正好是我们100个基分类器的结果。

    展开全文
  • 神经网络③——sklearn参数介绍及应用

    万次阅读 多人点赞 2019-07-03 21:14:06
    MLPRegressor参数和方法 MLPClassifier(solver=’sgd’, activation=’relu’,alpha=1e-4,hidden_layer_sizes=(50,50), random_state=1,max_iter=10,learning_rate_init=.1) 参数说明(分类和回归参数一致): ...
  • Sklearn参数详解--决策树 n_estimators :随机森林中树的棵树,默认是10棵。 criterion :样本集切分策略,默认是 gini指数 ,此时树模型为CART模型,当值选为 信息增益 的时候,模型就成了ID3模型,默认为CART模型。 ...
  • 练习总结 +sklearn参数选择调优

    千次阅读 2018-12-08 14:48:23
    test,y_test)) RandomForest: sklearn.ensemble.RandomForestRegressor( n_estimators=10, criterion='mse', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_...
  • 机器学习总结-sklearn参数解释 实验数据集选取: 1分类数据选取 load_iris 鸢尾花数据集 from sklearn.datasets import load_iris data = load_iris() data.data[[10, 25, 50]] data.target[[10, 25, 50]] list...
  • PCA(sklearn参数详解)

    万次阅读 多人点赞 2016-08-23 21:47:46
    本篇不介绍PCA ,关于PCA收藏过另外几篇写的很好的博文 本篇仅针对sklearn中的PCA作记录 一、代码怎么写 ...sklearn.decomposition.PCA(n_components=None,...二、关于参数 n_components: 意义:PCA算法中所要保
  • Sklearn参数详解—GBDT

    2019-08-05 17:31:20
    前言 这篇介绍Boosting的第二个模型GBDT,GBDT和Adaboost都是Boosting模型的一种,但是略有不同,主要有以下两点不同: GBDT使用的基模型是CART决策树,且只能是CART决策树,而Adaboost的默认基模型是...参数...
  • Sklearn常用机器学习算法参数详解 更新日期2019-08-17 讲师简介菊安酱CDA数据分析师讲师 Sklearn常用机器学习算法参数详解 线性回归 岭回归 Lasso回归 Elastic Net 逻辑回归 sv m.LinearSVC sv m.SVC sv m.LinearSV ...
  • Sklearn参数详解—SVM

    千次阅读 2018-05-26 14:42:30
    总第108篇本篇主要讲讲Sklearn中SVM,SVM主要有LinearSVC、NuSVC和SVC三种方法,我们将具体介绍这三种分类方法都有哪些参数值以及不同参数值的含义。在开始看本篇前...
  • Sklearn参数详解—LR模型

    千次阅读 2018-05-05 10:20:01
    总第105篇最近会开始一个新的系列,sklearn库中各模型的参数解释,本篇主要讲述最基础的LR模型。模型参数详解逻辑回归:sklearn.linear_model.LogisticRe...
  • sklearn参数选择

    千次阅读 2017-12-30 18:05:07
    sklearn中的超参数优化
  • sklearn lda参数详解

    2020-10-31 23:25:26
    sklearn lda参数详解
  • sklearn参数搜索

    千次阅读 2018-03-14 19:19:36
    本篇文章主要介绍在sklearn中采用GridSearchCV和RandomizedSearchCV进行超参数选择。一、超参数介绍: 1,超参数:在模型训练中,有些参数不能通过对数据进行学习得到,这种参数叫做超参数。比如,神经网络的层数,...
  • 目录 1 GridSearchCV:网格式暴力搜索 2.RandomizedSearchCV:采样式...全都在:sklearn.model_selection里面的https://scikit-learn.org/stable/modules/classes.html#hyper-parameter-optimizers 1 GridSearc...
  • sklearn逻辑回归参数说明

    万次阅读 2018-07-27 13:48:46
    写在前面的话:本人刚刚学sklearn,很多参数也不是很懂,英语又比较low,只能求助google翻译,若有不对的地方,请大佬指出来。 Sklearn 逻辑回归参数 Sklearn.linear_model.LogisticRegression (penalty=’l2’,...
  • Random Forest(sklearn参数详解)

    万次阅读 多人点赞 2016-08-17 10:32:42
    本篇不是介绍RF的,关于RF网上有很多...本篇仅针对如何使用sklearn中的RandomForestClassifier作记录 一、代码怎么写 class sklearn.ensemble.RandomForestClassifier(n_estimators=10, crite-rion=’gini’, max_dep
  • Adaboost库分为AdaBoostClassifier(分类)和AdaBoostRegressor(回归),两者的参数相近,均包括Adaboost框架参数和使用的弱学习器参数,详细如下: 1、框架参数 ① base_estimator: 弱学习器,...
  • sklearn中KNN模型参数释义

    千次阅读 2019-03-18 15:15:23
    在scikit-learn 中,与近邻法这一大类相关的类库都在sklearn.neighbors包之中。KNN分类树的类是KNeighborsClassifier,KNN回归树的类KNeighborsRegressor。除此之外,还有KNN的扩展,即限定半径最近邻分类树的类...
  • sklearn.linear_model.LinearRegression 调用 sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None) Parameters fit_intercept 释义:是否计算该模型的截距。 ...
  • sklearn与XGBoost库xgboost算法参数总结

    千次阅读 2020-12-27 16:49:40
    1 sklearn与XGBoost 1.2 xgboost库与XGB的sklearn API 1.3 XGBoost的三大板块 2 梯度提升树 2.1 提升集成算法:重要参数n_estimators 2.2 有放回随机抽样:重要参数subsample 2.3 迭代决策树:重要参数eta 3 ...
  • sklearn-SVC实现与类参数 对应的API:http://scikit-learn.sourceforge.net/stable/modules/generated/sklearn.svm.SVC.html 它是基于libsvm实现的。随着样本数量的增加,拟合时间的复杂度要高于二次,这就使得当...
  • 使用sklearn简单进行SVM参数优选

    万次阅读 多人点赞 2018-03-22 16:56:50
    grid.scores:给出不同参数组合下的评价结果 grid.best_params_:最佳结果的参数组合 grid.best_score_:最佳评价得分 grid.best_estimator_:最佳模型 完整的例子如下: from sklearn.svm import SVC from sklearn...
  • 先看看有那些参数: penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='lbfgs', max_iter=100, multi_class='auto', verbose...
  • 但是我们在实际中除了调整Adaboost模型参数外,还可以调整基分类器的参数,关于基分类的调参,和单模型的调参是完全一样的,比如默认的基分类器是决策树,那么这个分类器的调参和我们之前的Sklearn参数详解——决策...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 59,861
精华内容 23,944
关键字:

sklearn参数