sklearn使用技巧
sklearn上面对自己api的解释已经做的淋漓尽致,但对于只需要短时间入手的同学来说,还是比较复杂的,下面将会列举sklearn的使用技巧。
预处理
主要在sklearn.preprcessing包下。
规范化:
-
MinMaxScaler :最大最小值规范化
-
Normalizer :使每条数据各特征值的和为1
-
StandardScaler :为使各特征的均值为0,方差为1
编码:
-
LabelEncoder :把字符串类型的数据转化为整型
-
OneHotEncoder :特征用一个二进制数字来表示
-
Binarizer :为将数值型特征的二值化
-
MultiLabelBinarizer:多标签二值化
特征抽取
包:sklearn.feature_extraction特征抽取是数据挖掘任务最为重要的一个环节,一般而言,它对最终结果的影响要高过数据挖掘算法本身。只有先把现实用特征表示出来,才能借助数据挖掘的力量找到问题的答案。特征选择的另一个优点在于:降低真实世界的复杂度,模型比现实更容易操纵。一般最常使用的特征抽取技术都是高度针对具体领域的,对于特定的领域,如图像处理,在过去一段时间已经开发了各种特征抽取的技术,但这些技术在其他领域的应用却非常有限。
-
DictVectorizer: 将dict类型的list数据,转换成numpy array
-
FeatureHasher : 特征哈希,相当于一种降维技巧
-
image:图像相关的特征抽取
-
text: 文本相关的特征抽取
-
text.CountVectorizer:将文本转换为每个词出现的个数的向量
-
text.TfidfVectorizer:将文本转换为tfidf值的向量
-
text.HashingVectorizer:文本的特征哈希
特征选择
包:sklearn.feature_selection特征选择的原因如下:(1)降低复杂度(2)降低噪音(3)增加模型可读性
-
VarianceThreshold: 删除特征值的方差达不到最低标准的特征
-
SelectKBest: 返回k个最佳特征
-
SelectPercentile: 返回表现最佳的前r%个特征
单个特征和某一类别之间相关性的计算方法有很多。最常用的有卡方检验(χ2)。其他方法还有互信息和信息熵。
chi2: 卡方检验(χ2)
降维
包:sklearn.decomposition
PCA:主成分分析算法(Principal Component Analysis, PCA)的目的是找到能用较少信息描述数据集的特征组合。它意在发现彼此之间没有相关性、能够描述数据集的特征,确切说这些特征的方差跟整体方差没有多大差距,这样的特征也被称为主成分。这也就意味着,借助这种方法,就能通过更少的特征捕获到数据集的大部分信息。
TruncatedSVD:通过奇异值分解(SVD)执行线性降维。与PCA相反,该估计器在计算奇异值分解之前不会使数据居中。这意味着它可以有效地使用scipy.sparse矩阵,常用于LSA。
KernelPCA:核主成分分析(KPCA)通过使用内核减少非线性维度。
模型评估
包:sklearn.metricssklearn.metrics包含评分方法、性能度量、成对度量和距离计算。分类结果度量参数大多是y_true和y_pred。
-
accuracy_score:分类准确度
-
condusion_matrix :分类混淆矩阵
-
classification_report:分类报告
-
precision_recall_fscore_support:计算精确度、召回率、f1
-
jaccard_similarity_score:计算jcaard相似度
-
hamming_loss:计算汉明损失
-
zero_one_loss:0-1损失
-
hinge_loss:计算hinge损失
-
log_loss:计算log损失
回归结果度量
-
explained_varicance_score:可解释方差的回归评分函数
-
mean_absolute_error:平均绝对误差
-
mean_squared_error:平均平方误差
多标签的度量
-
coverage_error:涵盖误差
-
label_ranking_average_precision_score:计算基于排名的平均误差 (LRAP)
聚类的度量
-
adjusted_mutual_info_score:调整的互信息评分
-
silhouette_score:所有样本的轮廓系数的平均值
-
silhouette_sample:所有样本的轮廓系数
交叉验证
包:sklearn.model_selection
-
KFold:K-Fold交叉验证迭代器。接收元素个数、fold数、是否清洗
-
LeaveOneOut:LeaveOneOut交叉验证迭代器
-
LeavePOut:LeavePOut交叉验证迭代器
-
LeaveOneLableOut:LeaveOneLableOut交叉验证迭代器
-
LeavePLabelOut:LeavePLabelOut交叉验证迭代器
-
LeaveOneOut(n) 相当于 KFold(n, n_folds=n) 相当于LeavePOut(n, p=1)。
LeaveP和LeaveOne差别在于leave的个数,也就是测试集的尺寸。LeavePLabel和LeaveOneLabel差别在于leave的Label的种类的个数。LeavePLabel这种设计是针对可能存在第三方的Label,比如我们的数据是一些季度的数据。
-
train_test_split:分离训练集和测试集(不是K-Fold)
-
cross_val_score:交叉验证评分,可以指认cv为上面的类的实例
-
cross_val_predict:交叉验证的预测。
网格搜索
包:sklearn.grid_search网格搜索最佳参数
-
GridSearchCV:搜索指定参数网格中的最佳参数
-
ParameterGrid:参数网格
-
ParameterSampler:用给定分布生成参数的生成器
-
RandomizedSearchCV:超参的随机搜索
通过best_estimator_.get_params()方法,获取最佳参数。
多分类、多标签分类
包:sklearn.multiclass
-
OneVsRestClassifier:1-rest多分类(多标签)策略
-
OneVsOneClassifier:1-1多分类策略
-
OutputCodeClassifier:1个类用一个二进制码表示
朴素贝叶斯(Naive Bayes)
包:sklearn.naive_bayes
朴素贝叶斯的特点是分类速度快,分类效果不一定是最好的。
-
GasussianNB:高斯分布的朴素贝叶斯
-
MultinomialNB:多项式分布的朴素贝叶斯
-
BernoulliNB:伯努利分布的朴素贝叶斯
所谓使用什么分布的朴素贝叶斯,就是假设P(x_i|y)是符合哪一种分布,比如可以假设其服从高斯分布,然后用最大似然法估计高斯分布的参数。
回归模型(Linear Model)
包:sklearn.linear_model
回归算法中算法(函数)的最终结果是一个连续的数据值,输入值(属性值)是一个d维度的属性/数值向量
-
LinearRegression:普通最小二乘线性回归。
-
ElasticNet:将L1和L2组合作为正则化器的线性回归。
-
Lasso:使用L1作为正则化器(也称为Lasso)训练的线性模型
-
Ridge:具有l2正则化的线性最小二乘法。
所谓使用什么分布的朴素贝叶斯,就是假设P(x_i|y)是符合哪一种分布,比如可以假设其服从高斯分布,然后用最大似然法估计高斯分布的参数。
集成学习(Ensemble Methods)
包:sklearn.ensemble
集成学习的思想是将若干个学习器(分类器&回归器)组合之后产生一个新学习器。弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < 0.5);
-
AdaBoostClassifier(Regressor)算法会为每个样本赋予一个权重,每次用训练好的学习器标注/预测各个样本,如果某个样本点被预测的越正确,则将其权重降低;否则提高样本的权重。
-
ExtraTreesClassifier(Regressor)Extra Tree会随机的选择一个特征值来划分决策树
-
GradientBoostingClassifier(Regressor) ;GBDT也是迭代,但是GBDT要求弱学习器必须是CART模型,而且GBDT在模型训练的时候,是要求模型预测的样本损失尽可能的小。
-
IsolationForest 异常点检测
-
RandomForestClassifier RF算法在实际应用中具有比较好的特性,应用也比较广泛分类
-
RandomForestRegressor 回归
KNN(K近邻)
包:sklearn.neighbors
K近邻(K-nearst neighbors, KNN)是一种基本的机器学习算法,所谓k近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表。比如:判断一个人的人品,只需要观察与他来往最密切的几个人的人品好坏就可以得出,即“近朱者赤,近墨者黑”;KNN算法既可以应用于分类应用中,也可以应用在回归应用中。
-
KNeighborsClassifier实现k近邻投票的分类器。
-
KNeighborsRegressor基于k-最近邻居的回归。通过与训练集中的最近邻居相关联的目标的局部插值来预测目标。
-
KDTree KDTree用于快速广义N点问题
Decision Trees(决策树)
包:sklearn.tree
决策树(Decision Tree)是在已知各种情况发生概率的基础上,通过构建决策树来进行分析的一种方式,是一种直观应用概率分析的一种图解法;决策树是一种预测模型,代表的是对象属性与对象值之间的映射关系;决策树是一种树形结构,其中每个内部节点表示一个属性的测试,每个分支表示一个测试输出,每个叶节点代表一种类别;决策树是一种非常常用的有监督的分类算法
-
DecisionTreeClassifier(Regressor)决策树分类器。
决策树分为两大类:分类树和回归树,前者用于分类标签值,后者用于预测连续值,常用算法有ID3、C4.5、CART等
聚类(clustering)
包:sklearn.cluster
聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小;属于无监督学习
K-means:也称为K-平均或者K-均值,是一种使用广泛的最基础的聚类算法,一般作为掌握聚类算法的第一个算法。
K-Means++:该算法和K-Means算法的区别主要在于初始的K个中心点的选择方面,K-Means算法使用随机给定的方式,K-Means++算法采用下列步骤给定K个初始质点。
K-Means||:主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次,然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。实践证明:一般5次重复采用就可以保证一个比较好的聚簇中心点。
MiniBatch K-Means:采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数;Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法。
BIRCH:算法(平衡迭代削减聚类法):聚类特征使用3元组进行一个簇的相关信息,通过构建满足分枝因子和簇直径限制的聚类特征树来求聚类,聚类特征树其实是一个具有两个参数分枝因子和类直径的高度平衡树;分枝因子规定了树的每个节点的子女的最多个数,而类直径体现了对这一类点的距离范围;非叶子节点为它子女的最大特征值;聚类特征树的构建可以是动态过程的,可以随时根据数据对模型进行更新操作。
DBSCAN :用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的cluster,而且聚类的时候事先不需要给定cluster的数量。
SVM(支持向量机)
包:sklearn.svm
支持向量机(Support Vecor Machine, SVM)本身是一个二元分类算法,是对感知器算法模型的一种扩展,现在的SVM算法支持线性分类和非线性分类的分类应用,并且也能够直接将SVM应用于回归应用中,同时通过OvR或者OvO的方式我们也可以将SVM应用在多元分类领域中。在不考虑集成学习算法,不考虑特定的数据集的时候,在分类算法中SVM可以说是特别优秀的。
LinearSVC(SVR):线性支持向量分类。与参数kernel ='linear'的SVC类似,但是以liblinear而不是libsvm的形式实现,因此它在惩罚和损失函数的选择方面具有更大的灵活性,并且应该更好地扩展到大量样本。此类支持密集和稀疏输入,并且多类支持是根据one-vs-the-rest方案处理的。
SVC(SVR):该实现基于libsvm。拟合时间至少与样本数量成比例地缩放,并且在数万个样本之外可能是不切实际的。适用于大型数据集。
估计器(Estimator)
估计器,很多时候可以直接理解成分类器,主要包含两个函数:
-
fit():训练算法,设置内部参数接收训练集和类别两个参数。
-
predict():预测测试集类别,参数为测试集。
大多数scikit-learn估计器接收和输出的数据格式均为numpy数组或类似格式。
转换器(Transformer)
转换器用于数据预处理和数据转换,主要是三个方法:
-
fit():训练算法,设置内部参数。
-
transform():数据转换。
-
fit_transform():合并fit和transform两个方法。
Pipeline(管道)
sklearn.pipeline包
pipeline的功能:
-
跟踪记录各步骤的操作(以方便地重现实验结果)
-
对各步骤进行一个封装
-
确保代码的复杂程度不至于超出掌控范围
scikit-learn扩展
scikit-learn通常要继承sklearn.base包下的类。
-
BaseEstimator: 估计器的基类
-
ClassifierMixin :分类器的混合类
-
ClusterMixin:聚类器的混合类
-
RegressorMixin :回归器的混合类
-
TransformerMixin :转换器的混合类