这篇文档只对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 | #导入kNN |
决策树(sklearn.tree)
分类树(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_featuresrandom_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
是否提前排序。回归树(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 | #分别导入分类树和回归树 |
朴素贝叶斯(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越大,正则化系数越小,一般设置它小于1fit_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 | from sklearn.linear_model import LogisticRegression |
支持向量机(SVM)(sklearn.svm)
sklearn中的SVM模块既可用于分类问题(SVC),也可以用于回归问题(SVR)。
用于分类问题(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方法,默认为trueprobability=False
tol=0.001
停止训练的误差值大小,默认为1e-3cache_size=200
核函数cache缓存大小,默认为200class_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。用于回归问题(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 | from sklearn.svm import SVC #分类 |
(完)