0%

sklearn入门-监督学习

这篇文档只对sklearn关于几种基本的监督学习算法进行简单的阐述汇总,不涉及参数详细含义。
在本文代码块中,定义模型的括号内为一般需要调整的参数(给出的为原始值)。

k近邻算法(kNN)(sklearn.neighbors.KNeighborsClassifier)

KNeighborsClassifier(n_neighbors=5, weights=’uniform’, algorithm=’auto’, leaf_size=30, p=2, metric=’minkowski’, metric_params=None, n_jobs=None, **kwargs)
n_neighbors=5 分类数目,这个参数一般都要自己设置啊啊啊。
weights='uniform' 权重,默认为’uniform’类别中的所有点权重相同。支持’distance’,此时权重时距离的倒数,离分类点越近,权重越大;也可传入一个自己定义的函数名,要求接受一个距离数组,并返回一个包含权重的相同形状的数组。
algorithm='auto' 用于计算最近分类点的算法,默认’auto’尝试根据传递给fit方法的值来确定最合适的算法。其他:’ball_tree’将使用BallTree,’kd_tree’将使用KDTree,’brute’将使用暴力搜索。
leaf_size=30 传递给BallTree或KDTree的叶子大小。 这可能会影响构造和查询的速度,以及存储树所需的内存。 最佳值取决于问题的性质。
p=2 整数。Minkowski距离度量的参数。 当p = 1:曼哈顿距离(L1);p = 2:欧几里得距离(L2)。对于任意p,使用minkowski_distance(Lp)。
metric='minkowski 距离度量函数。
metric_params=None 度量函数的其他关键字参数
n_job=None 并行作业数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#导入kNN
from sklearn.neighbors import KNeighborsClassifier

"""
以下四步即为sklearn用于
模型训练,数据预测,模型评估
的一般基本使用方法
"""
#定义模型
kNN_model = DescisionTreeClassifier(n_neighbors=5)
#训练模型
kNN_model.fit(X_train, y_train)
#使用训练好的模型进行预测
y_predict = kNN_model.predic(X_test)
#使用测试集对模型进行评分
kNN_score = kNN_model.score(y_test, y_predict)

决策树(sklearn.tree)

  1. 分类树(sklearn.tree.DecisionTreeClassifier)

    DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)
    criterion='gini' 特征选择标准。’gini’: 基尼指数,’entropy’: 信息增益
    splitter='best' 每个节点选择如何分类的策略。’best’/‘random’
    max_depth=None 最大深度(深度小可提高泛化能力,避免过拟合)
    min_samples_split=2 拆分内部节点所需的最小样本数。int(个数)/float(比例)
    min_samples_leaf=1 每一个叶子节点的最小样本数。
    min_wight_fraction_leaf=0.0 每一个叶子节点的最小样本权重和,小于该值会被剪枝。
    max_faetures=None 寻找最佳分类特征时考虑的分类数量。’auto’/‘sqrt’: sqrt(n_features); ‘log2’:log2(n_features); None:n_features
    random_state=None 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random。
    max_leaf_nodes=None 最大叶子节点数,防止过拟合
    min_impurity_decrease=0.0 如果该分裂导致不纯度的减少大于或等于该值,则将分裂节点。
    min_impurity_split=None 树提前停止生成的阈值,若某节点的不纯度小于/等于该值,停止分裂
    class_weight=None 指定样本各类别的的权重,防止训练集某些类别的样本过多,导致训练的决策树过于偏向这些类别。可以自己指定各个样本的权重,或者用“balanced”,如果使用“balanced”,则算法会自己计算权重,样本量少的类别所对应的样本权重会高。如果样本类别分布没有明显的偏倚,可以不管这个参数,选择默认的”None”。{class_label: weight}
    presort=False 是否提前排序。

  2. 回归树(sklearn.tree.DecisionTreeRegressor)

    DecisionTreeRegressor(criterion=’mse’,splitter=’best’,max_depth=None,min_samples_split=2,min_samples_leaf=1,min_weight_fraction_leaf=0.0,max_features=None,random_state=None,max_leaf_nodes=None,min_impurity_decrease=0.0,min_impurity_split=None, presort=False)
    criterion='mse' 误差计算。 ‘mse’: 均方误差,’friedman_mse’: L2,’mae’: L1
    (其余同上)

1
2
3
4
5
6
7
#分别导入分类树和回归树
from sklearn.tree import DecisionTreeClassifier
from sklearn.tree import DecisionTreeRegressor
#定义模型
DTC_model = DescisionTreeClassifier(max_depth=None, random_state=None)
DTR_model = DescisionTreeRegressor(max_depth=None, random_state=None)
......

朴素贝叶斯(sklearn.naive_bayes)

高斯模型:GaussianNB(priors=None, var_smoothing=1e-09),适用于连续值。
伯努利模型:BernoulliNB(alpha=1.0, binarize=0.0, fit_prior=True, class_prior=None),适用于离散值。
多项式模型:MultinomialNB(alpha=1.0, fit_prior=True, class_prior=None),适用于离散值。

priors=None 类的先验概率
var_smoothing=1e-09 为使计算稳定添加的特征最大方差的部分(?)
alpha=1.0 平滑参数
binarize=0.0 样本特征的二值化(映射到布尔值)的阈值。 如果为None,则假定输入已包含二进制向量。
fit_prior=True 是否学习先验概率
class_prior=None 类的先验概率
(目前这几种模型,不调参,对这些参数的理解还不够清晰透彻)

线性回归(sklearn.linear_model.LinearRegression)

线性回归主要用于对连续值的预测。该模块在未对样本进行特别处理时,只能对数据进行简单的线性拟合,但配合其他一些数据处理模块却能够进行更复杂的曲线拟合等,此处暂不过多介绍。

LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None)
fit_intercept=True 训练时是否考虑截距。 如果设置为False,则不会在计算中使用截距(e.g. 预计数据已经居中)。
normalize=False 当fit_intercept设置为False时,将忽略此参数。 如果为True,则回归量X将在回归之前通过减去平均值并除以L2范数来归一化。
copy_X=True 如果为True,则将复制X; 否则,它可能会被覆盖。
n_jobs=None 并行作业数。

逻辑回归(sklearn.linear_model.LogisticRegression)

逻辑回归用于处理二分类问题,多个分类器组合也可用于多分类问题。在应用于多分类问题时,需要softmax(其实我觉着也可以不需要,直接选值最高的就行,不过处理之后可以让不同类的预测值为1,近似于概率)。

LogisticRegression(penalty=’l2’, dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver=’warn’, max_iter=100, multi_class=’warn’, verbose=0, warm_start=False, n_jobs=None)
penaity='l2' 用于指定惩罚项(正则项)。’l2’(默认)或者’l1’,L2很好用,一般别动它
dual=False 对偶或者原始方法。Dual只适用于正则化相为l2 liblinear的情况,通常样本数大于特征数的情况下,默认为False。
tol=0.0001 停止训练的误差值大小。
C=1 C为正则化系数λ的倒数,通常默认为1。C越大,正则化系数越小,一般设置它小于1
fit_intercept=True 是否存在截距,默认存在
intercept_scaling=1 仅在正则化项为”liblinear”,且fit_intercept设置为True时有用。
class_weight=None 类的权重。dict / ‘balanced’
random_state=None 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random。
solver='warn' str, {‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}.默认:’liblinear’
其中,’liblinear’: 适用于小数据集,仅可用于二元分类。<’newton-cg’: ‘lbfgs’: ‘liblinear’: ‘sag’: ‘saga’:>
max_iter='100' 求解器收敛的最大迭代次数。仅适用于newton-cg,sag和lbfgs求解器。
multi_class='warn' str,{‘ovr’,’multinomial’,’auto’},默认值:’ovr’。
verbose=0 对于liblinear和lbfgs求解器,将详细设置为任何正数以表示详细程度。
warm_start=False 设置为True时,重用上一次调用的解决方案以适合初始化,否则,只需擦除以前的解决方案。对于liblinear解算器无效。
n_jobs=None 并行作业数。

1
2
3
4
from sklearn.linear_model import LogisticRegression
#定义模型及常用参数
RL_model = LogisticRegression(C=1, randomstate=None)
......

支持向量机(SVM)(sklearn.svm)

sklearn中的SVM模块既可用于分类问题(SVC),也可以用于回归问题(SVR)。

  1. 用于分类问题(sklearn.svm.SVC)

    SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)
    C=1.0 正则项系数的倒数
    kernel='rbf' 算法使用的核函数。必须是’linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’之一或者可传入对象
    degree=3 多项式核函数的次数(‘poly’)。对其余核函数忽略
    gamma=’auto_deprecated’ ‘rbf’,’poly’ 和’sigmoid’的核函数参数。默认是’auto’,会选择1/n_features。
    coef0=0.0 核函数的常数项。对于’poly’和’sigmoid’有校。
    shrinking=True 是否采用shrinking heuristic方法,默认为true
    probability=False
    tol=0.001 停止训练的误差值大小,默认为1e-3
    cache_size=200 核函数cache缓存大小,默认为200
    class_weight=None 类别的权重,字典形式传递。
    verbose=False 是否允许冗余输出。
    max_iter=-1 最大迭代次数。-1为无限制。
    decision_function_shape=’ovr’ ‘ovo’ / ‘ovr’
    random_state=None 如果是int,则random_state是随机数生成器使用的种子; 如果是RandomState实例,则random_state是随机数生成器; 如果为None,则随机数生成器是np.random。

  2. 用于回归问题(sklearn.svm.SVR)

    SVR(kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, tol=0.001, C=1.0, epsilon=0.1, shrinking=True, cache_size=200, verbose=False, max_iter=-1)
    epsilon=0.1 Epsilon in the epsilon-SVR model. It specifies the epsilon-tube within which no penalty is associated in the training loss function with points predicted within a distance epsilon from the actual value.
    (其余同上)

1
2
3
4
5
from sklearn.svm import SVC    #分类
from sklearn.svm import SVR #回归

svc_model = SVC(C=1.0, kernel='rbf', degree=3, random_state=None)
svr_model = SVR(kernal='rbf', C=1)

(完)