sklearn是机器学习领域中最知名的python模块之一,若要学习机器学习与人工智能,必绕不开sklearn,网上有很多关于sklearn的学习教程,但最好的教程就是官方文档(http://scikit-learn.org/stable/),其中sklearn库官方文档结构中有很多模块:
Install:安装指导,不同版本安装包,包依赖的版本。
User Guide(用户指南):这里对每一个算法有详细的介绍
API:这里是库调用的方法
Examples:是一个官方教程,可以快速上手教程,里面有很多demo。
More:更多功能:Getting Started,FAQ,Support,Tutorials,Github,What's new。
官方文档 上的一张图能很好展示了sklearn的结构:
由图中,可以看到库的算法主要有四类:分类,回归,聚类,降维。
常用的回归:线性、决策树、SVM、KNN ;集成回归:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
常用的分类:线性、决策树、SVM、KNN,朴素贝叶斯;集成分类:随机森林、Adaboost、GradientBoosting、Bagging、ExtraTrees。
常用聚类:k均值(K-means)、层次聚类(Hierarchical clustering)、DBSCAN。
常用降维:LinearDiscriminantAnalysis、PCA。
目录
分类、回归
降维
模型评估与选择
数据预处理
大类 | 小类 | 适用问题 | 实现 | 说明 |
---|---|---|---|---|
分类、回归 | ||||
1.1 广义线性模型 | 1.1.1 普通最小二乘法 | 回归 | sklearn.linear_model.LinearRegression | |
注:本节中所有的回归模型皆为线性回归模型 | 1.1.2 Ridge/岭回归 | 回归 | sklearn.linear_model.Ridge | 解决两类回归问题: 一是样本少于变量个数 二是变量间存在共线性 |
1.1.3 Lasso | 回归 | sklearn.linear_model.Lasso | 适合特征较少的数据 | |
1.1.4 Multi-task Lasso | 回归 | sklearn.linear_model.MultiTaskLasso | y值不是一元的回归问题 | |
1.1.5 Elastic Net | 回归 | sklearn.linear_model.ElasticNet | 结合了Ridge和Lasso | |
1.1.6 Multi-task Elastic Net | 回归 | sklearn.linear_model.MultiTaskElasticNet | y值不是一元的回归问题 | |
1.1.7 Least Angle Regression(LARS) | 回归 | sklearn.linear_model.Lars | 适合高维数据 | |
1.1.8 LARS Lasso | 回归 | sklearn.linear_model.LassoLars | (1)适合高维数据使用 (2)LARS算法实现的lasso模型 |
|
1.1.9 Orthogonal Matching Pursuit (OMP) | 回归 | sklearn.linear_model.OrthogonalMatchingPursuit | 基于贪心算法实现 | |
1.1.10 贝叶斯回归 | 回归 | sklearn.linear_model.BayesianRidge sklearn.linear_model.ARDRegression |
优点: (1)适用于手边数据(2)可用于在估计过程中包含正规化参数 缺点:耗时 |
|
1.1.11 Logistic regression | 分类 | sklearn.linear_model.LogisticRegression | ||
1.1.12 SGD(随机梯度下降法) | 分类 /回归 |
sklearn.linear_model.SGDClassifier sklearn.linear_model.SGDRegressor |
适用于大规模数据 | |
1.1.13 Perceptron | 分类 | sklearn.linear_model.Perceptron | 适用于大规模数据 | |
1.1.14 Passive Aggressive Algorithms | 分类 /回归 |
sklearn.linear_model. PassiveAggressiveClassifier sklearn.linear_model. PassiveAggressiveRegressor |
适用于大规模数据 | |
1.1.15 Huber Regression | 回归 | sklearn.linear_model.HuberRegressor | 能够处理数据中有异常值的情况 | |
1.1.16 多项式回归 | 回归 | sklearn.preprocessing.PolynomialFeatures | 通过PolynomialFeatures将非线性特征转化成多项式形式,再用线性模型进行处理 | |
1.2 线性和二次判别分析 | 1.2.1 LDA | 分类/降维 | sklearn.discriminant_analysis. LinearDiscriminantAnalysis |
|
1.2.2 QDA | 分类 | sklearn.discriminant_analysis. QuadraticDiscriminantAnalysis |
||
1.3 核岭回归 | 简称KRR | 回归 | sklearn.kernel_ridge.KernelRidge | 将核技巧应用到岭回归(1.1.2)中,以实现非线性回归 |
1.4 支持向量机 | 1.4.1 SVC,NuSVC,LinearSVC | 分类 | sklearn.svm.SVC sklearn.svm.NuSVC sklearn.svm.LinearSVC |
SVC可用于非线性分类,可指定核函数; NuSVC与SVC唯一的不同是可控制支持向量的个数; LinearSVC用于线性分类 |
1.4.2 SVR,NuSVR,LinearSVR | 回归 | sklearn.svm.SVR sklearn.svm.NuSVR sklearn.svm.LinearSVR |
同上,将"分类"变成"回归"即可 | |
1.4.3 OneClassSVM | 异常检测 | sklearn.svm.OneClassSVM | 无监督实现异常值检测 | |
1.5 随机梯度下降 | 同1.1.12 | |||
1.6 最近邻 | 1.6.1 Unsupervised Nearest Neighbors | -- | sklearn.neighbors.NearestNeighbors | 无监督实现K近邻的寻找 |
1.6.2 Nearest Neighbors Classification | 分类 | sklearn.neighbors.KNeighborsClassifier sklearn.neighbors.RadiusNeighborsClassifier |
(1)不太适用于高维数据 (2)两种实现只是距离度量不一样,后者更适合非均匀的采样 |
|
1.6.3 Nearest Neighbors Regression | 回归 | sklearn.neighbors.KNeighborsRegressor sklearn.neighbors.RadiusNeighborsRegressor |
同上 | |
1.6.5 Nearest Centroid Classifier | 分类 | sklearn.neighbors.NearestCentroid | 每个类对应一个质心,测试样本被分类到距离最近的质心所在的类别 | |
1.7 高斯过程(GP/GPML) | 1.7.1 GPR | 回归 | sklearn.gaussian_process. GaussianProcessRegressor |
与KRR一样使用了核技巧 |
1.7.3 GPC | 分类 | sklearn.gaussian_process. GaussianProcessClassifier |
||
1.8 交叉分解 | 实现算法:CCA和PLS | -- | -- | 用来计算两个多元数据集的线性关系,当预测数据比观测数据有更多的变量时,用PLS更好 |
1.9 朴素贝叶斯 | 1.9.1 高斯朴素贝叶斯 | 分类 | sklearn.naive_bayes.GaussianNB | 处理特征是连续型变量的情况 |
1.9.2 多项式朴素贝叶斯 | 分类 | sklearn.naive_bayes.MultinomialNB | 最常见,要求特征是离散数据 | |
1.9.3 伯努利朴素贝叶斯 | 分类 | sklearn.naive_bayes.BernoulliNB | 要求特征是离散的,且为布尔类型,即true和false,或者1和0 | |
1.10 决策树 | 1.10.1 Classification | 分类 | sklearn.tree.DecisionTreeClassifier | |
1.10.2 Regression | 回归 | sklearn.tree.DecisionTreeRegressor | ||
1.11 集成方法 | 1.11.1 Bagging | 分类/回归 | sklearn.ensemble.BaggingClassifier sklearn.ensemble.BaggingRegressor |
可以指定基学习器,默认为决策树 |
注:1和2属于集成方法中的并行化方法,3和4属于序列化方法 | 1.11.2 Forests of randomized trees | 分类/回归 | RandomForest(RF,随机森林): sklearn.ensemble.RandomForestClassifier sklearn.ensemble.RandomForestRegressor ExtraTrees(RF改进): sklearn.ensemble.ExtraTreesClassifier sklearn.ensemble.ExtraTreesRegressor |
基学习器为决策树 |
1.11.3 AdaBoost | 分类/回归 | sklearn.ensemble.AdaBoostClassifier sklearn.ensemble.AdaBoostRegressor |
可以指定基学习器,默认为决策树 | |
号外:最近特别火的两个梯度提升算法,LightGBM和XGBoost (XGBoost提供了sklearn接口) |
1.11.4 Gradient Tree Boosting | 分类/回归 | GBDT: sklearn.ensemble.GradientBoostingClassifier GBRT: sklearn.ensemble.GradientBoostingRegressor |
基学习器为决策树 |
1.11.5 Voting Classifier | 分类 | sklearn.ensemble.VotingClassifier | 须指定基学习器 | |
1.12 多类与多标签算法 | -- | -- | -- | sklearn中的分类算法都默认支持多类分类,其中LinearSVC、 LogisticRegression和GaussianProcessClassifier在进行多类分类时需指定参数multi_class |
1.13 特征选择 | 1.13.1 过滤法之方差选择法 | 特征选择 | sklearn.feature_selection.VarianceThreshold | 特征选择方法分为3种:过滤法、包裹法和嵌入法。过滤法不用考虑后续学习器 |
1.13.2 过滤法之卡方检验 | 特征选择 | sklearn.feature_selection.chi2,结合sklearn.feature_selection.SelectKBest | ||
1.13.3 包裹法之递归特征消除法 | 特征选择 | sklearn.feature_selection.RFE | 包裹法需考虑后续学习器,参数中需输入基学习器 | |
1.13.4 嵌入法 | 特征选择 | sklearn.feature_selection.SelectFromModel | 嵌入法是过滤法和嵌入法的结合,参数中也需输入基学习器 | |
1.14 半监督 | 1.14.1 Label Propagation | 分类/回归 | sklearn.semi_supervised.LabelPropagation sklearn.semi_supervised.LabelSpreading |
|
1.15 保序回归 | -- | 回归 | sklearn.isotonic.IsotonicRegression | |
1.16 概率校准 | -- | -- | -- | 在执行分类时,获得预测的标签的概率 |
1.17 神经网络模型 | (待写) | |||
降维 | ||||
2.5 降维 | 2.5.1 主成分分析 | 降维 | PCA: sklearn.decomposition.PCA IPCA: sklearn.decomposition.IncrementalPCA KPCA: sklearn.decomposition.KernelPCA SPCA: sklearn.decomposition.SparsePCA |
(1)IPCA比PCA有更好的内存效率,适合超大规模降维。 (2)KPCA可以进行非线性降维 (3)SPCA是PCA的变体,降维后返回最佳的稀疏矩阵 |
2.5.2 截断奇异值分解 | 降维 | sklearn.decomposition.TruncatedSVD | 可以直接对scipy.sparse矩阵处理 | |
2.5.3 字典学习 | -- | sklearn.decomposition.SparseCoder sklearn.decomposition.DictionaryLearning |
SparseCoder实现稀疏编码,DictionaryLearning实现字典学习 | |
模型评估与选择 | ||||
3.1 交叉验证/CV | 3.1.1 分割训练集和测试集 | -- | sklearn.model_selection.train_test_split | |
3.1.2 通过交叉验证评估score | -- | sklearn.model_selection.cross_val_score | score对应性能度量,分类问题默认为accuracy_score,回归问题默认为r2_score | |
3.1.3 留一法LOO | -- | sklearn.model_selection.LeaveOneOut | CV的特例 | |
3.1.4 留P法LPO | -- | sklearn.model_selection.LeavePOut | CV的特例 | |
3.2 调参 | 3.2.1 网格搜索 | -- | sklearn.model_selection.GridSearchCV | 最常用的调参方法。可传入学习器、学习器参数范围、性能度量score(默认为accuracy_score或r2_score )等 |
3.2.2 随机搜索 | -- | sklearn.model_selection.RandomizedSearchCV | 参数传入同上 | |
3.3 性能度量 | 3.3.1 分类度量 | -- | -- | 对应交叉验证和调参中的score |
3.3.2 回归度量 | -- | -- | ||
3.3.3 聚类度量 | -- | -- | ||
3.4 模型持久性 | -- | -- | -- | 使用pickle存放模型,可以使模型不用重复训练 |
3.5 验证曲线 | 3.5.1 验证曲线 | -- | sklearn.model_selection.validation_curve | 横轴为某个参数的值,纵轴为模型得分 |
3.5.2 学习曲线 | -- | sklearn.model_selection.learning_curve | 横轴为训练数据大小,纵轴为模型得分 | |
数据预处理 | ||||
4.3 数据预处理 | 4.3.1 标准化 | 数据预处理 | 标准化: sklearn.preprocessing.scale sklearn.preprocessing.StandardScaler |
scale与StandardScaler都是将将特征转化成标准正态分布(即均值为0,方差为1),且都可以处理scipy.sparse矩阵,但一般选择后者 |
数据预处理 | 区间缩放: sklearn.preprocessing.MinMaxScaler sklearn.preprocessing.MaxAbsScale |
MinMaxScaler默认为0-1缩放,MaxAbsScaler可以处理scipy.sparse矩阵 | ||
4.3.2 非线性转换 | 数据预处理 | sklearn.preprocessing.QuantileTransformer | 可以更少的受异常值的影响 | |
4.3.3 归一化 | 数据预处理 | sklearn.preprocessing.Normalizer | 将行向量转换为单位向量,目的在于样本向量在点乘运算或其他核函数计算相似性时,拥有统一的标准 | |
4.3.4 二值化 | 数据预处理 | sklearn.preprocessing.Binarizer | 通过设置阈值对定量特征处理,获取布尔值 | |
4.3.5 哑编码 | 数据预处理 | sklearn.preprocessing.OneHotEncoder | 对定性特征编码。也可用pandas.get_dummies实现 | |
4.3.6 缺失值计算 | 数据预处理 | sklearn.preprocessing.Imputer | 可用三种方式填充缺失值,均值(默认)、中位数和众数。也可用pandas.fillna实现 | |
4.3.7 多项式转换 | 数据预处理 | sklearn.preprocessing.PolynomialFeatures | ||
4.3.8 自定义转换 | 数据预处理 | sklearn.preprocessing.FunctionTransformer | ||