Scikit-Learn各算法详细参数速查手册(中文)

,它传入距离的数组,返回同样形状的权重数组。algorithm : 一个字符串,指定最近邻的算法,可以为下:
  • ball_tree : 使用BallTree算法。
  • kd_tree : 使用KDTree算法。
  • brute : 使用暴力搜索算法。
  • auto : 自动决定最合适算法。
leaf_size : 一个整数,指定BallTree或者KDTree叶节点的规模。它影响树的构建和查询速度。metric : 一个字符串,指定距离度量。默认为‘minkowski’(闵可夫斯基)距离。P : 整数值。
  • p=1: 对应曼哈顿距离。
  • p=2 : 对应欧氏距离。
n_jobs : 并行性。默认为-1表示派发任务到所有计算机的CPU上。方法
  • fit(X,y) : 训练模型。
  • predict(X) : 预测模型。
  • score(X,y) : 返回性能得分。设预测集为,则:
  • predict_proba(X) : 返回样本为每种标记的概率。
  • kneighbors([X,n_neighbors,return_distace]) : 返回样本点的k邻近点。如果return_distance=True,同时还返回到这些近邻点的距离。
  • kneighbors_graph([X,n_neighbors,mode]) : 返回样本点的连接图。

5. 数据降维

5.1 PCA

PCAscikit-learn中提供的PCA模型,其原型为:
class sklearn.decomposition.PCA(n_components=None, copy=True, whiten=False, svd_solver=’auto’, tol=0.0, iterated_power=’auto’, random_state=None)


导包
  • from sklearn.decomposition import PCA
参数
  • n_components : 一个整数,指定降维后的维数。
    • None : 则选择它的值为min(n_samples,n_features)。
    • 字符mle:则使用MLE算法来猜测降维后的维度。
    • 如为大于0小于1的浮点数:指定降维后的维数占原来的维数百分比。
  • copy : 一个布尔值。如果为False,则直接用原始数据来训练,结果会覆盖原始数据所在的数组。
  • whiten :一个布尔值。如果为True,则将特征向量除以n_samples倍的特征值,从而保证非相关输出的方差为1。
  • tol : 一个浮点数,指定arpack他特征值求解器的收敛阈值(如果为0,则自动选择)。
  • svd_solver :字符串。
    • auto :默认根据X的形状和n_component选择。如果输入数据大于500x500,提取的组件数低于数据最小尺寸的80%,则启用更有效的“随机”方法。否则,完整的SVD将被计算并可选择性地截断。
    • full :调用scipy.linalg.svd包进行分解选择。
    • arpack:通过调用scipy.sparse.linalg.svds来进行截断,但必须满足0 < n_components < X.shape1
    • randomized:用Halko等方法随机运行SVD。
  • random_state : 整数或者一个RandomState实例或者None。
    • 整数:控制伪随机数种子。
    • None :使用Numpy进行随机。
  • iterated_power : 整数或者‘auto’。指定使用svd_solver = ‘randomized’方法进行高效迭代。
属性
  • components_ : 主成分数组。
  • explained_variance_ : 每个成分对应的explained variance。
  • explained_variance_ratio_ : 一个数组,元素是每个主分成的explained variance的比例。
  • mean_ : 一个数组,元素是每个特征的统计平均值。
  • n_components_ : 一个整数,指示主成分有多少各元素。
方法
  • fit(X,y) : 训练模型。
  • transform(X) : 执行降维。
  • fit_transform(X,y) : 训练模型并降维。
  • inverse_transform(X) : 执行升维(逆向操作),将数据从低维空间逆向转换到原始空间。

5.2 超大规模数据降维IncrementalPCA

IncrementalPCA适用于超大规模数据,它可以将数据分批加载进内存。其原型为:
class sklearn.decomposition.IncrementalPCA(n_components=None, whiten=False, copy=True, batch_size=None)


导包
  • from sklearn.decomposition import IncrementalPCA
参数
  • n_components : 一个整数,指定降维后的维数。
    • None : 则选择它的值为min(n_samples,n_features)。
    • 字符mle:则使用MLE算法来猜测降维后的维度。
    • 如为大于0小于1的浮点数:指定降维后的维数占原来的维数百分比。
  • bath_size : 一个整数或者None,指定每个批次训练时,使用的样本数量。只有当调用fit()/partial_fit()方法时才会用到该参数。
    • 为None : 则有算法自动推断。
  • copy : 一个布尔值。如果为False,则直接用原始数据来训练,结果会覆盖原始数据所在的数组。
  • whiten :一个布尔值。如果为True,则将特征向量除以n_samples倍的特征值,从而保证非相关输出的方差为1。
属性
  • components_ : 主成分数组。
  • explained_varicance_ : 每个成分对应的explained variance。
  • explained_variance_ratio_ : 一个数组,元素是每个主分成的explained variance的比例。
  • mean_ : 一个数组,元素是每个特征的统计平均值。
  • var_ : 一个数组,元素是每个特征的经验方差。每调用一次partial_fit()方法,就会更新一次该属性。
  • n_components_ : 一个整数,指示主成分有多少各元素。
  • n_samples_seen_ : 一个整数,只是目前已经处理了多少个样本。每调用一次partial_fit()方法,就会更新一次该属性。每调用一个fit()方法就会清零该属性。
方法
  • fit(X,y) : 训练模型。
  • partial_fit(X,y) : 继续训练模型,使用bath_size个样本。
  • transform(X) : 执行降维。
  • fit_transform(X,y) : 训练模型并降维。
  • inverse_transform(X) : 执行升维(逆向操作),将数据从低维空间逆向转换到原始空间。

6. 聚类

6.1 K均值(KMeans)聚类

KMeansscikitlearn提供的k均值聚类算法模型,其原型为:
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’)


导包
  • from sklearn.cluster import KMeans
参数
  • n_clusters : 一个整数,指定分类数量。
  • init : 一个字符串,指定初始均值向量的策略,可以为以下值:
    • k-means++ : 该初始化策略选择的初始均值向量相互之间都距离较远,它的效果较好。
    • random : 从数据集中随机选择K个样本作初始均值向量。
    • 提供一个数组,数组形状为(n_clusters,n_features),该数组作为初始均值向量。
  • n_init : 一个整数,指定了k均值算法的运行次数,每一次都会选择一组不同的初始化均值向量,最终算法会选择最佳的分类簇作为最终结果。
  • algorithm : 一个字符串。
    • ‘full’ :使用EM算法。
    • ‘elkan’ :使用三角变化使得该算法更具效率,但不支持稀疏数据。
    • ‘auto’ : 使用‘full’处理稀疏数据,使用‘elkan’处理稠密数据。
  • max_iter : 一个整数,指定了单轮kmeans算法中最大的迭代次数。算法总的迭代次数为:max_iter*n_init。
  • precompute_distances : 可以为布尔值或者字符串‘auto’。该参数指定是否提前计算好样本之间的距离(如果提前计算需要更多内存,但是算法会运行更快)。
    • ‘auto’ :如果n_samples*n_clusters > 12 million,则不提前计算。
    • ‘True’ :提前计算。
    • ‘False’ :不提前计算。
  • tol : 一个浮点数,指定了算法收敛的阈值。
  • n_jobs : 一个整数,指定任务并行时指定CPU数量,如果为-1使用全部CPU。
  • verbose : 一个整数。如果为0,则不输出日志,如果为1,则每隔一段时间打印一次日志,如果大于1则打印日志更频繁。
  • random_state : 一个整数或者一个RandomState实例,或者None。
    • 如果为整数:指定了随机数生成器种子。
    • 如果为RandomState实例,则指定了随机数生成器。
    • 如果为None,则使用默认的随机数生成器。
  • copy_x : 布尔值,用于precompute_distances=True的情况。
    • 如果为True,则预计算距离的时候,并不会修改原数据。
    • 如果为False,则预计算距离的时候,会修改原数据用于节省内存,然后当算法结束时,会将原数据返还,但可能会因为浮点数的表示会产生一些误差。
属性
  • cluster_centers_ : 给出分类簇的均值向量。
  • labels_ : 给出每个样本所属的簇的标记。
  • inertia_ : 给出了每个样本距离他们各自最近的簇中心的距离之和。
方法
  • fit(X,y) : 训练模型。
  • fit_predict(X,y) : 训练模型并预测每个样本所属的簇。它等价于先调用fit()方法,后调用predict()方法。
  • predict(X) : 预测样本所属的簇。
  • score(X,y) : 给出了样本距离簇中心的偏移量的相反数。

6.2 密度(DBSCAN)聚类

DBSCANscikit-learn提供的密度聚类算法模型,其原型为:
class sklearn.cluster.DBSCAN(eps=0.5, min_samples=5, metric=’euclidean’, algorithm=’auto’, leaf_size=30, p=None, n_jobs=1)


导包
  • from sklearn.cluster import DBSCAN
参数
  • eps : 参数,用于确定邻域的大小。
  • min_samples : MinPts参数,用于判断核心对象。
  • metric : 一个字符串或者可调用对象,用于计算距离。如果是字符串,则必须是在metrics.pairwise.calculate_distance中指定它。
  • algorithm : 一个字符串,用于计算两点距离并找出最近邻点,可以为如下:
    • ‘auto’:由算法自动选取合适的算法。
    • ‘ball_tree’ : 用ball树来搜索。
    • ‘kd_tree’ : 用kd树来搜索。
    • ‘brute’ :暴力搜索。
  • leaf_size : 一个整数,用于指定当algorithm=ball_tree或者kd_tree时,树的叶节点大小。该参数会影响构建树、搜索最近邻速度,同时影响存储树的内存。
  • p : 闵可夫斯基距离p参数。
属性
  • core_sample_indices_ : 核心样本在原始训练集中的位置。
  • components_ : 核心样本的一份副本。
  • labels_ : 每个样本所属的簇的标记。对于噪声样本,其簇标记为-1样本
方法
  • fit(X,y) : 训练模型。
  • fit_predict(X,y) : 训练模型并预测每个样本的所属簇的标记。

6.3 层次(AgglomerativeClustering)聚类

AgglomerativeClusteringscikitlearn提供的层次聚类算法模型。其原型为:
class sklearn.cluster.AgglomerativeClustering(n_clusters=2, affinity=’euclidean’, memory=Memory(cachedir=None), connectivity=None, compute_full_tree=’auto’, linkage=’ward’, pooling_func=)


导包

  • from sklearn.cluster import AgglomerativeClustering

参数

  • n_clusters : 一个整数,指定分类簇的数量。
  • connectivity : 一个数组或者可调用对象或者为None,用于指定连接矩阵,它指出了每个样本可连接的样本。
  • affinity : 一个字符串或者可调用对象,用于计算距离,可以为:’euclidean’,’l1’,’l2’,’manhattan’,’cosine’,’precomputed’,如果linkage=’ward’,则’affinity’必须是’euclidean’。
  • memory : 用于缓存输出结果,默认不缓存。
  • compute_full_tree : 通常当训练了n_clusters之后,训练过程就停止,但是如果为True则会继续训练从而生成一棵完整的树。
  • linkage : 一个字符串,用于指定链接算法。

    • ‘ward’ :单链接single-linkage算法,采用
    • ‘complete’ :全连接complete-linkage算法,采用
    • ‘average’ :均连接average-linkage算法,采用
  • pooling_func : 一个可调用对象,它的输入是一组特征值,输出是一个数值。

属性

  • labels_ : 每个样本的簇标记。
  • n_leaves_ : 分层树的叶节点数量。

n_components : 连接图中联通分量的估计值。children : 一个数组,给出了每个非叶节点中的子节点数量。方法
  • fit(X,y) : 训练模型。
  • fit_predict(X,y) : 训练模型并预测每个样本所属的标记。

7. 支持向量机


  • 优点
    支持向量机SVM本质上是非线性方法,在样本量比较少的时候,容易抓住数据和特征之间的非线性关系(相比线性分类方法如Logistic regression),因此尅解决非线性问题、可以避免神经网络结构选择和局部极小点的问题,可以提高泛化性,可以解决高维问题。
  • 缺点
    SVM对缺失数据敏感,对非线性问题没有解决的通用方案,必须谨慎选择核函数来处理,计算复杂度高。主流算法是,这样对大规模数据就显得无力了。不仅如此,由于其存在两个对结果影响相当大的超参数(如果是RBF核,是核函数的参数gamma以及惩罚项C),这两个超参数无法通过概率方法进行计算,只能通过穷举试验求出,计算时间要远高于不少类似的非线性分类器。

7.1 线性分类SVM

LinearSVC实现了线性分类支持向量机,它是根据liblinear实现的,可以用于二分类、也可以用于多分类,其原型为:
class sklearn.svm.LinearSVC(penalty=’l2’, loss=’squared_hinge’, dual=True, tol=0.0001, C=1.0, multi_class=’ovr’, fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0, random_state=None, max_iter=1000)


导包
  • from sklearn.svm import LinearSVC
参数
  • C : 一个浮点数,罚项系数。C值越大对误分类的惩罚越大。
  • loss : 字符串,表示损失函数,可以为如下值:
    • ‘hinge’:此时为合页损失(他是标准的SVM损失函数)。
    • ‘squared_hinge’:合页损失函数的平方。
  • penalty :字符串,指定‘l1’或者‘l2’,罚项范数。默认为‘l2’(他是标准的SVM范数)。
  • dual :布尔值,如果为True,则解决对偶问题,如果是False,则解决原始问题。当n_samples>n_features是,倾向于采用False。
  • tol :浮点数,指定终止迭代的阈值。
  • multi_class :字符串,指定多分类的分类策略。
    • ‘ovr’ :采用one-vs-rest策略。
    • ‘crammer_singer’:多类联合分类,很少用,因为他计算量大,而且精度不会更佳,此时忽略loss,penalty,dual等参数。
  • fit_intecept :布尔值,如果为True,则计算截距,即决策树中的常数项,否则忽略截距。
  • intercept_scaling :浮点值,若提供了,则实例X变成向量[X,intercept_scaling]。此时相当于添加一个人工特征,该特征对所有实例都是常数值。
  • class_weight : 可以是个字典或者字符串‘balanced’。指定个各类的权重,若未提供,则认为类的权重为1。
    • 如果是字典,则指定每个类标签的权重。
    • 如果是‘balanced’,则每个累的权重是它出现频数的倒数。
  • verbose :一个整数,表示是否开启verbose输出。
  • random_state :一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
  • max_iter :一个整数,指定最大迭代数。
属性
  • coef_ : 一个数组,它给出了各个特征的权重。
  • intercept_ : 一个数组,它给出了截距。
方法
  • fit(X,y) :训练模型。
  • predict(X) : 用模型进行预测,返回预测值。
  • score(X,y) : 返回在(X,y)上的预测准确率。

7.2 非线性分类SVM

SVC实现了非线性分类支持向量机,它是根据libsvm实现的,可以用于二分类,也可以用于多分类,其原型为:
class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None, random_state=None)


导包
  • from sklearn.svm import SVC
参数
  • C : 一个浮点数,罚项系数,C越大惩罚越大。
  • kernel : 一个字符串,指定核函数。
    • ’linear’ :线性核
    • ‘poly’:多项式核参数决定。
    • ‘rbf’:默认值,高斯核函数参数决定。
    • ‘sigmoid’:参数指定。
    • ‘precomputed’:表示提供了kernel matrix,或者提供一个可调用对象,该对象用于计算kernel matrix。
  • degree : 一个整数,指定当核函数是多项式核函数时,多项式的系数。对于其它核函数该参数无效。
  • gamma :一个浮点数。当核函数是’rbf’,’poly’,’sigmoid’时,核函数的系数。如果为‘auto’,则表示系数为
  • coef0 :浮点数,用于指定核函数中的自由项。只有当核函数是‘poly’和‘sigmoid’时有效。
  • probability :布尔值。如果为True,则会进行概率估计。它必须在训练之前设定好,且会拖慢训练速度。
  • shrinking : 布尔值。如果为True,则使用启发式收缩。
  • tol :浮点数,指定终止迭代的阈值。
  • cache_size :浮点值,指定了kernel cache的大小,单位为MB。
  • class_weight : 可以是个字典,或者字符串‘balanced’。指定各个类的权重,若为提供,则权重均为1。
  • verbose :是否开启verbose输出。
  • max_iter :一个整数,指定最大迭代次数。
  • decision_function_shape :为字符串或者None,指定决策函数的形状。
    • ‘ovr’ :采用one-vs-rest策略,那么决策函数形状是(n_samples,n_classes)。
    • ‘ovo’ :使用‘one-vs-one’准则,那么决策函数形状是(n_samples,n_classes*(n_classes-1)/2)。
  • random_state :一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
属性
  • support_ :一个数组,形状为[n_SV],支持向量的下标。
  • support_vectors_ :一个数组,形状为[n_SV,n_features],支持向量。
  • n_support_ :一个数组,形状为[n_class],每一个分类的支持向量个数。
  • dual_coef_ : 一个数组,形状为[n_class-1,n_SV]。对偶问题中,在分类决策函数中每一个支持向量的系数。
  • coef_ :一个数组,形状为[n_class-1,n_features]。原始问题中,每个特征的系数。只有在linear kernel中有效。
  • intercept_:一个数组,形状为[n_class*(n_class-1)/2]。决策函数中的常数项。
方法
  • fit(X,y) : 训练模型。
  • predict(X) : 用模型进行预测,返回预测值。
  • score(X,y) : 返回在(X,y)上预测的准确度。
  • predict_log_proba(X) : 返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。
  • predict_proba(X) :返回一个数组,数组的元素依次是X预测为各个类别的概率。

7.3 线性回归SVR

LinearSVR实现了线性回归支持向量机,它基于liblinear实现,其原型为:
class sklearn.svm.LinearSVR(epsilon=0.0, tol=0.0001, C=1.0, loss=’epsilon_insensitive’, fit_intercept=True, intercept_scaling=1.0, dual=True, verbose=0, random_state=None, max_iter=1000)


导包
  • from sklearn.svm import LinearSVR
参数
  • C: 一个浮点值,罚项系数。
  • loss:字符串,表示损失函数,可以为:
    • ‘epsilon_insensitive’:此时损失函数为(标准的SVR)
    • ‘squared_epsilon_insensitive’:此时损失函数为
  • epsilon:浮点数,用于lose中的参数。
  • dual:布尔值。如果为True,则解决对偶问题,如果是False则解决原始问题。
  • tol:浮点数,指定终止迭代的阈值。
  • fit_intercept:布尔值。如果为True,则计算截距,否则忽略截距。
  • intercept_scaling:浮点值。如果提供了,则实例X变成向量[X,intercept_scaling]。此时相当于添加了一个人工特征,该特征对所有实例都是常数值。
  • verbose:是否开启verbose输出。
  • random_state:一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
  • max_iter:一个整数,指定最大迭代次数。
属性
  • coef_:一个数组,他给出了各个特征的权重。
  • intercept_:一个数组,他给出了截距,及决策函数中的常数项。
方法
  • fit(X,y):训练模型。
  • predict(X):用模型进行预测,返回预测值。
  • score(X,y):返回性能得分。设预测集为,则:

7.4 非线性回归SVR

SVR实现了非线性回归支持向量机,它是基于libsvm实现的,其原型为:
class sklearn.svm.SVR(kernel=’rbf’, degree=3, gamma=’auto’, coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)


导包
  • from sklearn.svm import SVR
参数
  • C:一个浮点值,罚项系数。
  • epsilon:浮点数,用于lose中的参数。
  • kernel: 一个字符串,指定核函数。
    • ’linear’ :线性核
    • ‘poly’:多项式核参数决定。
    • ‘rbf’:默认值,高斯核函数参数决定。
    • ‘sigmoid’:参数指定。
    • ‘precomputed’:表示提供了kernel matrix,或者提供一个可调用对象,该对象用于计算kernel matrix。
  • degree:一个整数,指定当核函数是多项式核函数时,多项式的系数。对于其它核函数该参数无效。
  • gamma:一个浮点数。当核函数是’rbf’,’poly’,’sigmoid’时,核函数的系数。如果为‘auto’,则表示系数为
  • coef0:浮点数,用于指定核函数中的自由项。只有当核函数是‘poly’和‘sigmoid’时有效。
  • shrinking:布尔值。如果为True,则使用启发式收缩。
  • tol:浮点数,指定终止迭代的阈值。
  • cache_size:浮点值,指定了kernel cache的大小,单位为MB。
  • verbose:指定是否开启verbose输出。
  • max_iter:一个整数,指定最大迭代步数。
属性
  • support_ :一个数组,形状为[n_SV],支持向量的下标。
  • support_vectors_ :一个数组,形状为[n_SV,n_features],支持向量。
  • n_support_ :一个数组,形状为[n_class],每一个分类的支持向量个数。
  • dual_coef_ : 一个数组,形状为[n_class-1,n_SV]。对偶问题中,在分类决策函数中每一个支持向量的系数。
  • coef_ :一个数组,形状为[n_class-1,n_features]。原始问题中,每个特征的系数。只有在linear kernel中有效。
  • intercept_:一个数组,形状为[n_class*(n_class-1)/2]。决策函数中的常数项。
方法
  • fit(X,y) : 训练模型。
  • predict(X) : 用模型进行预测,返回预测值。
  • score(X,y):返回性能得分。设预测集为,则:

8. 集成学习

概念

Scikit-Learn各算法详细参数速查手册(中文)


  • 每个基分类器的精度必须要>
  • 基分类器之间要有差异性。

Bagging

Bagging这个词是根据BootstrapAggregation这个词组创造的一个新词。Bootstrap,是指拔靴带,是帮助穿靴子时的一个纽带。统计学上的Bootstrap一般称为自助法,是指从m个训练样本中随机有放回的抽样m次,重复此过程T次。然后对每个样本集进行训练,最后结果由T个训练器投票表决最终答案。

Scikit-Learn各算法详细参数速查手册(中文)

Bagging典型的代表就是Random Forest,不过随机森林与Bagging有点不同:


  • 基分类器只能是决策树。
  • 随机森林不光是样本随机,也有特征随机。

由于以上两点,在样本充足的条件下,随机森林一般的结果都比任何一个单分类器效果要好。

Boosting

Boosting就不同了,他是一种串行模型,取的是全部样本来学习,但是它会进行多次重复学习,并且每次学习都会在之前一步的学习结果上在进行学习和改进,改进的是对上一次分错的节点的权重,为的是在本次学习中上次分错的节点在本次会得到更多关注,进而分类正确。Adaboost是Boosting的一种。

Scikit-Learn各算法详细参数速查手册(中文)

下面给出一个例题,可以对Boosting有一个直观的认识:


下面给出一个例题,可以对Boosting有一个直观的认识:






























x 0 1 2 3 4 5 6 7 8 9
y 1 1 1 -1 -1 -1 1 1 1 -1

Scikit-Learn各算法详细参数速查手册(中文)


  • 阈值v取2.5时误差率为0.3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.3)
  • 阈值v取8.5时误差率为0.3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.3)
  • 所以无论阈值v取2.5,还是8.5,总得分错3个样本,故可任取其中任意一个如2.5。
    Scikit-Learn各算法详细参数速查手册(中文)

对于m=2步:


  • 阈值v取2.5时误差率为0.1666*3(x < 2.5时取1,x > 2.5时取-1,则6 7 8分错,误差率为0.1666*3)。
  • 阈值v取5.5时误差率最低为0.0715*4(x > 5.5时取1,x < 5.5时取-1,则0 1 2 9分错,误差率为0.0715*3 + 0.0715)。
  • 阈值v取8.5时误差率为0.0715*3(x < 8.5时取1,x > 8.5时取-1,则3 4 5分错,误差率为0.0715*3)。

Scikit-Learn各算法详细参数速查手册(中文)

为何采用加法模型


  • 问:如果不采用加法模型,只是把上一次分类错的点的权重调高不行吗?
  • 答:这样做不可行,因为在每次权值更改后,错分类样本的权重被增大,那么就会出现当错分样本权值很大时相当于把正确分类样本的权重变小了,会导致正确样本错分。

8.1 AdaBoost

算法过程

下面介绍AdaBoost算法的过程:
1. 初始化训练数据的权值分布:


(a) 使用具有权值分布的训练集学习,得到基本分类器:

(b) 计算在训练数据集上的分类误差:

上式中,

(c) 计算的系数:

(d) 更新数据集的权值分布:


其中,,是规范化因子

(e) 重复

3. 构建基本分类器的线性组合:


4. 最终得到分类器:
,公式如下:
,让它能发挥更大的作用。

2. 再来看训练数据集分布的权值分配,公式如下:

,,
w_{m+1,i} = {w_{m,i}\over Z_m}e^{-a_my_iG(x_i)}= \left{ {\text{wm,iZmeamGm(xi)=yi}\atop
次训练后模型为:
\begin{align} f_{m-1}(x) &= f_{m-2}(x)+\alpha_{m-1}G_{m-1}(x)\\& = \alpha_1G_1(x)+...+\alpha_{m-1}G_{m-1}(x)\\

5. 目标是每一次的损失在训练集上最小,所以最小化目标函数为:

\begin{align} (\alpha_m,G_m(x)) &= min\sum_{i=1}^Ne^{-y_if_m(x_i)}\\& = min\sum_{i=1}^Ne^{-y_i[f_{m-1}(x_i)+\alpha_mG_m(x)]}\\& = min\sum_{i=1}^Ne^{-y_if_{m-1}(x_i)-y_i\alpha_mG_m(x)}\\& = min\sum_{i=1}^Nw_{mi}e^{-y_i\alpha_mG_m(x)}\\ ,所以与最小无关。

6. 于是,有:

\begin{align} min\sum_{i=1}^Nw_{mi}e^{-y_i\alpha_mG_m(x)} & = min\sum_{y_i=G_m(x_i)}w_{mi}e^{-a}+\sum_{y_i\not=G_m(x_i)}w_{mi}e^a\\& = min(e^{-a}\sum_{i=1}^Nw_{mi}I(y_i=G_m(x_i))+e^\alpha\sum_{i=1}^Nw_{mi}I(y_i\not=G_m(x_i)))\\& =min(e^{-a}\sum_{i=1}^Nw_{mi}[1-I(y_i\not=G_m(x_i))]+e^\alpha\sum_{i=1}^Nw_{mi}I(y_i\not=G_m(x_i)))\\& = min((e^\alpha-e^{-\alpha})\sum_{i=1}^Nw_{mi}I(y_i\not=G_m(x_i))+e^{-a}\sum_{i=1}^Nw_{mi}) ,求的最小值:

等价于:

所以有:


等价于:

解得:
,而这个式子又可以化为:
\begin{align} w_{m+1,i}&=e^{-y_if_{m}(x_i)}\\& = e^{-y_i[f_{m-1}(x_i)+\alpha_mG_m(x_i)]}\\& = w_{mi}e^{-y_i\alpha_mG_m(x_i)}\\ ,与AdaBoost算法中的更新公式只差了个规范化因子而已。

8.1.1 AdaBoostClassifier

AdaBoostClassifierscikit-learn提供的AdaBoost分类器,其原型为:
class sklearn.ensemble.AdaBoostClassifier(base_estimator=None, n_estimators=50, learning_rate=1.0, algorithm=’SAMME.R’, random_state=None)


导包
  • from sklearn.ensemble import AdaBoostClassifier
参数
  • base_estimator:是一个基础分类器对象。默认为DecisionTreeClassifier。该基础分类器必须支持带权重的学习。
  • n_estimator:一个整数,指定基础分类器的数量(默认50)。当然如果训练集已经完美地训练好了,可能算法会提前停止。此时基础分类器的数量少于该值。
  • learning_rate:为浮点数。默认为1.它用于每一步的步长,防止步长太大而跨过了极值点。通常learning_rate越小,则需要的基础分类器数量就会越多,因此在learning_rate和n_estimators之间会有所折中。learning_rate为下式中的v。
  • algorithm:一个字符串,指定算法,该算法用于多分类问题,默认为’SAMME.R’。
    • ‘SAMME.R’:使用SAMME.R算法,基础分类器必须支持计算类别的概率。
    • ‘SAMME’:使用SAMME算法。
  • random_state:一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
属性
  • estimators_:所有训练过的基础分类器。
  • classes_:所有类别标签。
  • n_classes_:类别数量。
  • estimator_weights_:每个基础分类器的权重。
  • estimator_errors_:每个基础分类器的分类误差。
  • feature_importances_:每个特征的重要性。
方法
  • fit(X,y):训练模型。
  • predict(X):用模型进行预测,返回预测值。
  • predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。
  • predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值。
  • score(X,y):返回在(X,y)上预测的准确率。
  • staged_predict(X):返回一个数组,数组元素依次是每一轮迭代结束时尚未完成的集成分类器的预测值。
  • staged_predict_proba(X):返回一个二维数组,数组元素依次是每一轮迭代结束时尚未完成的集成分类器预测X为各个类别的概率值。
  • staged_score(X,y):返回一个数组,数组元素依次是每一轮迭代结束时尚未完成的集成分类器的预测准确率。

8.1.2 AdaBoostRegressor

AdaBoostRegressorscikit-learn提供的AdaBoost回归器,其原型为:
class sklearn.ensemble.AdaBoostRegressor(base_estimator=None, n_estimators=50, learning_rate=1.0, loss=’linear’, random_state=None)


导包
  • from sklearn.ensemble import AdaBoostRegressor
参数base_estimator:是一个基础回归器对象。默认为DecisionTreeRegressor。该基础回归器必须支持带权重的学习。
  • n_estimator:一个整数,指定基础回归器的数量(默认50)。当然如果训练集已经完美地训练好了,可能算法会提前停止。此时基础回归器的数量少于该值。
  • learning_rate:为浮点数。默认为1.它用于每一步的步长,防止步长太大而跨过了极值点。通常learning_rate越小,则需要的基础回归器数量就会越多,因此在learning_rate和n_estimators之间会有所折中。learning_rate为下式中的v。
  • loss:一个字符串,指定了损失函数,可以为:
    • ‘linear’:线性损失函数(默认)。
    • ‘square’:平方损失函数。
    • ‘exponential’:指数损失函数。
  • random_state:一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
属性
  • estimators_:所有训练过的基础回归器。
  • estimator_weights_:每个基础回归器的权重。
  • estimator_errors_:每个基础回归器的误差。
  • feature_importances_:每个特征的重要性。
方法
  • fit(X,y):训练模型。
  • predict(X):用模型进行预测,返回预测值。
  • score(X,y):返回性能得分。设预测集为,则:
  • staged_predict(X):返回一个数组,数组元素依次是每一轮迭代结束时尚未完成的集成回归器的预测值。
  • staged_score(X,y):返回一个数组,数组元素依次是每一轮迭代结束时尚未完成的集成回归器的预测准确率。

8.2 Gradient Tree Boosting

8.2.1 GradientBoostingClassifier

GradientBoostingClassifierscikit-learn提供的梯度提升决策树,其原型为:
class sklearn.ensemble.GradientBoostingClassifier(loss=’deviance’, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=’friedman_mse’, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_split=1e-07, init=None, random_state=None, max_features=None, verbose=0, max_leaf_nodes=None, warm_start=False, presort=’auto’)


导包
  • from sklearn.ensemble import GradientBoostingClassifier
参数
  • loss:一个字符串,指定损失函数,可以为:
    • ‘deviance’:此时损失函数为对数损失函数:
    • ‘exponential’:此时使用指数损失函数,注意该损失只能用于二分类
  • n_estimators :一个整数,指定基础决策树的数量(默认为100)。GBDT对过拟合有很好的鲁棒性,因此该值越大越好。
  • learning_rate:为浮点数。默认为1.它用于每一步的步长,防止步长太大而跨过了极值点。通常learning_rate越小,则需要的基础分类器数量就会越多,因此在learning_rate和n_estimators之间会有所折中。learning_rate为下式中的v。
  • max_depth:一个整数或者None,指定每一个基础决策树模型的最大深度。如果max_leaf_noeds不是None,则忽略此参数。
  • criterion:字符串。用来衡量切分的质量。默认为‘friedman_mse’。可以为:
    • ‘friedman_mse’ 改进型的均方误差。
    • ‘mse’:标准的均方误差。
    • ‘mae’:平均绝对误差。
  • min_samples_split:一个整数,指定了每个基础决策树模型分裂所需最小样本数。
  • min_samples_leaf:一个整数,指定了每个基础决策树模型叶节点所包含的最小样本数。
  • min_weight_fraction_leaf:一个浮点数。叶节点的最小加权权重。当不提供sample_weight时,样本的权重是相等的。
  • subsample:一个浮点数,指定了提取原始训练集中的一个子集用于训练基础决策树,该参数就是子集占原始训练集的大小,
  • max_features:一个整数,浮点数或者None。代表节点分裂是参与判断的最大特征数。整数为个数,浮点数为所占比重。
  • max_leaf_nodes:为整数或者None,指定了每个基础决策树模型的最大叶节点数量。
  • min_impurity_split:一个浮点数,指定在树生长的过程中,节点分裂的阈值,默认为1e-7。
  • init:一个基础分类器对象或者None,该分类器对象用于执行初始的预测。如果为None,则使用loss.init_estimator。
  • verbose:一个整数,如果为0则不输出日志,如果为1,则每隔一段时间输出日志,大于1输出日志会更频繁。
  • warm_start:布尔值。当为True是,则继续使用上一次训练结果。否则重新开始训练。
  • random_state:一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
  • presort:一个布尔值或者‘auto’,是否对数据进行显示以加速最佳分割的发现。默认情况下,自动模式将在密集的数据上使用presorting,默认为稀疏数据的正常排序。在稀疏的数据上设置显示值将会导致错误。
属性
  • feature_importance_:一个数组,给出了每个特征的重要性(值越高重要性越大)。
  • oob_improvement_:一个数组,给出了每增加一棵基础决策树,在包外估计(即测试集)的损失函数的改善情况。(及损失函数减少值)。
  • train_score_:一个数组,给出每增加一棵基础决策树,在训练集上的损失函数的值。
  • loss:具体损失函数对象。
  • init:初始预测使用的分类器。
  • estimators_:一个数组,给出了每个基础决策树。
方法
  • fit(X,y):训练模型。
  • predict(X):用模型进行预测,返回预测值。
  • predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。
  • predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值。
  • score(X,y):返回在(X,y)上预测的准确率。
  • staged_predict(X):返回一个数组,数组元素依次是每一轮迭代结束时尚未完成的集成分类器的预测值。
  • staged_predict_proba(X):返回一个二维数组,数组元素依次是每一轮迭代结束时尚未完成的集成分类器预测X为各个类别的概率值。

8.2.2 GradientBoostingRegressor

GradientBoostingRegressorscikit-learn提供的提升树回归模型,其原型为:
class sklearn.ensemble.GradientBoostingRegressor(loss=’ls’, learning_rate=0.1, n_estimators=100, subsample=1.0, criterion=’friedman_mse’, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, min_impurity_split=1e-07, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort=’auto’)


导包
  • from sklearn.ensemble import GradientBoostingRegressor
参数loss:一个字符串,指定损失函数,可以为:
- ‘ls’:此时损失函数为平方损失函数。
- ‘lad’:此时使用指数绝对值损失函数。
- ‘quantile’:分位数回归(分位数指的是百分之几),采用绝对值损失。
- ‘huber’:此时损失函数为上述两者的综合,即误差较小时,采用平方损失,在误差较大时,采用绝对值损失。通过参数的指定比例,该损失函数的定义为:
,,
L_{Huber}= \left{ {\text{12(yf(x))2if|yf(x)|aif|y−f(x)|≤a}\atop

  • alpha:一个浮点数,只有当loss=‘huber’或者loss=‘quantile’时才有效。
  • n_estimators :一个整数,指定基础决策树的数量(默认为100)。GBRT对过拟合有很好的鲁棒性,因此该值越大越好。
  • learning_rate:为浮点数。默认为1.它用于每一步的步长,防止步长太大而跨过了极值点。通常learning_rate越小,则需要的基础回归器数量就会越多,因此在learning_rate和n_estimators之间会有所折中。learning_rate为下式中的v。
  • max_depth:一个整数或者None,指定每一个基础决策树模型的最大深度。如果max_leaf_noeds不是None,则忽略此参数。
  • criterion:字符串。用来衡量切分的质量。默认为‘friedman_mse’。可以为:
    • ‘friedman_mse’ 改进型的均方误差。
    • ‘mse’:标准的均方误差。
    • ‘mae’:平均绝对误差。
  • min_samples_split:一个整数,指定了每个基础决策树模型分裂所需最小样本数。
  • min_samples_leaf:一个整数,指定了每个基础决策树模型叶节点所包含的最小样本数。
  • min_weight_fraction_leaf:一个浮点数。叶节点的最小加权权重。当不提供sample_weight时,样本的权重是相等的。
  • subsample:一个浮点数,指定了提取原始训练集中的一个子集用于训练基础决策树,该参数就是子集占原始训练集的大小,
  • max_features:一个整数,浮点数或者None。代表节点分裂是参与判断的最大特征数。整数为个数,浮点数为所占比重。
  • max_leaf_nodes:为整数或者None,指定了每个基础决策树模型的最大叶节点数量。
  • min_impurity_split:一个浮点数,指定在树生长的过程中,节点分裂的阈值,默认为1e-7。
  • init:一个基础回归器对象或者None,该回归器对象用于执行初始的预测。如果为None,则使用loss.init_estimator。
  • verbose:一个整数,如果为0则不输出日志,如果为1,则每隔一段时间输出日志,大于1输出日志会更频繁。
  • warm_start:布尔值。当为True是,则继续使用上一次训练结果。否则重新开始训练。
  • random_state:一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
  • presort:一个布尔值或者‘auto’,是否对数据进行显示以加速最佳分割的发现。默认情况下,自动模式将在密集的数据上使用presorting,默认为稀疏数据的正常排序。在稀疏的数据上设置显示值将会导致错误。
属性
  • feature_importance_:一个数组,给出了每个特征的重要性(值越高重要性越大)。
  • oob_improvement_:一个数组,给出了每增加一棵基础决策树,在包外估计(即测试集)的损失函数的改善情况。(及损失函数减少值)。
  • train_score_:一个数组,给出每增加一棵基础决策树,在训练集上的损失函数的值。
  • loss:具体损失函数对象。
  • init:初始预测使用的分类器。
  • estimators_:一个数组,给出了每个基础决策树。
方法
  • fit(X,y):训练模型。
  • predict(X):用模型进行预测,返回预测值。
  • predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。
  • predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值。
  • score(X,y):返回性能得分。设预测集为,则:
  • staged_predict(X):返回一个数组,数组元素依次是每一轮迭代结束时尚未完成的集成分类器的预测值。

8.3 Random Forest

8.3.1 RandomForestClassifier

RandomForestClassifierscikit-learn提供的随机森林分类模型,其原型为:
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion=’gini’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=’auto’, max_leaf_nodes=None, min_impurity_split=1e-07, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None)


导包
  • from sklearn.ensemble import RandomForestClassifier
参数
  • n_estimators :一个整数,指定基础决策树的数量(默认为10).
  • max_depth:一个整数或者None,指定每一个基础决策树模型的最大深度。如果max_leaf_noeds不是None,则忽略此参数。
  • criterion:字符串。指定分裂的标准,可以为‘entory’或者‘gini’。
  • min_samples_split:一个整数,指定了每个基础决策树模型分裂所需最小样本数。
  • min_samples_leaf:一个整数,指定了每个基础决策树模型叶节点所包含的最小样本数。
  • min_weight_fraction_leaf:一个浮点数。叶节点的最小加权权重。当不提供sample_weight时,样本的权重是相等的。
  • max_features:一个整数,浮点数或者None。代表节点分裂是参与判断的最大特征数。整数为个数,浮点数为所占比重。
  • max_leaf_nodes:为整数或者None,指定了每个基础决策树模型的最大叶节点数量。
  • bootstrap:为布尔值。如果为True,则使用采样法bootstrap sampling来产生决策树的训练数据。
  • oob_score:为布尔值。如果为True,则使用包外样本来计算泛化误差。
  • n_jobs:一个整数,指定并行性。如果为-1,则表示将训练和预测任务派发到所有CPU上。
  • verbose:一个整数,如果为0则不输出日志,如果为1,则每隔一段时间输出日志,大于1输出日志会更频繁。
  • warm_start:布尔值。当为True是,则继续使用上一次训练结果。否则重新开始训练。
  • random_state:一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
  • class_weight:一个字典,或者字典的列表,或者字符串‘balanced’,或者字符串‘balanced_subsample’,或者为None。
    • 如果为字典,则字典给出每个分类的权重,如{class_label:weight}
    • 如果为字符串‘balanced’,则每个分类的权重与该分类在样本集合中出现的频率成反比。
    • 如果为字符串‘balanced_subsample’,则样本为采样法bootstrap sampling产生的决策树的训练数据,每个分类的权重与该分类在样本集合中出现的频率成反比。
    • 如果为None,则每个分类的权重都为1。
属性
  • estimators_:一个数组,存放所有训练过的决策树。
  • classes_:一个数组,形状为[n_classes],为类别标签。
  • n_classes_:一个整数,为类别数量。
  • n_features_:一个整数,在训练时使用的特征数量。
  • n_outputs_:一个整数,在训练时输出的数量。
  • feature_importances_:一个数组,形状为[n_features]。如果base_estimator支持,则他给出每个特征的重要性。
  • oob_score_:一个浮点数,训练数据使用包外估计时的得分。
方法
  • fit(X,y):训练模型。
    • predict(X):用模型进行预测,返回预测值。
    • predict_log_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率的对数值。
    • predict_proba(X):返回一个数组,数组的元素依次是X预测为各个类别的概率值。
    • score(X,y):返回在(X,y)上预测的准确度。

8.3.2 RandomForestRegressor

RandomForestRegressorscikit-learn提供的随机森林回归模型,其原型为:
class 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_features=’auto’, max_leaf_nodes=None, min_impurity_split=1e-07, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False)


导包
  • from sklearn.ensemble import RandomForestRegressor
参数
  • n_estimators :一个整数,指定基础决策树的数量(默认为10).
  • max_depth:一个整数或者None,指定每一个基础决策树模型的最大深度。如果max_leaf_noeds不是None,则忽略此参数。
  • criterion:字符串。指定分裂的标准,可以为‘entory’或者‘gini’。
  • min_samples_split:一个整数,指定了每个基础决策树模型分裂所需最小样本数。
  • min_samples_leaf:一个整数,指定了每个基础决策树模型叶节点所包含的最小样本数。
  • min_weight_fraction_leaf:一个浮点数。叶节点的最小加权权重。当不提供sample_weight时,样本的权重是相等的。
  • max_features:一个整数,浮点数或者None。代表节点分裂是参与判断的最大特征数。整数为个数,浮点数为所占比重。
  • max_leaf_nodes:为整数或者None,指定了每个基础决策树模型的最大叶节点数量。
  • bootstrap:为布尔值。如果为True,则使用采样法bootstrap sampling来产生决策树的训练数据。
  • oob_score:为布尔值。如果为True,则使用包外样本来计算泛化误差。
  • n_jobs:一个整数,指定并行性。如果为-1,则表示将训练和预测任务派发到所有CPU上。
  • verbose:一个整数,如果为0则不输出日志,如果为1,则每隔一段时间输出日志,大于1输出日志会更频繁。
  • warm_start:布尔值。当为True是,则继续使用上一次训练结果。否则重新开始训练。
  • random_state:一个整数或者一个RandomState实例,或者None。
    • 如果为整数,指定随机数生成器的种子。
    • 如果为RandomState,指定随机数生成器。
    • 如果为None,指定使用默认的随机数生成器。
属性
  • estimators_:一个数组,存放所有训练过的决策树。
  • oob_prediction_:一个数组,训练数据使用包外估计时的预测值。
  • n_features_:一个整数,在训练时使用的特征数量。
  • n_outputs_:一个整数,在训练时输出的数量。
  • feature_importances_:一个数组,形状为[n_features]。如果base_estimator支持,则他给出每个特征的重要性。
  • oob_score_:一个浮点数,训练数据使用包外估计时的得分。
方法
  • fit(X,y):训练模型。
    • predict(X):用模型进行预测,返回预测值。
    • score(X,y):返回性能得分。设预测集为,则:

参考书籍

1 《统计学习方法》李航
2 《机器学习》周志华
3 《python大战机器学习》华校专,王正林
4 scikit-learn.org官方API文档