【机器学习】 sklearn 模块详解
【机器学习】 sklearn 模块详解前言小白问题解决机器学习一般问题的步骤sklearn 概述sklearn dataset模块预处理 sklearn.preprcessing特征抽取 sklearn.feature_extraction特征选择 sklearn.feature_selection降维 sklearn.decomposition模型评估 sklearn.metrics分类结果度量
【机器学习】 sklearn 模块详解
- 前言
- sklearn 概述
-
- sklearn dataset模块
- 预处理 sklearn.preprcessing
- 特征抽取 sklearn.feature_extraction
- 特征选择 sklearn.feature_selection
- 降维 sklearn.decomposition
- 模型评估 sklearn.metrics
- 交叉验证 sklearn.model_selection
- 网格搜索 sklearn.grid_search
- 多分类,多标签 sklearn.multiclass
- 朴素贝叶斯 sklearn.naive_bayes
- 回归模型 sklearn.linear_model
- 集成学习 sklearn.ensemble
- K近邻 sklearn.neighbors
- 决策树 sklearn.tree
- 聚类 sklearn.cluster
- 支持向量机 sklearn.svm
- 估计器 estimator
- 转换器 transformer
- 管道 sklearn.pipeline
- scikit-learn扩展
前言
使用常见的机器学习算法对数据进行处理可以使用 scikit-learn 库,在过去对 scikit-learn 的使用中,常出现忘记调用方式以及函数参数意义的情况,故搜索相应资料,整理出自己的 scikit-learn 使用笔记。
小白问题
问题: scikit-learn和sklearn两个模块的区别
回答:只有 scikit-learn 模块,官网地址为:http://scikit-learn.org/stable/
不过在 Python 中调用这个包的时候,写法是 from sklearn import *
解决机器学习一般问题的步骤
-
拿到数据集,对数据集进行清洗。
数据集清洗一般包括以下几个方面:重复值处理,缺失值处理,字符型数值处理(因为sklearn机器学习算法只能识别数值型的数据),特征提取(这就需要我们弄清楚每个特征的意义,选取对结果影响较大的特征),数据集切分,划分训练集和测试集。
-
建立模型。
我们的机器学习问题分为两类,分类(Classifier)和回归(Regression),我们根据我们的目标来选择合适的算法,像逻辑回归,线性回归,朴素贝叶斯,支持向量机等。 -
模型评估,对模型的预测结果做一个评估。
通常我们选用的评估标准有精度(Accuracy),Recall值,Fpr,F1-score,Roc_Auc值等等。
-
模型优化,
如果模型的各项评价指标比较低,那么我们可以从以下几个方面去优化我们的模型:1.再次整理数据集,2.优化特征选择,3.优化模型参数
图像来源:https://blog.csdn.net/kakak_/article/details/104256467
sklearn 概述
sklearn 作为 python 机器学习的常用工具大受开发者环境,它主要包括 6 大模块,分别是分类、回归、聚类、降维、模型选择以及预处理。
同时sklearn 还自带部分经典数据集。
sklearn dataset模块
以手写数据集 load_digits() 为例, 介绍常规使用
其数据有以下几个属性
| 属性 | |
|---|---|
| 数据集介绍 | DESCR |
| 样本数据 | data |
| 标签数据 | target |
| 标签名称 | target_names |
| 图像数据 | images |
注:
1.data,target 均为 numpy.ndarray 数组
2.images 是所有图片的数据, images[0] 指第一张图片;
3.data, target, target_name 是 sklearn 自带数据集通用的属性
from sklearn import datasets # 导入sklearn自带数据集
digits = datasets.load_digits()# 加载手写数字数据集
feature = digits.data # 创建特征矩阵
target = digits.target # 创建目标向量
print(feature[0]) # 查看第一个样本数据
示例:使用Python的数据可视化库matplotlib查看图片
# 查看指定序列的图片
import matplotlib.pyplot as plt
import matplotlib
plt.imshow(digits.images[0])#0序列第一张图
plt.show()
plt.imshow(digits.images[0], cmap = matplotlib.cm.binary)#用cmap参数,cmap = matplotlib.cm.binary转换为灰度图
plt.show()


sklearn 数据集的使用可参考:https://blog.csdn.net/weixin_43848614/article/details/111003492
预处理 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%个特征
- chi2 : 卡方检验, 计算单个特征和某一类别之间相关性
降维 sklearn.decomposition
- PCA:主成分分析算法(Principal Component Analysis)目的是找到能用较少信息描述数据集的特征组合
- TruncatedSVD:通过奇异值分解(SVD)执行线性降维。
- KernelPCA:核主成分分析(KPCA)通过使用内核减少非线性维度。
模型评估 sklearn.metrics
包含评分方法、性能度量、成对度量和距离计算
分类结果度量
分类结果度量参数大多是y_true和y_pred
- accuracy_score:分类准确度
- condusion_matrix :分类混淆矩阵
- classification_report:分类报告
- precision_recall_fscore_support:计算精确度、召回率、f1
- jaccard_similarity_score:计算jcaard相似度
- hamming_loss:计算汉明损失
- hinge_loss:计算hinge损失
- zero_one_loss:0-1损失
- 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的个数,测试集的尺寸。
- train_test_split:分离训练集和测试集
- cross_val_score:交叉验证评分
- cross_val_predict:交叉验证的预测
网格搜索 sklearn.grid_search
搜索最佳参数
- GridSearchCV:搜索指定参数网格中的最佳参数
- ParameterGrid:参数网格
- ParameterSampler:用给定分布生成参数的生成器
- RandomizedSearchCV:超参的随机搜索
通过best_estimator_.get_params()方法,获取最佳参数
多分类,多标签 sklearn.multiclass
- OneVsRestClassifier:1-rest多分类(多标签)策略
- OneVsOneClassifier:1-1多分类策略
- OutputCodeClassifier:1个类用一个二进制码表示
朴素贝叶斯 sklearn.naive_bayes
朴素贝叶斯的特点是分类速度快,分类效果不一定是最好的。
- GasussianNB:高斯分布的朴素贝叶斯
- MultinomialNB:多项式分布的朴素贝叶斯
- BernoulliNB:伯努利分布的朴素贝叶斯
所谓使用什么分布的朴素贝叶斯,就是假设P(x_i|y)是符合哪一种分布
回归模型 sklearn.linear_model
回归算法中的最终结果是一个连续的数据值,输入值(属性值)是一个d维度的属性/数值向量
- LinearRegression:普通最小二乘线性回归
- ElasticNet:将L1和L2组合作为正则化器的线性回归
- Lasso:使用L1作为正则化器(也称为Lasso)训练的线性模型
- Ridge:具有l2正则化的线性最小二乘法
集成学习 sklearn.ensemble
弱分类器(weak learner)指那些分类准确率只稍微好于随机猜测的分类器(errorrate < 0.5)
- AdaBoostClassifier(Regressor)算法会为每个样本赋予一个权重,每次用训练好的学习器标注/预测各个样本,如果某个样本点被预测的越正确,则将其权重降低;否则提高样本的权重。
- ExtraTreesClassifier(Regressor)Extra Tree会随机的选择一个特征值来划分决策树
- GradientBoostingClassifier(Regressor)
GBDT也是迭代,但是GBDT要求弱学习器必须是CART模型,而且GBDT在模型训练的时候,是要求模型预测的样本损失尽可能的小。 - IsolationForest 异常点检测
- RandomForestClassifier(Regressor) RF算法在实际应用中具有比较好的特性,应用也比较广泛
K近邻 sklearn.neighbors
- KNeighborsClassifier 实现k近邻投票的分类器
- KNeighborsRegressor 基于k-近邻的回归,通过与训练集中的最近邻相关联的目标的局部插值来预测目标
- KDTree 用于广义N点问题
决策树 sklearn.tree
决策树是一种预测模型,代表的是对象属性与对象值之间的映射关系
DecisionTreeClassifier(Regressor) 决策树
决策树分为分类树和回归树,前者用于分类标签值,后者用于预测连续值,常用算法有ID3、C4.5、CART等
聚类 sklearn.cluster
聚类就是对大量未知标注的数据集,按照数据内部存在的数据特征将数据集划分为多个不同的类别,使类别内的数据比较相似,类别之间的数据相似度比较小,属无监督学习。
- K-means:K-均值,是一种使用广泛的最基础的聚类算法
- K-Means++ : 该算法和K-Means算法的区别主要在于初始的K个中心点的选择方面,K-Means算法使用随机给定的方式。
- K-Means|| :
主要思路是改变每次遍历时候的取样规则,并非按照K-Means++算法每次遍历只获取一个样本,而是每次获取K个样本,重复该取样操作O(logn)次,然后再将这些抽样出来的样本聚类出K个点,最后使用这K个点作为K-Means算法的初始聚簇中心点。 - MiniBatch
K-Means:采用小规模的数据子集(每次训练使用的数据集是在训练算法的时候随机抽取的数据子集)减少计算时间,同时试图优化目标函数;Mini Batch K-Means算法可以减少K-Means算法的收敛时间,而且产生的结果效果只是略差于标准K-Means算法。 - DBSCAN :
用一个点的ε邻域内的邻居点数衡量该点所在空间的密度,该算法可以找出形状不规则的cluster,而且聚类的时候事先不需要给定cluster的数量。
支持向量机 sklearn.svm
- LinearSVC(SVR) : 线性支持向量分类。与参数kernel
='linear’的SVC类似,但是以liblinear而不是libsvm的形式实现,因此它在惩罚和损失函数的选择方面具有更大的灵活性,并且应该更好地扩展到大量样本。此类支持密集和稀疏输入,并且多类支持是根据one-vs-the-rest方案处理的。 - SVC(SVR):该实现基于libsvm。拟合时间与样本数量成比例地缩放,适用于大型数据集。
估计器 estimator
- fit() :训练算法,设置内部参数接收训练集和类别两个参数
- predict() :预测测试集类别,参数为测试集
转换器 transformer
转换器用于数据预处理和数据转换
- fit() :训练算法,设置内部参数
- transform() :数据转换
- fit_transform() :合并fit和transform两个方法
管道 sklearn.pipeline
- 跟踪记录各步骤的操作(以方便地重现实验结果)
- 对各步骤进行一个封装
- 确保代码的复杂程度不至于超出掌控范围
scikit-learn扩展
通常继承sklearn.base下的类
- BaseEstimator :估计器的基类
- ClassifierMixin :分类器的混合类
- ClusterMixin :聚类器的混合类
- RegressorMixin :回归器的混合类
- TransformerMixin :转换器的混合类
更多推荐
所有评论(0)