【机器学习】 sklearn 模块详解

【机器学习】 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 *

解决机器学习一般问题的步骤

  1. 拿到数据集,对数据集进行清洗。

    数据集清洗一般包括以下几个方面:重复值处理,缺失值处理,字符型数值处理(因为sklearn机器学习算法只能识别数值型的数据),特征提取(这就需要我们弄清楚每个特征的意义,选取对结果影响较大的特征),数据集切分,划分训练集和测试集。

  2. 建立模型。
    我们的机器学习问题分为两类,分类(Classifier)和回归(Regression),我们根据我们的目标来选择合适的算法,像逻辑回归,线性回归,朴素贝叶斯,支持向量机等。

  3. 模型评估,对模型的预测结果做一个评估。

    通常我们选用的评估标准有精度(Accuracy),Recall值,Fpr,F1-score,Roc_Auc值等等。

  4. 模型优化,
    如果模型的各项评价指标比较低,那么我们可以从以下几个方面去优化我们的模型:1.再次整理数据集,2.优化特征选择,3.优化模型参数

【机器学习】 sklearn 模块详解_第1张图片图像来源: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 模块详解_第2张图片
【机器学习】 sklearn 模块详解_第3张图片
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 :转换器的混合类

你可能感兴趣的:(python数据分析,机器学习,scikit-learn,python)