机器学习-基础知识、sklearn库、评估指标、python数据处理库

1. 机器学习基本概念

1.1. 常用算法

  • 线性回归(Linear Regression
  • 逻辑回归(Logistic Regression
  • 聚类(k-meansDBSCAN
  • 决策树(Decision Tree
  • 集成算法(Random forestAdaBoostGradient Boosting
  • 支持向量机(Support Vector Machine
  • k近邻(K-Nearest Neighbors
  • 线性判别分析(Linear Discriminant Analysis
  • 朴素贝叶斯(Bayes Theorem

1.2. 基本概念

  • 训练集:又称训练样例,用来进行训练,也就是产生模型或者算法的数据集

  • 测试集:又称测试样例,用来专门进行测试已经学习好的模型或者算法的数据集

  • 特征值:属性的集合,通常用一个向量来表示,附属于一个实例

  • 标记:实例类别的标记(正例与反例或者更多)

  • 分类:目标标记为类别型数据

  • 回归:目标标记为连续型数值

  • 有监督学习:训练集有类别标记

  • 无监督学习:训练集无类别标记

  • 半监督学习:训练集既有有类别标记又有无类别标记

1.3. 机器学习步骤框架

  1. 把数据拆分为训练集和测试集
  2. 用训练集和训练集的特征向量来训练算法
  3. 用学习来的算法运用在测试集上来评估算法(可能要涉及到调整参数,用验证集)

1.4. 机器学习中分类和预测算法的评估

  • 准确性
  • 速度
  • 强壮性
  • 可规模性
  • 可解释性

1.5. 分类与回归问题

在这里插入图片描述

2. sklearn机器学习库

2.1. 定义

  • 简介:sklearn是基于python语言的机器学习工具包,是目前做机器学习项目当之无愧的第一工具。 sklearn自带了大量的数据集,可供我们练习各种机器学习算法。 sklearn集成了数据预处理、数据特征选择、数据特征降维、分类回归聚类模型、模型评估等非常全面算法。

    分类:识别某个对象属于哪个类别,常用的算法有:SVM(支持向量机),nearest neighbors(最近邻)、random forest(随机森林)

    回归:预测与对象相关联的连续值属性,常用算法:SVR(支持向量机), ridge regression(岭回归)、Lasso

    聚类:将相似对象自动分组,常用算法: k-Means、 spectral clustering、mean-shift

    降维:减少要考虑的随机变量的数量,PCA(主成分分析), eature selection(特征选择)、non-negative matrix factorization(非负矩阵分解)

    模型选择:比较,验证,选择参数和模型,常用的模块有:grid search(网格搜索)、cross validation(交叉验证)、 metrics(度量)

    预处理:特征提取和归一化,把输入的数据转换为机器学习算法可用的数据

2.2. sklearn数据类型

机器学习最终处理的数据都是数字,只不过这些数据可能以不同的形态被呈现出来,如矩阵、文字、图片、视频、音频等。

2.3. sklearn总览

在这里插入图片描述

2.3.1. 数据预处理

在这里插入图片描述

  • sklearn.preprocessing

    函数 功能
    preprocessing.scale( ) 标准化
    preprocessing.MinMaxScaler( ) 最大最小值标准化
    preprocessing.StandardScaler( ) 数据标准化
    preprocessing.MaxAbsScaler( ) 绝对值最大标准化
    preprocessing.RobustScaler( ) 带离群值数据集标准化
    preprocessing.QuantileTransformer( ) 使用分位数信息变换特征
    preprocessing.PowerTransformer( ) 使用幂变换执行到正态分布的映射
    preprocessing.Normalizer( ) 正则化
    preprocessing.OrdinalEncoder( ) 将分类特征转换为分类数值
    preprocessing.LabelEncoder( ) 将分类特征转换为分类数值
    preprocessing.MultiLabelBinarizer( ) 多标签二值化
    preprocessing.OneHotEncoder( ) 独热编码
    preprocessing.KBinsDiscretizer( ) 将连续数据离散化
    preprocessing.FunctionTransformer( ) 自定义特征处理函数
    preprocessing.Binarizer( ) 特征二值化
    preprocessing.PolynomialFeatures( ) 创建多项式特征
    preprocesssing.Normalizer( ) 正则化
    preprocessing.Imputer( ) 弥补缺失值
  • sklearn.svm

    函数 介绍
    svm.OneClassSVM( ) 无监督异常值检测

    上述preprocessing类函数的方法如下:

    函数方法 介绍
    xxx.fit( ) 拟合数据
    xxx.fit_transform( ) 拟合并转换数据
    xxx.get_params( ) 获取函数参数
    xxx.inverse_transform( ) 逆转换
    xxx.set_params( ) 设置参数
    xxx.transform( ) 转换数据

2.3.2. 数据集

在这里插入图片描述

  • sklearn.datasets
  1. 获取小数据集(本地加载):datasets.load_xxx()

  2. 获取大数据集(在线下载):datasets.fetch_xxx()

  3. 本地生成数据集(本地构造):datasets.make_xxx()

    数据集 介绍
    load_iris( ) 鸢尾花数据集:3类、4个特征、150个样本
    load_boston( ) 波斯顿房价数据集:13个特征、506个样本
    load_digits( ) 手写数字集:10类、64个特征、1797个样本
    load_breast_cancer( ) 乳腺癌数据集:2类、30个特征、569个样本
    load_diabets( ) 糖尿病数据集:10个特征、442个样本
    load_wine( ) 红酒数据集:3类、13个特征、178个样本
    load_files( ) 加载自定义的文本分类数据集
    load_linnerud( ) 体能训练数据集:3个特征、20个样本
    load_sample_image( ) 加载单个图像样本
    load_svmlight_file( ) 加载svmlight格式的数据
    make_blobs( ) 生成多类单标签数据集
    make_biclusters( ) 生成双聚类数据集
    make_checkerboard( ) 生成棋盘结构数组,进行双聚类
    make_circles( ) 生成二维二元分类数据集
    make_classification( ) 生成多类单标签数据集
    make_friedman1( ) 生成采用了多项式和正弦变换的数据集
    make_gaussian_quantiles( ) 生成高斯分布数据集
    make_hastie_10_2( ) 生成10维度的二元分类数据集
    make_low_rank_matrix( ) 生成具有钟形奇异值的低阶矩阵
    make_moons( ) 生成二维二元分类数据集
    make_multilabel_classification( ) 生成多类多标签数据集
    make_regression( ) 生成回归任务的数据集
    make_s_curve( ) 生成S型曲线数据集
    make_sparse_coded_signal( ) 生成信号作为字典元素的稀疏组合
    make_sparse_spd_matrix( ) 生成稀疏堆成的正定矩阵
    make_sparse_uncorrelated( ) 使用稀疏的不相关设计生成随机回归问题
    make_spd_matrix( ) 生成随机堆成的正定矩阵
    make_swiss_roll( ) 生成瑞士卷曲线数据集

2.3.3. 特征选择

在这里插入图片描述

  • sklean.feature_selection

    函数 功能
    feature_selection.SelectKBest( ) feature_selection.chi2 ( )feature_selection.f_regression( ) feature_selection.mutual_info_regression( ) 选择K个得分最高的特征
    feature_selection.VarianceThreshold( ) 无监督特征选择
    feature_selection.REF( ) 递归式特征消除
    feature_selection.REFCV( ) 递归式特征消除交叉验证法
    feature_selection.SelectFromModel( ) 特征选择

2.3.4. 特征降维

在这里插入图片描述

  • sklearn.decomposition

    函数 功能
    decomposition.PCA( ) 主成分分析
    decomposition.KernelPCA( ) 核主成分分析
    decomposition.IncrementalPCA( ) 增量主成分分析
    decomposition.MiniBatchSparsePCA( ) 小批量稀疏主成分分析
    decomposition.SparsePCA( ) 稀疏主成分分析
    decomposition.FactorAnalysis( ) 因子分析
    decomposition.TruncatedSVD( ) 截断的奇异值分解
    decomposition.FastICA( ) 独立成分分析的快速算法
    decomposition.DictionaryLearning( ) 字典学习
    decomposition.MiniBatchDictonaryLearning( ) 小批量字典学习
    decomposition.dict_learning( ) 字典学习用于矩阵分解
    decomposition.dict_learning_online( ) 在线字典学习用于矩阵分解
    decomposition.LatentDirichletAllocation( ) 在线变分贝叶斯算法的隐含迪利克雷分布
    decomposition.NMF( ) 非负矩阵分解
    decomposition.SparseCoder( ) 稀疏编码
  • sklearn.manifold

    函数 功能
    manifold.LocallyLinearEmbedding( ) 局部非线性嵌入
    manifold.Isomap( ) 流形学习
    manifold.MDS( ) 多维标度法
    manifold.t-SNE( ) t分布随机邻域嵌入
    manifold.SpectralEmbedding( ) 频谱嵌入非线性降维

2.3.5. 模型构建

(1)分类模型

在这里插入图片描述

  • sklearn.tree

    函数 功能
    tree.DecisionTreeClassifier() 决策树
  • sklearn.ensemble

    函数 功能
    ensemble.BaggingClassifier() 装袋法集成学习
    ensemble.AdaBoostClassifier( ) 提升法集成学习
    ensemble.RandomForestClassifier( ) 随机森林分类
    ensemble.ExtraTreesClassifier( ) 极限随机树分类
    ensemble.RandomTreesEmbedding( ) 嵌入式完全随机树
    ensemble.GradientBoostingClassifier( ) 梯度提升树
    ensemble.VotingClassifier( ) 投票分类法
  • sklearn.linear_model

    函数 功能
    linear_model.LogisticRegression( ) 逻辑回归
    linear_model.Perceptron( ) 线性模型感知机
    linear_model.SGDClassifier( ) 具有SGD训练的线性分类器
    linear_model.PassiveAggressiveClassifier( ) 增量学习分类器
  • sklearn.svm

    函数 功能
    svm.SVC( ) 支持向量机分类
    svm.NuSVC( ) Nu支持向量分类
    svm.LinearSVC( ) 线性支持向量分类
  • sklearn.neighbors

    函数 功能
    neighbors.NearestNeighbors( ) 无监督学习临近搜索
    neighbors.NearestCentroid( ) 最近质心分类器
    neighbors.KNeighborsClassifier() K近邻分类器
    neighbors.KDTree( ) KD树搜索最近邻
    neighbors.KNeighborsTransformer( ) 数据转换为K个最近邻点的加权图
  • sklearn.discriminant_analysis

    函数 功能
    discriminant_analysis.LinearDiscriminantAnalysis( ) 线性判别分析
    discriminant_analysis.QuadraticDiscriminantAnalysis( ) 二次判别分析
  • sklearn.gaussian_process

    函数 功能
    gaussian_process.GaussianProcessClassifier( ) 高斯过程分类
  • sklearn.naive_bayes

    函数 功能
    naive_bayes.GaussianNB( ) 朴素贝叶斯
    naive_bayes.MultinomialNB( ) 多项式朴素贝叶斯
    naive_bayes.BernoulliNB( ) 伯努利朴素贝叶斯
(2)回归模型

在这里插入图片描述

  • sklearn.tree

    函数 功能
    tree.DecisionTreeRegress( ) 回归决策树
    tree.ExtraTreeRegressor( ) 极限回归树
  • sklearn.ensemble

    函数 功能
    ensemble.GradientBoostingRegressor( ) 梯度提升法回归
    ensemble.AdaBoostRegressor( ) 提升法回归
    ensemble.BaggingRegressor( ) 装袋法回归
    ensemble.ExtraTreeRegressor( ) 极限树回归
    ensemble.RandomForestRegressor( ) 随机森林回归
  • sklearn.linear_model

    函数 功能
    linear_model.LinearRegression( ) 线性回归
    linear_model.Ridge( ) 岭回归
    linear_model.Lasso( ) 经L1训练后的正则化器
    linear_model.ElasticNet( ) 弹性网络
    linear_model.MultiTaskLasso( ) 多任务Lasso
    linear_model.MultiTaskElasticNet( ) 多任务弹性网络
    linear_model.Lars( ) 最小角回归
    linear_model.OrthogonalMatchingPursuit( ) 正交匹配追踪模型
    linear_model.BayesianRidge( ) 贝叶斯岭回归
    linear_model.ARDRegression( ) 贝叶斯ADA回归
    linear_model.SGDRegressor( ) 随机梯度下降回归
    linear_model.PassiveAggressiveRegressor( ) 增量学习回归
    linear_model.HuberRegression( ) Huber回归
  • sklearn.svm

    函数 功能
    svm.SVR( ) 支持向量机回归
    svm.NuSVR( ) Nu支持向量回归
    svm.LinearSVR( ) 线性支持向量回归
  • sklearn.neighbors

    函数 功能
    neighbors.KNeighborsRegressor( ) K近邻回归
    neighbors.RadiusNeighborsRegressor( ) 基于半径的近邻回归
  • sklearn.kernel_ridge

    函数 功能
    kernel_ridge.KernelRidge( ) 内核岭回归
  • sklearn.gaussian_process

    函数 功能
    gaussian_process.GaussianProcessRegressor( ) 高斯过程回归
  • sklearn.cross_decomposition

    函数 功能
    cross_decomposition.PLSRegression( ) 偏最小二乘回归
(3)聚类模型

在这里插入图片描述

  • sklearn.cluster

    函数 功能
    cluster.DBSCAN( ) 基于密度的聚类
    cluster.GaussianMixtureModel( ) 高斯混合模型
    cluster.AffinityPropagation( ) 吸引力传播聚类
    cluster.AgglomerativeClustering( ) 层次聚类
    cluster.Birch( ) 利用层次方法的平衡迭代聚类
    cluster.KMeans( ) K均值聚类
    cluster.MiniBatchKMeans( ) 小批量K均值聚类
    cluster.MeanShift( ) 平均移位聚类
    cluster.OPTICS( ) 基于点排序来识别聚类结构
    cluster.SpectralClustering( ) 谱聚类
    cluster.Biclustering( ) 双聚类
    cluster.ward_tree( ) 集群病房树
  • 模型方法

    方法 功能
    xxx.fit( ) 模型训练
    xxx.get_params( ) 获取模型参数
    xxx.predict( ) 预测新输入数据
    xxx.score( ) 评估模型分类/回归/聚类模型
    xxx.set_params( ) 设置模型参数

2.3.6. 模型评估

在这里插入图片描述

  • 分类模型评估

    函数 功能
    metrics.accuracy_score( ) 准确率
    metrics.average_precision_score( ) 平均准确率
    metrics.log_loss( ) 对数损失
    metrics.confusion_matrix( ) 混淆矩阵
    metrics.classification_report( ) 分类模型评估报告:准确率、召回率、F1-score
    metrics.roc_curve( ) 受试者工作特性曲线
    metrics.auc( ) ROC曲线下面积
    metrics.roc_auc_score( ) AUC值
  • 回归模型评估

    函数 功能
    metrics.mean_squared_error( ) 平均决定误差
    metrics.median_absolute_error( ) 中值绝对误差
    metrics.r2_score( ) 决定系数
  • 聚类模型评估

    函数 功能
    metrics.adjusted_rand_score( ) 随机兰德调整指数
    metrics.silhouette_score( ) 轮廓系数

2.3.7. 模型优化

在这里插入图片描述

函数 功能
model_selection.cross_val_score( ) 交叉验证
model_selection.LeaveOneOut( ) 留一法
model_selection.LeavePout( ) 留P法交叉验证
model_selection.GridSearchCV( ) 网格搜索
model_selection.RandomizedSearchCV( ) 随机搜索
model_selection.validation_curve( ) 验证曲线
model_selection.learning_curve( ) 学习曲线

3. 评估指标

3.1. 各种算法的评估指标

在这里插入图片描述

3.2. 分类任务

二分类问题的混淆矩阵

TP代表正样本中预测正确的样本个数;FN代表正样本中预测错误的样本个数;FP代表负样本中预测错误的样本个数;TN代表父样本中预测正确的样本个数,以下的公式基本都基于混淆矩阵而言。
在这里插入图片描述

  1. 准确率:准确率表示的是分类正确的比例(所有样本),但是在样本不平衡的情况下,并不能作为很好的指标来衡量结果。

    A

    c

    c

    u

    r

    a

    c

    y

    =

    T

    P

    +

    T

    N

    T

    P

    +

    T

    N

    +

    F

    P

    +

    F

    N

    Accuracy=frac{TP+TN}{TP+TN+FP+FN}

    Accuracy=TP+TN+FP+FNTP+TN
    对应sklearn包

    sklearn.metrics.accuracy_score(y_true, y_pred, *, normalize=True, sample_weight=None)

    参数

    参数 说明
    y_true 1d array-like, or label indicator array / sparse matrix 真实标签。
    y_pred 1d array-like, or label indicator array / sparse matrix 预测标签,由分类器返回。
    normalize bool, optional (default=True) 如果为False,则返回正确分类的样本数。否则,返回正确分类的样本的分数。
    sample_weight array-like of shape (n_samples,), default=None 样本权重。

    返回值

    返回值 说明
    score float 如果normalize == True,则返回正确分类的样本的分数(浮点数),否则返回正确分类的样本数(整数)。 最佳性能,在normalize == True时,为1;在normalize == False时,为样本数量。
  2. 精确率(查准率):精确率代表的是预测为正样本的样本总体预测正确的占比(正样本)。

    P

    r

    e

    c

    i

    s

    i

    o

    n

    =

    T

    P

    T

    P

    +

    F

    P

    Precision=frac{TP}{TP+FP}

    Precision=TP+FPTP
    对应sklearn包

    sklearn.metrics.precision_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')

    参数

    参数 说明
    y_true 1d array-like, or label indicator array / sparse matrix 真实目标值。
    y_pred 1d array-like, or label indicator array / sparse matrix 分类器返回的估计目标。
    labels list, optional 当average!='binary’时要包括的一组标签,如果average是None,则为标签的顺序。可以排除数据中存在的标签,例如,以忽略多数否定类的方式计算多类平均值,而数据中不存在的标签将导致宏平均值中的0成分。对于多标签目标,标签是列索引。 默认情况下,y_true和y_pred中的所有标签均按排序顺序使用。 在版本0.17中进行了更改:针对多类问题改进了参数标签。
    pos_label str or int, 1 by default average ='binary’且数据为二进制的报告类。如果数据是多类或多标签的,则将被忽略; 设置labels= [pos_label]和average!='binary’将仅报告该标签的分数。
    average string, [None|‘binary’ (default)| ‘micro’| ‘macro’| ‘samples’|‘weighted’] 对于多类/多标签目标,此参数是必需的。如果为None,则返回每个班级的分数。否则,将根据数据的平均表现确定类型: - 'binary': 仅报告由pos_label指定的类的结果。仅当目标(y_ {true,pred})为二进制时才适用。 - 'micro': 通过计算真正例、假负例和假正例的总数来全局计算指标。 - 'macro': 计算每个标签的指标,并找到其未加权平均值。 没有考虑标签不平衡。 - 'weighted': 计算每个标签的指标,并找到它们受支持的平均权重(每个标签的真实实例数)。这会更改‘macro’以解决标签不平衡的问题;这可能导致F-score不在精确度和召回率之间。 - 'samples': 计算每个实例的指标,并找到它们的平均值(仅对不同于accuracy_score的多标签分类有意义)。
    sample_weight array-like of shape (n_samples,), default=None 样本权重。
    zero_division “warn”, 0 or 1, default=”warn” 设置零分频时返回的值。如果设置为“ warn”,则该值为0,但也会发出警告。

    返回值

    返回值 说明
    precision float (if average is not None) or array of float, shape = [n_unique_labels] 二进制分类中正类的精度,或者多类任务的每个类的精度的加权平均值。
  3. 召回率(查全率):召回率代表的是实际为正样本的样本总体预测正确的占比。精确度与召回率是一对矛盾的度量,一般来说,精确率高的时候,召回率往往偏低;精确率低的时候,召回率往往偏高。

    R

    e

    c

    a

    l

    l

    =

    T

    P

    T

    P

    +

    F

    N

    Recall=frac{TP}{TP+FN}

    Recall=TP+FNTP
    对应sklearn包

    sklearn.metrics.recall_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')

    参数

    参数 说明
    y_true 1d array-like, or label indicator array / sparse matrix 真实目标值。
    y_pred 1d array-like, or label indicator array / sparse matrix 分类器返回的估计目标。
    labels list, optional 当average!='binary’时要包括的一组标签,如果average是None,则是标签的顺序。可以排除数据中存在的标签,例如,以忽略多数否定类的方式计算多类平均值,而数据中不存在的标签将导致宏平均值中的0成分。对于多标签目标,标签是列索引。 默认情况下,y_true和y_pred中的所有标签均按排序顺序使用。 在版本0.17中进行了更改:针对多类问题改进了参数标签。
    pos_label str or int, 1 by default average ='binary’且数据为二进制的报告类。如果数据是多类或多标签的,则将被忽略; 设置labels=[pos_label]和average!='binary’将仅报告该标签的分数。
    average string, [None|‘binary’ (default)| ‘micro’| ‘macro’| ‘samples’|‘weighted’] 对于多类/多标签目标,此参数是必需的。如果为None,则返回每个类的得分。否则,将根据数据的平均表现确定类型: - 'binary': 仅报告由pos_label指定的类的结果。仅当目标(y_ {true,pred})为二进制时才适用。 - 'micro': 通过计算真正例、假负例和假正例的总数来全局计算度量。 - 'macro': 计算每个标签的度量,并找到其未加权平均值。 这没有考虑标签不平衡。 - 'weighted': 计算每个标签的度量,并找到它们受支持的平均权重(每个标签的真实实例数)。这会更改‘macro’以解决标签不平衡的问题;这可能导致F-score不在精确度和召回率之间。 - 'samples': 计算每个实例的度量,并找到它们的平均值(仅对不同于accuracy_score的多标签分类有意义)。
    sample_weight array-like of shape (n_samples,), default=None 样本权重。
    zero_division “warn”, 0 or 1, default=”warn” 设置零分频时返回的值。如果设置为“ warn”,则该值为0,但也会发出警告。

    返回值

    返回值 说明
    recall float (if average is not None) or array of float, shape = [n_unique_labels] 二进制分类中的正例类的召回率或多类别任务的每个类别的召回率加权平均
  4. P-R曲线:以查准率为纵轴,查全率为横轴,就得到了查准率-查全率曲线,又被称为P-R曲线。P-R曲线能直观地显示出学习器在样本总体上的查全率、查准率。如下图,学习器A优于学习器C(学习器A的曲线完全包住学习器C),但是学习器A与B很难比较,因为出现了交叉,平衡点(BEP)也就是查准率等于查全率的时候,对应的坐标值,坐标值大的相对优一点。但BEP过于简化,因此常用F1。
    在这里插入图片描述

    对应sklearn包

    sklearn.metrics.average_precision_score(y_true, y_score, *, average='macro', pos_label=1, sample_weight=None)

    参数

    参数 说明
    y_true array, shape = [n_samples] or [n_samples, n_classes] 真正的二进制标签或二进制标签指示符。
    y_score array, shape = [n_samples] or [n_samples, n_classes] 目标分数可以是肯定类别的概率估计值,置信度值或决策的非阈值度量(如某些分类器上的“ decision_function”所返回)。
    average string, [None, ‘micro’, ‘macro’ (default), ‘samples’, ‘weighted’] 如果为None,则返回每类的得分。否则,将确定对数据平均表现的类型: - ‘micro’: 通过将标签指标矩阵的每个元素都视为标签来全局计算指标。 - ‘macro’: 计算每个标签的指标,并找到其未加权平均值。此处没有考虑标签不平衡问题。 - ‘weighted’: 计算每个标签的指标,并找到它们的平均值,然后按支持度(每个标签的真实实例数)加权。 - ‘samples’: 计算每个实例的指标,并找到它们的平均值。 当y_true为二进制时将被忽略。
    pos_label int or str (default=1) 正向类别的标签。仅适用于二进制y_true。 对于multilabel-indicator y_true,pos_label固定为1。
    sample_weight array-like of shape (n_samples,), default=None 样本权重。

    返回值

    返回值 说明
    average_precision float
  5. F值:当需要在精确率与召回率之间进行权衡时,F1曲线同时考虑了两者,可以作为一种评价指标,它是精确率和召回率的调和平均数。当β > 1时,召回率的权重高于精确率,当β < 1时精确率的权重高于召回率,当β = 1时,就变成了F1值。

    F

    β

    =

    (

    1

    +

    β

    2

    )

    P

    r

    e

    c

    i

    s

    i

    o

    n

    R

    e

    c

    a

    l

    l

    β

    2

    P

    r

    e

    c

    i

    s

    i

    o

    n

    +

    R

    e

    c

    a

    l

    l

    F_beta=(1+beta^2)cdotfrac{Precision cdot Recall}{beta^2 cdot Precision + Recall}

    Fβ=(1+β2)β2Precision+RecallPrecisionRecall
    F1:

    F

    1

    =

    2

    P

    r

    e

    c

    i

    s

    i

    o

    n

    R

    e

    c

    a

    l

    l

    P

    r

    e

    c

    i

    s

    i

    o

    n

    +

    R

    e

    c

    a

    l

    l

    F_1=frac{2cdot Precision cdot Recall}{Precision + Recall}

    F1=Precision+Recall2PrecisionRecall
    对应sklearn包

    sklearn.metrics.f1_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')

    参数

    参数 说明
    y_true 1d array-like, or label indicator array / sparse matrix 真实目标值。
    y_pred 1d array-like, or label indicator array / sparse matrix 分类器返回的估计目标。
    labels list, optional 当average!='binary’时要包括的一组标签,如果average是None,则是标签的顺序。可以排除数据中存在的标签,例如,以忽略多数否定类的方式计算多类平均值,而数据中不存在的标签将导致宏平均值中的0成分。对于多标签目标,标签是列索引。 默认情况下,y_true和y_pred中的所有标签均按排序顺序使用。 在版本0.17中进行了更改:针对多类问题改进了参数标签。
    pos_label str or int, 1 by default average ='binary’且数据为二进制的要进行报告的类。如果数据是多类或多标签的,则将被忽略;设置labels=[pos_label]及average!='binary’将仅报告该标签的得分。
    average string,[None| ‘binary’(default)| ‘micro’| ‘macro’| ‘samples’| ‘weighted’] 对于多类/多标签目标,此参数是必需的。如果为None,则返回每个类的得分。否则,将确定数据执行的平均类型: - 'binary': 仅报告由pos_label指定的类的结果。仅当目标(y_ {true,pred})为二进制时才适用。 - 'micro': 通过计算真正例、假负例和假正例的总数来全局计算度量。 - 'macro': 计算每个标签的度量,并找到其未加权平均值。 这没有考虑标签不平衡。 - 'weighted': 计算每个标签的度量,并找到它们受支持的平均权重(每个标签的真实实例数)。这会更改‘macro’以解决标签不平衡的问题;这可能导致F-score不在精确度和召回率之间。 - 'samples': 计算每个实例的度量,并找到它们的平均值(仅对不同于accuracy_score的多标签分类有意义)。
    sample_weight array-like of shape (n_samples,), default=None 样本权重。
    zero_division “warn”, 0 or 1, default=”warn” 设置除数为零(即所有预测和标签均为负)时的返回值。如果设置为“warn”,则该值为0,但也会发出警告。

    返回值

    返回值 说明
    f1_score float or array of float, shape = [n_unique_labels] 二进制分类中的正例类的F1分数,或者对于多类别任务,每个类别的F1分数的加权平均值。
  6. G值:是精确率与召回率的另一种评价指标,它是精确率和召回率的几何平均数。

    G

    =

    P

    r

    e

    c

    i

    s

    i

    o

    n

    R

    e

    c

    a

    l

    l

    G=sqrt{Precision cdot Recall}

    G=PrecisionRecall

  7. ROC曲线和AUC :当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变,即ROC曲线能够很好的消除样本类别不平衡对评估指标产生的影响(把实际中的正样例与负样例分开考虑)。ROC曲线与下方坐标轴围成的面积就是AUC,考虑的是样本预测的排序质量,因此与排序误差有紧密联系,AUC的值应当越大越好。
    在这里插入图片描述

    对应sklearn包 (AUC):

    sklearn.metrics.auc(x, y)

    参数

    参数 说明
    x array, shape = [n] x坐标。这些必须是单调递增或单调递减。
    y array, shape = [n] y坐标。

    返回值

    返回值 说明
    auc float

    对应sklearn包(ROC) :

    sklearn.metrics.roc_curve(y_true, y_score, *, pos_label=None, sample_weight=None, drop_intermediate=True)

    参数

    参数 说明
    y_true array, shape = [n_samples] 真正的二进制标签。 如果标签既不是{-1,1}也不是{0,1},则应该明确给出pos_label。
    y_score array, shape = [n_samples] 目标分数可以是正例类的概率估计值,置信度值或决策的非阈值度量(如某些分类器上的“ decision_function”所返回)。
    pos_label int or str, default=None 正例类的标签。当pos_label = None时,如果y_true在{-1,1}或{0,1}中,则pos_label设置为1,否则将引发错误。
    sample_weight array-like of shape (n_samples,), default=None 样本权重。
    drop_intermediate boolean, optional (default=True) 是否降低一些未达到最佳阈值的阈值,这些阈值不会出现在绘制的ROC曲线上。 这对于创建较浅的ROC曲线很有用。 版本0.17中的新功能:参数drop_intermediate。

    返回值

    返回值 说明
    fpr array, shape = [>2] 增加假正例率,使得元素i是score >= thresholds[i]预测的假正例率。
    tpr array, shape = [>2] 增加真正例率,使得元素i是score >= thresholds[i]的预测的真正例率。
    thresholds array, shape = [n_thresholds] 用于计算fpr和tpr的决策函数的阈值递减。 thresholds [0]表示没有实例在预测中,可以任意设置为max(y_score)+ 1。
  8. 真正率假正率真负率假负率

    真正率:在所有实际正例的样本中,正确判断为正例的概率;

    假正率:在所有实际负例的样本中,错误判断为负例的概率;

    真负率:在所有实际负例的样本中,正确判断为负例的概率;

    假负率:在所有实际正例的样本中,错误判断为正例的概率。

    T

    P

    R

    =

    T

    P

    T

    P

    +

    F

    N

    F

    P

    R

    =

    F

    P

    F

    P

    +

    T

    N

    T

    N

    R

    =

    T

    N

    T

    N

    +

    F

    P

    F

    N

    R

    =

    F

    N

    F

    N

    +

    T

    P

    TPR=frac{TP}{TP+FN} quad FPR=frac{FP}{FP+TN} quad TNR=frac{TN}{TN+FP} quad FNR=frac{FN}{FN+TP} quad

    TPR=TP+FNTPFPR=FP+TNFPTNR=TN+FPTNFNR=FN+TPFN
    对应sklearn包

    sklearn.metrics.confusion_matrix(y_true, y_pred, *, labels=None, sample_weight=None, normalize=None)

    参数

    参数 说明
    y_true array-like of shape (n_samples,) 真实目标值。
    y_pred array-like of shape (n_samples,) 分类器返回的估计目标。
    labels array-like of shape (n_classes), default=None 索引矩阵的标签列表。可用于重新排序或选择标签的子集。如果指定None,则那些在y_true或y_pred中至少出现一次的标签将按照排序使用。
    sample_weight array-like of shape (n_samples,), default=None 样本权重。 版本0.18中的新功能。
    normalize {‘true’, ‘pred’, ‘all’}, default=None 对真实(行),预测(列)条件或所有总体的混淆矩阵进行归一化。 如果为None,则不会对混淆矩阵进行归一化。

    返回值

    返回值 说明
    C ndarray of shape (n_classes, n_classes) 混淆矩阵,其第i行和第j列条目指示真实标签为第i类且预测标签为第j类的样本数。

3.3. 回归任务

  1. 均方误差(MSE)或L2范数损失:通过计算真实值与预测值的差值的平方和的均值来衡量距离。

    M

    S

    E

    =

    1

    m

    i

    =

    1

    m

    (

    f

    (

    x

    i

    )

    y

    i

    )

    2

    MSE=frac{1}{m} sum_{i=1}^{m}{(f(x_i)-y_i)^2}

    MSE=m1i=1m(f(xi)yi)2

对应sklearn包

sklearn.metrics.mean_squared_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average', squared=True)

参数

参数 说明
y_true array-like of shape (n_samples,) or (n_samples, n_outputs) 真实目标值。
y_pred array-like of shape (n_samples,) or (n_samples, n_outputs) 预测目标值。
sample_weight array-like of shape (n_samples,), optional 样本权重。
multioutput string in [‘raw_values’, ‘uniform_average’] or array-like of shape (n_outputs) 定义多个输出值的汇总。类似数组的值定义了用于平均误差的权重。 - ‘raw_values’: 如果是多输出格式的输入,则返回完整的错误集。 - ‘uniform_average’: 所有输出的误差均以相同的权重平均。
squared boolean value, optional (default = True) 如果为True,则返回MSE值;如果为False,则返回RMSE值。

返回值

返回值 说明
loss float or ndarray of floats 非负浮点值(最佳值为0.0)或浮点值数组,每个目标对应一个浮点值。
  1. 均方根误差(RMSE): 通过计算真实值与预测值的差值的平方和的均值的标准差来衡量距离。

    R

    M

    S

    E

    =

    1

    m

    i

    =

    1

    m

    (

    f

    (

    x

    i

    )

    y

    i

    )

    2

    RMSE=sqrt{ frac{1}{m} sum_{i=1}^{m}{(f(x_i)-y_i)^2}}

    RMSE=m1i=1m(f(xi)yi)2

  2. 平均绝对误差(MAE)或L1范数损失: 通过计算预测值和真实值之间的距离的绝对值的均值来衡量距离。

    M

    A

    E

    =

    1

    m

    i

    =

    1

    m

    y

    i

    f

    (

    x

    i

    )

    MAE=frac{1}{m} sum_{i=1}^{m}|{y_i-f(x_i)|}

    MAE=m1i=1myif(xi)

    对应sklearn包

    sklearn.metrics.mean_absolute_error(y_true, y_pred, *, sample_weight=None, multioutput='uniform_average')

    参数

    参数 说明
    y_true array-like of shape (n_samples,) or (n_samples, n_outputs) 真实目标值。
    y_pred array-like of shape (n_samples,) or (n_samples, n_outputs) 预测目标值。
    sample_weight array-like of shape (n_samples,), optional 样本权重。
    multioutput string in [‘raw_values’, ‘uniform_average’] or array-like of shape (n_outputs) 定义多个输出值的汇总。类似数组的值定义了用于平均误差的权重。 - ‘raw_values’: 如果是多输出格式的输入,则返回完整的错误集。 - ‘uniform_average’: 所有输出的误差均以相同的权重平均。

    返回值

    返回值 说明
    loss float or ndarray of floats 如果多输出为‘raw_values’,则分别为每个输出返回均值绝对错误。如果多输出是‘uniform_average’或权重的ndarray,则将返回所有输出错误的加权平均值。 MAE输出为非负浮点。最佳值为0.0。

3.4. 无监督任务

轮廓系数:适应于实际类别信息未知的情况。对于单个样本,设a是与它同类别中其它样本的 平均距离,b是与它距离最近不同类别中样本的平均距离,定义为:

S

=

b

a

m

a

x

(

a

,

b

)

S=frac{b-a}{max(a,b)}

S=max(a,b)ba
对应sklearn包

sklearn.metrics.silhouette_score(X, labels, *, metric='euclidean', sample_size=None, random_state=None, **kwds)

参数

参数 说明
X array [n_samples_a, n_samples_a] if metric == “precomputed”, or, [n_samples_a, n_features] otherwise 样本之间的成对距离数组或特征数组。
labels array, shape = [n_samples] 每个样本的预测标签。
metric string, or callable 计算特征阵列中实例之间的距离时使用的度量。如果metric是字符串,则它必须是metrics.pairwise.pairwise_distances允许的选项之一。如果X是距离数组本身,则使用metric=“precomputed”。
sample_size int or None 在数据的随机子集上计算轮廓系数时要使用的样本大小。如果sample_size为None,则不使用采样。
random_state int, RandomState instance or None, optional (default=None) 确定用于选择样本子集的随机数生成。当sample_size不为None时使用。在多个函数调用之间传递int以获得可重复的结果。请参阅词汇表
**kwds optional keyword parameters 任何其他参数都直接传递给距离函数。如果使用scipy.spatial.distance度量,则参数仍取决于度量。有关用法示例,请参见scipy文档。

返回值

返回值 说明
silhouette float 所有样本的平均轮廓系数。

4. 机器学习用到的python库

4.1. Numpy

  • Numpy:通常用来进行矢量化的计算
  • 常用函数:
创建数组
np.array() 用于创建一维或多维数组
np.arange() 在给定的间隔内返回具有一定步长的整数
np.linspace() 创建一个具有指定间隔的浮点数的数组
np.random.randint() 在一个范围内生成n个随机整数样本
np.zeros() 创建一个全部为0的数组
np.ones() 创建一个全部为1的数组
np.full() 创建一个单独值的n维数组
数组操作
np.min() 返回数组中的最小值
np.max() 返回数组中的最大值
np.mean() 返回数组的平均数
np.median() 返回数组的中位数
np.np.sort() 对数组排序
  • 优点:
    1. numpy的基本对象是ndarray,最大的优势在于用它进行多维数组的计算,不用写多重for循环,直接可以进行矢量化的运算
    2. 封装了vectorize函数,可以把处理标量的函数矢量化,极大地提高了计算速度
  • 缺点:
    1. ndarray中的数据类型必须相同,于是有了pandas可以处理不同数据类型的数据集

4.2. Pandas

  • Pandas: 通常用来处理结构化的数据
  • 优点:
    1. 数据结构Series,理解为一个一维的数组,只是index名称可以自己改动。类似于定长的有序字典,有index和value
    2. 数据结构DataFrame,理解为一个二维数组,索引有两个维度,可更改。一行一样本,一列一特征。每一行都可以看作一个样本,每一列都可以看作一个Series
    3. 封装的to_datetime函数转换日期数据类型,支持大多数的日期格式,而且转换后的datetime类型数据支持日期运算

4.3. Matplotlib

  • Matplotlib: 用来绘制出直观的图表

Figure:是指整个图形,也就是一张画布,包括了所有的元素,如标题,轴线等;
Axes:绘制 2D 图像的实际区域,也称为轴域区,或者绘图区;
Axis:是指图形的水平轴和垂直轴,包括轴的长度、轴的标签和轴的刻度等;

xlabelylabel: 设置横轴、纵轴标签及大小

xticksyticks: 设置坐标轴刻度的字体大小

plt.legend():添加图例

plt.scatter():函数用于生成一个scatter散点图

plt.plot(x, y, format_string, **kwargs) :绘制函数曲线(绘制坐标图)

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>