精华内容
下载资源
问答
  • 2019-03-28 20:20:00
    机器学习算法
    类型缩写全称中文名称
    分类NNNeural Network神经网络
     Decision Tree决策树
    SVMSupport Vector Machine支持向量机
     XGBoostXGBoost
    RFRandom Forest随机森林
    LRLogistics Regression逻辑回归
     LightGBMLightGBM
    GBDTGradient Boosting Decison Tree梯度提升树
    回归 XGBoostXGBoost
     Decision Tree决策树
    RFRandom Forest随机森林
    SVMSupport Vector Machine支持向量机
     LightGBMLightGBM
     Neural Network神经网络
    聚类 KmeansKMeans聚类算法
      KMeans聚类_选择最佳K值
    SCSpectral Clustering谱聚类算法
    DBSCANDensity-Based Spatial Clustering of Applications with Noise具有噪声的基于密度的聚类方法
    BIRCHBalanced Iterative Reducing and Clustering Using Hierarchies利用层次方法的平衡迭代规约和聚类
    APAffinity Propagation Clustering吸引力传播聚类算法
    HACHierarchical Agglomerative Clustering层次凝聚聚类算法
    模型融合  基学习器模型组合
     Bagging 
     Stacking 
     Voting 
    更多相关内容
  • “Taxamatch”是一种算法,设计用于在分类数据库中对分类群的科学名称进行模糊匹配 - 单独属或二项式(属 + 种)。 它利用字符替换(类似于 Soundex)来捕获语音错误,并利用自定义编辑距离 (ED) 方法来捕获非语音...
  • 目标检测算法分类

    千次阅读 2021-12-07 16:54:40
    目标检测算法分类: 1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类 代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN 2、端到端的目标检测:采用一个网络一步到位,输入图片,输出有哪些...

    目标检测算法分类:

    1、两步走的目标检测:先找出候选的一些区域,再对区域进行调整分类

                                          代表:R-CNN、SPP-net、Fast R-CNN、Faster R-CNN

    2、端到端的目标检测:采用一个网络一步到位,输入图片,输出有哪些物体,物体在什么位置

                                           代表:YOLO、SSD

    目标检测的任务:

    分类原理:

            如下是一张CNN组成图,输入一张图片,经过其中卷积、激活、池化相关层,最后加入全连接层达到分类概率的效果。

     分类的损失与优化:

            在训练的时候需要计算每个样本的损失,那么CNN做分类的时候使用softmax函数计算结果,损失为交叉熵损失

             对于目标检测来说不仅仅是分类这样简单的一个图片输出一个结果,而且还需要输出图片中目标的位置信息,所以从分类到检测,如下图标记了过程:

    检测的任务:

    分类:

            N个类别

            输入:图片

            输出:类别标签

            评估指标:Accuracy

    定位:

            N个类别

            输入:图片

            输出:物体的位置坐标

            主要评估指标:IOU

            其中我们得出来的(x,y,w,h)有一个专业的名词,叫做bounding box(bbox) 

    物体位置:

    x,y,w,h:x,y:物体的中心点位置,以及中心点距离物体两边的长款

    xmin,ymin,xmax,ymax:物体位置的左上角、右下角坐标

    目标定位的简单实现思路:

            在分类的时候我们直接输出各个类别的概率,如果加上定位的话,我们可以考虑在 网络的最后输出加上位置信息。(增加一段全连接输出4个位置,做损失计算)

    回归位置:

    增加一个全连接层,即为FC1、FC2

    FC1:作为类别的输出

    FC2:作为这个物体位置数值的输出

             假设有10个类别,输出[p1,p2,p3,...,p10],然后输出这一个对象的四个位置信息[x,y,w,h]。同理要知道网络输出什么,如果衡量整个网络的损失

            对于分类的概率,还是使用交叉熵损失

            位置信息具体的数值,可使用MSE均方误差损失(L2损失)

    如下所示:

    两种Bounding box名称:

    在目标检测当中,对bbox主要由两种类别。

            Ground-truth bounding box:图片当中真实标记的框

            Predicted bounding box:预测的时候标记的框

    一般在目标检测当中,我们预测的框可能有多个,真实框也有很多个。

    目标检测-Overfeat模型

    滑动窗口:

    目标检测的暴力方法是从左到右、从上到下滑动窗口,利用分类识别目标。

            为了在不同观察距离处检测不同的目标类型,使用不同大小和宽高比的窗口

     注:这样就编程每张子图偏输出类别以及位置,变成分类问题。

    但是滑动窗口需要初始设定一个固定大小的窗口,这就遇到了一个问题,有些物体适应框不一样

             所以需要提前设定K个窗口,每个窗口滑动提取M个,总共K*M个图片,通常会直接将图像变形转换成固定大小的图像,变形图像块被输入CNN分类器中,提取特征后,我们使用一些分类器识别类别和该边界框的另一个线性回归器。

    Overfeat模型总结:

            这种方法类似一种暴力穷举的方法,会消耗大量的计算力量,并且由于窗口大小问题可能会造成效果不佳,但是提供了一种解决目标检测问题的思路。

    R-CNN:

            不使用暴力方法,而是用候选区域方法(region propasal method),创建目标检测的区域改变了图像领域实现五团体检测模型思路,R-CNN是以深度神经网络为基础的物体检测的模型。

    (但是对于多个目标的情况,就不能以固定个数输出物体的位置值)

     步骤(以AlexNet网络为基准)

    1、找出图片中可能存在目标的候选区域region proposal

    2、将候选区域调整为适应AlexNet网络的输入图像的大小227*227,通过CNN对候选区域提取特征向量,2000个建议框的CNN特征组合成网络Alex*Net最终输出:2000*4096维矩阵

    3、将2000*4096维特征经过SVM分类器(20种分类,SVM是二分类器,则有20个SVM),获得2000*20种类别矩阵。

    4、分别对2000*20维矩阵中进行非极大值抑制(NMS:non-maximum suppression)提出重叠建议框,得到与目标物体最高的一些建议框

    5、修正bbox,对bbox做回归微调

    CNN网络提取特征:

    在候选区域的基础上提取出更高级、更抽象的特征,这些高级特征是作为下一步的分类器、回归的输入数据。

     提取这些特征将会保存在磁盘中(这些提取的特征才是真正的要训练的数据)

    特征向量训练分类器SVM:

    1、假设一张图片的2000个候选区域,那么提取出来的就是2000*4096这样的特征向量(R-CNN当中默认CNN层输出4096特征向量)

    2、R-CNN选用SVM进行二分类。假设检测20个分类,那么会提供20个不同类别的SVM分类器,每个分类器都会对2000个候选区域的特征向量分别判断一次,这样得出[2000,20]的得分矩阵,如下图所示

    每个SVM分类器做的事情,判断2000个候选区域是某类别,还是背景

    非极大抑制(NMS):

    目的:筛选候选区域,目标是一个物体只保留一个最优的框,来抑制那些冗余的候选框

    迭代过程:

    1、对于所有的2000个候选区域得分进行概率筛选,0.5

    2、剩余的候选框

                    假设图片真实物体个数为2(N),筛选之后候选框为5(P),计算N中每个物体位置与所有P的交并比loU计算,得到P中每个候选框对应loU最高的N中一个

                    如下图,A,C候选框对应左边车辆,B,D,E对应右边车辆

     

     假如现在滑动窗口有:A、B、C、D、E5个候选框

            第一轮:对于右边车辆,假设B是得分最高的,与B的loU>0.5删除。现在与B计算loU,DE结果>0.5,剔除DE,B作为一个预测结果。

            第二轮:对于左边车辆,AC中,A的得分最高,与A计算loU,C的结果>0.5,剔除C,A作为一个结果

    最终结果为在这个5个中检测出了两个目标为A和B

    SS算法得到的物体位置已经固定了,但是我们筛选出的位置不一定就真的特别准确,需要对A和B进行最后的修正

    修正候选区域:

            那么通过非最大一直筛选出来的候选框就不一定非常准确怎么办?R-CNN提供了这样的方法,建立了一个bbox regressor

            回归用于筛选候选区域,使之回归于ground-truth,默认认为这两个框之间是线性关系,因为在最后筛选出来的候选区域和ground-truth很接近了。

    修正过程(线性回归)

     

     

    IoU交并比:

     IoU(交并比)

            两个区域的重叠程度overlap:候选区域和标定区域的IoU值

     通常Correct:类别正确且IoU>0.5

    平均精确率:

    训练样本的标记:候选框(如RCNN2000个)标记

            1、每个ground-truth box有着最高的IoU的anchor标记为正样本

            2、剩下的anchor/anchors与任何ground-truth box的IoU大于0.7记为正样本,IoU小于0.3,记为负样本

            定义:多个分类任务的AP的平均值

                    mAP=所有类别的AP之和/类别约总个数

                    注:PR曲线,而AP就是这个曲线下的面积(ROC与AUC)

    方法步骤:

            1、对于其中一个类别C,首先将算法输出的所有C类别的预测框,按预测的分数confidence排序(RCNN中就是SVM的输出分数)

            2、设定不同的k值,选择top k个预测框,计算FP和TP,计算Precision和AP

            3、将得到的N个类别的AP取平均,即得到AP;AP是针对单一类别的,mAP是将所有类别的AP求和,再取平均

    首先回顾精确率和召回率:

            左边一整个矩行中的表示ground truth之中为1的(即为正确的)数据

            右边一整个矩行中的数表示ground truh之中为0的数据

            精度precision的计算是用检测正确的数据个数/总的检测个数

     

     RCNN的缺点:

    1、训练阶段多:步骤繁琐:微调网络+训练SVM+训练边框回归器

    2、训练耗时:占用磁盘空间大:5000张图像产生几百G的特征文件(VOC数据集的检测结果,因为SVM的存在)

    3、处理速度慢:使用GPU,VGG16模型处理一张图像需要47s

    4、图像形状变化:候选区要经过crop/warp进行固定大小,无法保证图片变形

    SPPNet:

    SPPNet主要存在两点改进地方,提出了SPP层

            减少卷积计算

     

     映射:

            原始图片经过CNN变成feature map,原始图片通过选择性搜索(SS)得到了候选区域(Region of Interest),现在需要将基于原始图片的候选区域映射到feature map中特征向量。映射过程图参考如下:

     整个映射过程有具体的公式,如下

    假设(x',y')(x',y')表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么他们之间有如下转换关系,这种映射关心与网络结构有关:(x,y)=(S*x',S*y'),即

    左上角的点:x'=[x/S]+1

    右下角的点:x'=[x/S]-1

    其中S就是CNN中所有的strides的乘机,包含了池化、卷积的stride。

    Fast R-CNN:

    改进地方:提出一个Rol pooling,然后整合整个模型,把CNN、Rolpooling、分类器、bbox回归几个模块整个一起训练

     步骤:

    1、首先将整个图片输入到一个基础卷积网络,得到整张图的fearure map

    2、将选择性搜索算法的结果region proposal(Rol)映射到feature map中

    3、Rol pooling layer提取一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个Rol特征向量(此步骤是对每一个候选区域都会进行同样的操作)

            其中一个是传统softmax层进行分类,输出类别有K个类别加上“背景”类

            另一个是bounding box regressor

    Rol pooling:

            首先Rol pooling只是一个简单版本的SPP,目的是为了减少计算时间并得出固定长度的向量。

     Rol池使用最大池化将任何有效的Rol区域内的特征转换成具有H*W的固定空间范围的小feature map,其中H和W是超参数它们独立于任何特定的Rol。

    R-CNN、SPPNet、Fast R-CNN效果对比:

     

     

    展开全文
  • 算法简介、7种算法分类

    千次阅读 2018-02-26 08:49:00
    一、算法 算法是以函数模板的形式实现的。常用的算法涉及到比较、交换、查找、搜索、复制、修改、移除、反转、排序、合并等等。 算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用。 算法的...

    一、算法

    算法是以函数模板的形式实现的。常用的算法涉及到比较、交换、查找、搜索、复制、修改、移除、反转、排序、合并等等。
    算法并非容器类型的成员函数,而是一些全局函数,要与迭代器一起搭配使用。
    算法的优势在于只需实作一份,可以适应所有的容器,不必为每一种容器量订制。也可以与用户定义的容器搭配。

    算法尾词:

    _if

    比如find(按某个值来查找),find_if(按某个条件来查找)

    _copy

    这个尾词用来表示在算法中,元素不光被操作,还会被复制到目标区间。比如reverse、reverse_copy


    二、算法分类

    1、非变动性算法既不改变元素次序,也不改变元素值。



    2、变动性算法,要么直接改变元素值,要么就是在复制到另一个区间的过程中改变元素值。如果是第二种情况,原区间不会发生变化



    3、移除性算法是一种特殊的变动性算法。移除性算法是在一区间内移除某些元素,这些算法并不能改变元素的数量,它们只是以逻辑上的思考,将原本置于后面的“不需要移除元素”向前移动,覆盖那些被移除元素而已。它们都返回新区间的逻辑终点。移除性算法也可以在复制的过程中执行移除。注意,目标区间不能是关联式容器。



    4、变序性算法改变元素次序,但不改变元素值。这些算法不能用于关联式容器,因为关联式容器中,元素有固定的次序。



    5、排序算法,排序算法是一种特殊的变序算法。但比一般的变序性算法更复杂,花费更多的时间



    6、已序区间算法,一般来说这些算法的结果,仍然是已序的。



    7、用来处理数值的算法,需要加上头文件 #include<numeric>


    在后面的文章中将对7种算法分别举一些例子来示例。


    参考:

    C++ primer 第四版
    Effective C++ 3rd
    C++编程规范

    展开全文
  • 分类算法

    千次阅读 2020-12-09 18:53:16
    逻辑回归(Logistic Regression)是机器学习中的一种分类模型,逻辑回归是一种分类算法,虽然名字中带有回归。 2. 应用场景 数据不均衡问题 广告点击率 是否为垃圾邮件 是否患病 金融诈骗 虚假账号 3. 原理 线性...

    1. 简介

    1.1 定义

    • 分类算法通过对已知类别训练集的计算和分析,从中发现类别规则并预测新数据的类别。

    1.2 应用场景

    • 分类算法是解决分类问题的方法,是数据挖掘、机器学习和模式识别中一个重要的研究领域。

    • 分类的主要用途和场景是“预测”,基于已有的样本预测新样本的所属类别,例如信用评级、风险等级、欺诈预测等。 分类算法也可以用于知识抽取,通过模型找到潜在的规律,帮助业务得到可执行的规则。

    1.3 地位

    • 分类和回归是解决实际运营问题中非常重要的两种分析和挖掘方法。

    1.4 分类

    • 常用的分类算法包括朴素贝叶斯、逻辑回归、决策树、随机森林、支持向量机等。

    2. 应用

    2.1 简介

    案例 电信客户流失预测

    • AT&T数据,用户个人,通话,上网等信息数据
    • 充分利用数据预测客户的流失情况
    • 帮助挽留用户,保证用户基数和活跃程度

    2.2 数据说明

    • CustomerID 客户ID
    • Gender 性别
    • partneratt 配偶是否也为att用户
    • dependents_att 家人是否也是att用户
    • landline 是否使用att固话服务
    • internet_att/internet_other 是否使用att的互联网服务
    • Paymentbank/creditcard/electroinc 付款方式
    • MonthlyCharges 每月话费
    • TotalCharges 累计话费
    • Contract_month/1year 用户使用月度/年度合约
    • StreamingTv/streamingMovies 是否使用在线视频或者电影app
    • Churn 客户转化的flag

    2.3 处理流程

    • 分析流程:数据概况分析->单变量分析->相关性分析与可视化->回归模型
    • 数据概况分析
      • 数据行/列数量
      • 缺失值分布
    • 单变量分析
      • 数字型变量的描述指标(平均值,最大最小值,标准差)
      • 类别型变量(多少个分类,各自占比)
      • 正负样本占比
    • 相关性分析与可视化
      • 按类别交叉对比
      • 变量之间的相关性分析
      • 散点图/热力图
    • 逻辑回归分析
      • 模型建立
      • 模型评估与优化

    2.4 实现

    步骤
    
    1 加载数据,查看churn.info()
    
    2 对churn列和gender列进行onehot编码
    
    3 churn的onehot编码中churn_yes作为标签列,churn_no丢弃
    
    gender_yes gender_no都保留
    
    **4 churn.flag.value_counts() churn.flag.value_counts(1)查看正负样本分布** 正负样本是人为定义的,关注哪个类别则定义该类别为正样本
    
    5 按照flag分组,计算平均值,查看相关特征
    
    6 围绕flag变量,分析其他变量与flag的相关关系
    
    7 选择相关性比较高的作为特征
    
    8 构建模型,训练评估
    
    9 如果评估结果不理想,则重新选择特征重新训练
    
    
    import pandas as pd
    import seaborn as sns
    import matplotlib.pyplot as plt
    %matplotlib inline 
    churn=pd.read_csv('churn.csv')
    churn.info()
    
      RangeIndex: 7043 entries, 0 to 7042
      Data columns (total 16 columns):
      Churn                7043 non-null object
      gender               7043 non-null object
      Partner_att          7043 non-null int64
      Dependents_att       7043 non-null int64
      landline             7043 non-null int64
      internet_att         7043 non-null int64
      internet_other       7043 non-null int64
      StreamingTV          7043 non-null int64
      StreamingMovies      7043 non-null int64
      Contract_Month       7043 non-null int64
      Contract_1YR         7043 non-null int64
      PaymentBank          7043 non-null int64
      PaymentCreditcard    7043 non-null int64
      PaymentElectronic    7043 non-null int64
      MonthlyCharges       7043 non-null float64
      TotalCharges         7043 non-null float64
      dtypes: float64(2), int64(12), object(2)
      memory usage: 880.5+ KB
    
    #预测目标是churn,是类别型变量  gender也是类别型变量 需要对类别型变量进行处理
    churn.head()
    
        Churn  gender  Partner_att  Dependents_att  landline  internet_att  
      0    No  Female            1               0         0             1   
      1    No    Male            0               0         1             1   
      2   Yes    Male            0               0         1             1   
      3    No    Male            0               0         0             1   
      4   Yes  Female            0               0         1             0   
    
         internet_other  StreamingTV  StreamingMovies  Contract_Month  Contract_1YR  
      0               0            0                0               1             0   
      1               0            0                0               0             1   
      2               0            0                0               1             0   
      3               0            0                0               0             1   
      4               1            0                0               1             0   
    
         PaymentBank  PaymentCreditcard  PaymentElectronic  MonthlyCharges  
      0            0                  0                  1           29.85   
      1            0                  0                  0           56.95   
      2            0                  0                  0           53.85   
      3            1                  0                  0           42.30   
      4            0                  0                  1           70.70   
    
         TotalCharges  
      0         29.85  
      1       1889.50  
      2        108.15  
      3       1840.75  
      4        151.65
    
    #需要把churn和gender转变为数字型变量,使用get_dummies
    churn=pd.get_dummies(churn)
    churn.head()
    
         Churn_No  Churn_Yes  gender_Female  gender_Male  
      0         1          0              1            0  
      1         1          0              0            1  
      2         0          1              0            1  
      3         1          0              0            1  
      4         0          1              1            0
    
    #数据整理,将churn_yes保留,将female保留,drop不需要的数据
    churn.drop(['Churn_No','gender_Male'],axis=1,inplace=True)
    #变量大小写不规则,统一变成小写
    churn.columns=churn.columns.str.lower()
    churn.head()
    
         churn_yes  gender_female  
      0          0              1  
      1          0              0  
      2          1              0  
      3          0              0  
      4          1              1
    
    #将churn_yes重命名,方便后续的变量编写
    churn=churn.rename(columns={'churn_yes':'flag'})
    #二分类模型,分析flag 1和0的占比
    churn.flag.value_counts()
    
    
      0    5174
      1    1869
      Name: flag, dtype: int64
    
    churn.flag.value_counts(1)
    
      0    0.73463
      1    0.26537
      Name: flag, dtype: float64
    
    summary=churn.groupby('flag')
    summary.mean()
    
            partner_att  dependents_att  landline  internet_att  internet_other  
      flag                                                                        
      0        0.528218        0.344801  0.901044      0.379204        0.347700   
      1        0.357945        0.174425  0.909042      0.245586        0.693954   
    
            streamingtv  streamingmovies  contract_month  contract_1yr  paymentbank  
      flag                                                                            
      0        0.365868         0.369927        0.429068      0.252609     0.248550   
      1        0.435527         0.437667        0.885500      0.088818     0.138042   
    
            paymentcreditcard  paymentelectronic  monthlycharges  totalcharges  
      flag                                                                       
      0              0.249324           0.250097       61.265124   2545.918081   
      1              0.124131           0.573034       74.441332   1528.514714   
    
            gender_female  
      flag                 
      0          0.492656  
      1          0.502408
    
    • 观察flag在0和1的情况下,所有自变量的差别 internet_other变量,在0的分组中,均值是0.35,在1的分组中,均值是0.69。数据显示如果使用别的公司的互联网,用户流失的概率就越高
    sns.countplot(y='contract_month',hue='flag',data=churn)
    

    plt_lr

    • 结论:contract_month为1的客户流失的概率更高,即与非按月付费客户相比,按月付费客户流失比例高
    • 相关性分析
    #围绕flag变量,分析其他变量与flag的相关关系
    churn.corr()[['flag']].sort_values('flag',ascending=False)
    
                           flag
    flag               1.000000
    contract_month     0.405103
    internet_other     0.308020
    paymentelectronic  0.301919
    monthlycharges     0.193356
    streamingtv        0.063228
    streamingmovies    0.061382
    landline           0.011942
    gender_female      0.008612
    paymentbank       -0.117937
    internet_att      -0.124214
    paymentcreditcard -0.134302
    partner_att       -0.150448
    dependents_att    -0.164221
    contract_1yr      -0.177820
    totalcharges      -0.198175
    
    # contract_month与internet_other与flag相关性高
    
    • 逻辑回归模型
    #设定因变量与自变量, y 是 flag, x 根据刚才的相关分析挑选contract_month,internet_other与streamingtv
    #自变量可以分为几类,partner/dependents,internet,streaming,contract,payment,charges,后续大家可以自己挑选进行建模
    y=churn['flag']
    x=churn[['contract_month','internet_other','streamingtv']]
    #模型优化,streamingtv调整为paymentelectronic
    y=churn['flag']
    x=churn[['contract_month','internet_other','paymentelectronic']]
    #调用sklearn模块,随机抽取训练集与测试集
    from sklearn.model_selection import train_test_split
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.3,random_state=100)
    #模型优化,测试集与训练集对半分,第三次也跑这里
    from sklearn.model_selection import train_test_split
    x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.5,random_state=100)
    #使用sklearn
    from sklearn import linear_model
    lr=linear_model.LogisticRegression()
    lr.fit(x_train,y_train)
    """
      LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
                intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
                penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
                verbose=0, warm_start=False)
    """
    
    • 模型的截距与系数
    #第一次
    lr.intercept_
    lr.coef_
    #array([-3.21761938])
    #array([[2.19790192, 1.14360005, 0.23641705]])
    #第二次,测试集与训练集对半分
    lr.intercept_
    array([-3.26144359])
    array([[2.23886897, 1.09248895, 0.32579547]])
    #第三次,变量调整
    array([-3.18770265])
    array([[2.0019671 , 1.02830763, 0.62165925]])
    
    • 模型的评估
    y_pred_train=lr.predict(x_train)
    y_pred_test=lr.predict(x_test)
    import sklearn.metrics as metrics
    metrics.accuracy_score(y_train,y_pred_train)
    from sklearn.metrics import roc_curve,auc
    fpr,tpr,threshold=roc_curve(y_train,y_pred_train)
    roc_auc=auc(fpr,tpr)
    
    • 用分类分析来提炼规则、提取变量、处理缺失值

      • 分类分析用于提炼应用规则 预测是分类分析的主要应用方向,但将分类用于提炼应用规则,为数据化运营提供规则支持也是其重点应用之一,这种应用相对于其他算法更加具有落地价值。常见的应用场景如下:

        • 要针对沉默会员做会员重新激活,应该挑选具有什么特征的会员?
        • 商品A库存积压严重,现在要通过促销活动清仓,选择哪些类型的促销活动更容易实现该目标?
        • 网站需要大流量广告位来满足VIP商家的精准广告投放,具有哪些特征的广告位更符合VIP商家的客户需求?
    • 从分类算法中提炼特征规则,利用的是在构建算法过程中的分类规则

      • 以决策树为例,决策树的分裂节点是表示局部最优值的显著特征值,每个节点下的特征变量以及对应的值的组合构成了规则。
    • 分类分析用于提取变量特征

      • 具体实现思路是:获取原始数据集并对数据做预处理,将预处理的数据集放到分类算法中进行训练,然后从算法模型中提取特征权重信息。
      • 分类分析用于处理缺失值

    3. 聚类和分类算法的区别

    • 学习方式不同聚类是一种非监督式学习算法,而分类是监督式学习算法。
    • 对源数据集要求不同,有无目标值
    • 应用场景不同
      • 聚类一般应用于数据探索性分析、数据降维、数据压缩等探索性、过程性分析和处理
      • 分类更多地用于预测性分析和使用。
    • 解读结果不同。聚类算法的结果是将不同的数据集按照各自的典型特征分成不同类别,不同人对聚类的结果解读可能不同;而分类的结果却是一个固定值(例如高、中、低、是、否等),不存在不同解读的情况。
    • 模型评估指标不同
      • 聚类分析没有所谓的“准确”与否,以及多么准确的相关度量,更多的是基于距离的度量。如果是对带有标签的数据集做聚类则可以做相似度、完整度等方面的评估
      • 而分类模型的指标例如准确率、混淆矩阵、提升率等都有明显的好与坏、提升程度等评估指标。例如准确率、混淆矩阵、提升率等都有明显的好与坏、提升程度等评估指标。
    • 假如原始数据集带有类别标签,那么选择分类或聚类算法都可以(标签列数据并不是一定要使用)。假如原始数据集不带有类别标签,那么只能选择使用聚类算法。
    • 有关分类和聚类的应用示例
      • 假如现在公司要对某新会员做促销活动,例如推荐商品、提供个性化信息、推荐最感兴趣的热榜等,并尽量提供该用户感兴趣的内容。
      • 分类:基于现有的会员及其特定类别标签(可选择有代表性或与实际运营场景最相关的类别标签)做分类模型训练,将该新用户的数据作为新的样本输入模型,预测得到该用户所属的目标类别。接着计算该类别下用户最经常购买的商品、经常浏览的信息等,并给出推荐内容。
      • 聚类:将新的会员和现有的会员作为一个整体做聚类分析,然后获得该会员所属的聚类类别,进而提取其所在类别下其他会员的经常购买商品、经常浏览信息等,并给出推荐内容。

    4. 分类分析算法选择

    • 文本分类:朴素贝叶斯,例如电子邮件中垃圾邮件的识别。
    • 训练集较小,选择高偏差且低方差的分类算法:朴素贝叶斯、支持向量机(不容易过拟合)
    • 算法模型的计算时间短和模型易用性,不要选支持向量机、人工神经网络
    • 重视算法的准确率:支持向量机或GBDT、XGBoost等基于Boosting的集成方法
    • 注重效果的稳定性或模型鲁棒性,那么应选择随机森林、组合投票模型等基于Bagging的集成方法。
    • 想得到有关预测结果的概率信息,基于预测概率做进一步的应用:逻辑回归
    • 担心离群点或数据不可分并且需要清晰的决策规则:决策树

    5. 分类评估

    • 准确率:(对不对)
      • (TP+TN)/(TP+TN+FN+FP)
    • 精确率 – 查的准不准
      • TP/(TP+FP)
    • 召回率 – 查的全不全
      • TP/(TP+FN)
    • F1-score
      • 反映模型的稳健性
    • 不同的场景关注的指标不一样

    5…1 混淆矩阵

    在分类任务下,预测结果(Predicted Condition)与正确标记(True Condition)之间存在四种不同的组合,构成混淆矩阵(适用于多分类)

    混淆矩阵
    TP True positive

    FN False nagative

    FP False positive

    TN True negative

    5.2. 精确率/查准率

    • 精确率(Precision):预测结果为正例样本中真实为正例的比例
    • TP/(TP+FP)

    精确率

    5.3. 召回率/查全率

    • 召回率(Recall):真实为正例的样本中预测结果为正例的比例(查得全,对正样本的区分能力)
    • TP/(TP+FN)

    召唤率

    5.4. F1-score

    反映了模型的稳健性

    F1-score

    5.5 ROC曲线与AUC指标

    1. TPR与FPR

    • 真阳性率
      • 所有真实类别为1的样本中,预测类别为1的比例

    正阳性率

    • 假阳性率
      • 所有真实类别为0的样本中,预测类别为1的比例

    2. ROC曲线

    多次调整阈值得到若干组TPR FPR的值,把这些值在同一个坐标系中表示出来,就得到了ROC曲线

    最极端,FPR=0,TPR=1,

    FPR=0时,即FP=0;TPR=1时,即FN=0,就是所有预测错了的样本都为0,也就是所有的样本预测结果都是正确的

    此时对应的曲线下面积是1,如果roc曲线和对角线重合,则面积是0.5,此时模型的预测结果和瞎猜是一样的

    AUC指标,area under curve

    AUC=1,完美分类器

    0.5<AUC<1,优于随机猜测

    from sklearn.metrics import roc_auc_score

    • 通过tpr和fpr来进行图形绘制,然后绘制之后,行成一个指标auc
    • ROC曲线的横轴就是FPRate,纵轴就是TPRate,当二者相等时,表示的意义则是:对于不论真实类别是1还是0的样本,分类器预测为1的概率是相等的,此时AUC为0.5。
    • 在一个二分类模型中,假设采用逻辑回归分类器,其给出针对每个实例为正例的概率。
    • 通过设定一个阈值如0.6,概率大于等于0.6的为正例,小于0.6的为负例。对应的就可以算出一组(FPR,TPR),在平面中得到对应坐标点。
    • 随着阈值的逐渐减小,越来越多的实例被划分为正例,但是这些正例中同样也掺杂着真正的负实例,即TPR和FPR会同时增大。
    • 阈值最大时,对应坐标点为(0,0),即把所有样本都预测为负例,TP和FP都为0,对应的TPR和FPR为0;
    • 阈值最小时,对应坐标点(1,1),即把所有样本都预测为正例,FN和TN都为0,对应的TPR和FPR为1。

    ROC

    3. AUC指标

    • 越接近1,效果越好
    • 越接近0,效果越差
    • 越接近0.5,效果就是胡说
    • AUC的概率意义是随机取一对正负样本,正样本得分大于负样本得分的概率
    • AUC的范围在[0, 1]之间,并且越接近1越好,越接近0.5属于随机猜测
    • AUC=1,完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
    • 0.5<AUC<1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

    4. API

    from sklearn.metrics import roc_auc_score
    sklearn.metrics.roc_auc_score(y_true, y_score)
    
    • 计算ROC曲线面积,即AUC值
    • y_true:每个样本的真实类别,必须为0(反例),1(正例)标记
    • y_score:预测得分,可以是正例的估计概率、置信值或者分类器方法的返回值
    # 0.5~1之间,越接近于1约好
    y_test = np.where(y_test > 2.5, 1, 0)
    
    print("AUC指标:", roc_auc_score(y_test, y_predict)
    
    • AUC只能用来评价二分类
    • AUC非常适合评价样本不平衡中的分类器性能

    6. 分类评估报告api

    # y_true:真实目标值
    # y_pred:估计器预测目标值
    # labels:指定类别对应的数字
    # target_names:目标类别名称
    # return:每个类别精确率与召回率
    sklearn.metrics.classification_report(y_true, y_pred, labels=[], target_names=None )
    
    ret = classification_report(y_test, y_predict, labels=(2,4), target_names=("良性", "恶性"))
    print(ret)
    

    样本不均衡下的评估问题: 假设这样一个情况,如果99个样本癌症,1个样本非癌症,不管怎样全都预测正例(默认癌症为正例),准确率就为99%但是这样效果并不好

    展开全文
  • leetcode 分类 Algorithms README 算法-分类-实现(python)-总结 git commit 记录格式: {日期}:年/月/日,eg:20/03/31 更新案例字典{日期}{(当日次数)}:...{算法名称}增加内容{日期}{(当日次数)}:更新.py文件中例题。
  • 网络社区划分的算法分类

    万次阅读 2021-10-11 17:49:19
    单目标优化——模块度最优化算法 1.基于K派系过滤的社团检测(基于物理模型) 相关基础概念: K-派系(clique):网络中包含K个节点的全耦合子图,即K个节点中的任意两个节点之间都是相互连接的。 相邻:若两个K...
  • 分类算法改进 该项目包含主要分支将包含的算法主题集合、用作解决不同能力页面中包含的算法问题的工具的理论和示例。 目标: 提高分析能力 实践系统化和结构化的方法来解决算法挑战 分支机构: 该项目将包含与编程...
  • 鲁东大学信息与电气工程学院 商 务 智 能 实 验 报 告 20192020学年第一学期 课程名称 商务智能 实验题目 决策树分类数据挖掘 专 业 信息管理与信息系统 班 级 信管1702 姓 名 _ 邱勇溪 学 号 20172203261 2019年 11...
  • 数据挖掘算法——常用分类算法总结

    万次阅读 多人点赞 2019-06-17 10:55:22
    常用分类算法总结分类算法总结NBC算法LR算法SVM算法ID3算法C4.5 算法C5.0算法KNN 算法ANN 算法 分类算法总结 分类是在一群已经知道类别标号的样本中,训练一种分类器,让其能够对某种未知的样本进行分类分类算法...
  • 是一种经典的分类算法.注意,不是聚类算法.所以这种分类算法必然包括了训练过程.然而和一般性的分类算法不同,knn算法是一种懒惰算法.它并非像其他的分类算法先通过训练建立分类模型.,而是一种被动的分类过程.它是边...
  • 聚类算法分类及如何选择某类方法

    千次阅读 2022-03-22 10:14:57
    聚类算法分类: (1)划分聚类算法:也称为基于距离的聚类算法,此类算法中,簇的数量是随机选择的或最初给定的。属于这一类的算法有K-Meansl,PAM,CLARANSI等。 K-means聚类算法的不足之处在于它要多次扫描数据库,...
  • 机器学习算法分类及数据集划分

    千次阅读 2020-10-06 11:08:37
    2. 数据类型和算法分类 2.1 数据类型 2.2 机器学习算法分类 监督学习:既有特征值又有目标值。 无监督学习:只有特征值,无目标值。 2.3 监督学习 2.3.1 分类 (离散型) 1. K-近邻算法: 2. 贝叶斯分类: 3.决策...
  • leetcode 分类算法总结分为三部分 1.数据结构 2.LeetCode题目讲解 3.剩余为按照算法名称分类
  • knn算法实现电影分类

    千次阅读 2019-10-08 17:05:13
    KNN英文全称K-nearst neighbor,中文名称为K近邻算法,它是由Cover和Hart在1968年提出来的 KNN算法原理: 计算已知类别数据集中的点与当前点之间的距离; 按照距离递增次序排序; 选择与当前距离最小的k个点; 确定...
  • 网络社区划分的算法分类(2)

    万次阅读 2021-10-20 20:26:33
    NP-hard问题 介绍NP困难之前要说到P问题和NP问题,P问题是在多项式时间内可以被解决的问题,而NP问题是在多项式时间内可以被验证其正确性的问题。 NP困难(NP-hardness, non-deterministic polynomial-...进化算法启发
  • 常用的分类与预测算法

    万次阅读 2018-12-11 11:37:27
    算法名称 算法描述 回归分析 确定预测属性与其他变量间相互依赖的定量关系最常用的统计学方法 决策树 自顶向下的递归方式,在内部节点进行属性值的比较,并根据不同的属性值从该节点下分支,最终...
  • 机器学习之分类算法

    千次阅读 2020-09-09 22:46:40
    如果目标值为 类别, 则属于分类问题,使用分类算法 1、sklearn转换器和预估器(估计器) 转换器 —特征工程的父类 1)实例化(实例化的是一个转换器类(Transformer)) 2)调用fit_transform(对于文档建立分类...
  • 14种分类算法进行文本分类实战

    千次阅读 多人点赞 2020-11-02 22:35:17
    分类算法这一块,本篇项目总共使用了 《14》 种分类算法来进行文本分类, 涵盖《sklearn》中的常规分类算法和集成学习算法; 竞赛和工业界比较得宠的集成学习算法《xgboost》和《lightgbm》; 深度学习框架《Ker
  • 聚类算法分类算法总结

    千次阅读 2019-05-10 14:25:43
    聚类算法总结 原文:http://blog.chinaunix.net/uid-10289334-id-3758310.html 聚类算法的种类: 基于划分聚类算法(partition clustering) k-means: 是一种典型的划分聚类算法,它用一个聚类的中心来代表...
  • 感知器算法实现鸢尾花数据的分类

    千次阅读 2020-11-20 17:17:04
      本博客使用感知器算法来实现鸢尾花数据的分类。因为感知器映射结果为1和-1,为了让感知器能够正常运行,我们舍去了映射类型为0的鸢尾花数据,保留了映射类型为1和-1的鸢尾花数据。 2、测试数据csv   数据格式...
  • 查看文章 https://blog.csdn.net/wwt72/article/details/106101707,使用该数据集学习华为云ModelArts,文件名称对应文章目录相关名称。 文件内容注:全民AI成长计划课程 - 实验环境准备.pdf 和 foods_recongition_...
  • 【聚类】聚类算法分类算法总结

    千次阅读 2018-08-24 07:54:31
    原博文: 聚类算法的种类: 基于划分聚类算法(partition clustering) k-means: 是一种典型的划分聚类... K-Means算法的扩展,采用简单匹配方法来度量分类型数据的相似度 k-prototypes: 结合了K-Mea...
  • 常见加密算法分,用途,原理以及比较  密码学简介 据记载,公元前400年,古希腊人发明了置换密码。1881年世界上的第一个电话保密专利出现。在第二次世界大战期间,德国军方启用“恩尼格玛”密码机,...
  • K-近邻算法(初级:电影分类

    千次阅读 2019-04-11 13:38:40
    使用k-近邻算法分类爱情片和动作片 有人曾经统计过 很多电影的打斗镜头和接吻镜头,下图显示了6部电影的打斗和接吻镜头数。假如有一部未看过的电影,如何确定它是爱情片还是动作片呢?我们可以使用kNN来解决这个...
  • 触摸 15 电脑 Ttle是标题,CategoryName商品类别 现在需要使用朴素贝叶斯分类算法来根据介绍自动分类商品类别,比如: a、苹果醋分类为饮料饮品 b、诺基亚分类为手机 …… 1.5、算法应用流程 1、分解出先验数据中的...
  • 通过基于深度学习算法的文本分析使得系统能够充分理解各种物体名称的具体含义,以便于通过用户输入的名称对垃圾种类进行分类。 二、系统说明 2.1 功能介绍 图片垃圾分类:系统能够对图片中的多个物体进行检测并进行...
  • 列举十大计算机经典算法

    千次阅读 2021-07-28 07:33:29
    算法是计算机的指令,是计算机必不可少的一部分,算法是一系列解决问题的清晰指令,能够对一定规范的输入,在有限时间内获得所要求的输出。算法常常含有重复的步骤和一些比较或逻辑判断。如果一个算法有缺陷,或不...
  • 运维监控系统告警收敛的算法研究与应用 运维监控系统告警收敛的算法研究与应用 运维监控系统告警收敛的算法研究与应用 运维监控系统告警收敛的算法研究与应用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,620
精华内容 41,448
关键字:

名称算法分类