低密度算法
⑴ 聚类算法--DBSCAN
DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种很典型的密度聚类算法,和K-Means,BIRCH这些一般只适用于凸样本集的聚类相比,DBSCAN既可以适用于凸样本集,也可以适用于非凸样本集。 基于密度的带有噪声的空间聚类,可用于异常值监测,通俗来说就是基于密度的聚类算法 !
聚类就是对大量未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小。聚类算法是无监督的算法。
DBSCAN算法的目的: 是基于密度寻找被低密度区域分离的高密度样本分为三类:
稠密区域内部的点(核心点): 在半径Eps内含有超过MinPts数目的点
稠密区域边缘上的点(边缘点): 在半径Eps内点的数量小于MinPts(即不是核心点),但是其邻域内至少包含一个核心点
稀疏区域中的点(噪声或者背景点): 任何不是核心点或者边界点的点
特点 : 发现任意形状的簇、对噪声数据不敏感、一次扫描、需要密度参数作为停止条件,计算量大和复杂度高 。
DBSCAN是一种基于密度的聚类算法,这类密度聚类算法一般假定类别可以通过样本分布的紧密程度决定。同一类别的样本,他们之间的紧密相连的,也就是说,在该类别任意样本周围不远处一定有同类别的样本存在。
通过将紧密相连的样本划为一类,这样就得到了一个聚类类别。通过将所有各组紧密相连的样本划为各个不同的类别,则我们就得到了最终的所有聚类类别结果。
前面我们定性描述了密度聚类的基本思想,在这里我们就看看DBSCAN是如何描述密度聚类的。DBSCAN是基于一组邻域来描述样本集的紧密程度的,参数(ϵϵ, MinPts)用来描述邻域的样本分布紧密程度。其中,ϵϵ描述了某一样本的邻域距离阈值,MinPts描述了某一样本的距离为ϵϵ的邻域中样本个数的阈值。
假设我们的样本集是D=(x1,x2,...,xm)(x1,x2,...,xm),则DBSCAN具体的密度描述定义如下:
1) ϵϵ-邻域:对于xj∈Dxj∈D,其ϵϵ-邻域包含样本集D中与xjxj的距离不大于ϵϵ的子样本集,即Nϵ(xj)={xi∈D|distance(xi,xj)≤ϵ}Nϵ(xj)={xi∈D|distance(xi,xj)≤ϵ}, 这个子样本集的个数记为|Nϵ(xj)||Nϵ(xj)|
2)核心对象:对于任一样本xj∈Dxj∈D,如果其ϵϵ-邻域对应的Nϵ(xj)Nϵ(xj)至少包含MinPts个样本,即如果|Nϵ(xj)|≥MinPts|Nϵ(xj)|≥MinPts,则xjxj是核心对象。
3)密度直达:如果xixi位于xjxj的ϵϵ-邻域中,且xjxj是核心对象,则称xixi由xjxj密度直达。注意反之不一定成立,即此时不能说xjxj由xixi密度直达, 除非且xixi也是核心对象。
4)密度可达:对于xixi和xjxj,如果存在样本样本序列p1,p2,...,pTp1,p2,...,pT,满p1=xi,pT=xjp1=xi,pT=xj, 且pt+1pt+1由ptpt密度直达,则称xjxj由xixi密度可达。也就是说,密度可达满足传递性。此时序列中的传递样本p1,p2,...,pT−1p1,p2,...,pT−1均为核心对象,因为只有核心对象才能使其他样本密度直达。注意密度可达也不满足对称性,这个可以由密度直达的不对称性得出。
5)密度相连:对于xixi和xjxj,如果存在核心对象样本xkxk,使xixi和xjxj均由xkxk密度可达,则称xixi和xjxj密度相连。注意密度相连关系是满足对称性的。
从下图可以很容易看出理解上述定义,图中MinPts=5,红色的点都是核心对象,因为其ϵϵ-邻域至少有5个样本。黑色的样本是非核心对象。所有核心对象密度直达的样本在以红色核心对象为中心的超球体内,如果不在超球体内,则不能密度直达。图中用绿色箭头连起来的核心对象组成了密度可达的样本序列。在这些密度可达的样本序列的ϵϵ-邻域内所有的样本相互都是密度相连的。
DBSCAN的聚类定义很简单: 由密度可达关系导出的最大密度相连的样本集合,即为我们最终聚类的一个类别,或者说一个簇 。
这个DBSCAN的簇里面可以有一个或者多个核心对象。如果只有一个核心对象,则簇里面其他的非核心对象样本都在这个核心对象的ϵϵ-邻域里;如果有多个核心对象,则簇里的任意一个核心对象的ϵϵ-邻域中一定有一个其他的核心对象,否则这个核心对象无法密度可达。这些核心对象的ϵϵ-邻域里所有的样本的集合组成的一个DBSCAN聚类簇。
那么怎么才能找到这样的簇样本集合呢?DBSCAN使用的方法很简单,它任意选择一个没有类别的核心对象作为种子,然后找到所有这个核心对象能够密度可达的样本集合,即为一个聚类簇。接着继续选择另一个没有类别的核心对象去寻找密度可达的样本集合,这样就得到另一个聚类簇。一直运行到所有核心对象都有类别为止。基本上这就是DBSCAN算法的主要内容了,但是我们还有三个问题没有考虑。
1)一些异常样本点或者说少量游离于簇外的样本点,这些点不在任何一个核心对象的周围,在DBSCAN中,我们一般将这些样本点标记为噪音点。
2)距离的度量问题,即如何计算某样本和核心对象样本的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离。这和KNN分类算法的最近邻思想完全相同。对应少量的样本,寻找最近邻可以直接去计算所有样本的距离,比如样本量较大,则一般采用KD树或者球树来快速的搜索最近邻。
3)某些样本可能到两个核心对象的距离都小于ϵϵ,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如何界定这个样本的类别呢?一般来说,此时DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别。也就是说DBSCAN的算法不是完全稳定的算法。
DBSCAN通过检查数据集中的每个对象的ε-邻域来寻找聚类,如果一个点p的ε-邻域包含对于m个对象,则创建一个p作为核心对象的新簇。然后,DBSCAN反复地寻址这些核心对象直接密度可达的对象,这个过程可能涉及密度可达簇的合并。当没有新的点可以被添加到任何簇时,该过程结束。算法中的ε和m是根据先验只是来给出的。
DBSCAN聚类算法原理的基本要点:
1.DBSCAN算法需要选择一种距离度量,对于待聚类的数据集中,任意两个点之间的距离,反应了点之间的密度,说明了点与点是否能够聚到同一类中。由于DBSCAN算法对高维数据定义密度很困难,所以对于二维空间中的点,可以使用欧几里得距离来进行度量。
2.DBSCAN算法需要用户输入2个参数: 一个参数是半径(Eps),表示以给定点P为中心的圆形邻域的范围;另一个参数是以点P为中心的邻域内最少点的数量(MinPts)。如果满足:以点P为中心、半径为Eps的邻域内的点的个数不少于MinPts,则称点P为核心点 。
3.DBSCAN聚类聚类使用到一个 k-距离 的概念,k-距离是指:给定数据集P={p(i); i=0,1,……n},对于任意点P(i),计算点P(i)到集合D的子集S={p(1), p(2), …, p(i-1), p(i+1), …, p(n)}中 所有点之间的距离 , 距离按照从小到大的顺序排序 ,假设排序后的距离集合为D={d(1), d(2), …, d(k-1), d(k), d(k+1), …,d(n)}, 则d(k)就被称为k-距离 。也就是说, k-距离是点p(i)到所有点(除了p(i)点)之间距离第K近的距离 。对待聚类集合中 每个点p(i)都计算k-距离,最后得到所有点的k-距离集合E={e(1), e(2), …, e(n)} 。
4.根据经验计算半径Eps:根据得到的所有点的 k-距离集合E ,对集合E进行 升序排序 后得到k-距离集合 E' ,需要拟合一条排序后的E'集合中k-距离的变化曲线图,然后绘出曲线,通过观察, 将急剧发生变化的位置所对应的k-距离的值,确定为半径Eps的值 。
5.根据经验计算最少点的数量MinPts: 确定MinPts的大小,实际上也是确定k-距离中k的值 ,DBSCAN算法中取k=4,则MinPts=4。
6.另外,如果觉得经验值聚类的结果不满意,可以适当调整Eps和MinPts的值,经过多次迭代计算对比,选择最合适的参数值。可以看出,如果MinPts不变。Eps取得值过大,会导致大多数点都聚到同一个簇中,Eps过小,会导致一个簇的分裂;如果Eps不变,MinPts的值取得过大,会导致同一个簇中点被标记为离群点,MinPts过小,会导致发现大量的核心点。
我们需要知道的是,DBSCAN算法,需要输入2个参数,这两个参数的计算都来自经验知识。半径Eps的计算依赖于计算k-距离,DBSCAN取k=4,也就是设置MinPts=4,然后需要根据k-距离曲线,根据经验观察找到合适的半径Eps的值,下面的算法实现过程中,我们会详细说明。
对于算法的实现,我们概要地描述一下实现的过程:
1.解析样本数据文件。
2.计算每个点与其他所有点之间的欧几里得距离。
3.计算每个点的k-距离值,并对所有点的k-距离集合进行升序排序,输出的排序后的k-距离值。
4.将所有点的k-距离值,在Excel中用散点图显示k-距离变化趋势
5.根据散点图确定半径Eps的值
6.根据给定MinPts=4,以及半径Eps的值,计算所有核心点,并建立核心点与核心点距离小于半径Eps的点映射。
7.根据得到的核心点集合,以及半径Eps的值,计算能够连通的核心点,并得到离群点。
8.将能够连通的每一组核心点,以及到核心点距离小于半径Eps的点,都放到一起,形成一个簇。
9.选择不同的半径Eps,使用DBSCAN算法聚类得到的一组簇及其离群点,使用散点图对比聚类效果。
和传统的K-Means算法相比,DBSCAN最大的不同就是不需要输入类别数K,当然它最大的优势是可以发现任意形状的聚类簇,而不是像K-Means,一般仅仅使用于凸的样本集聚类。同时它在聚类的同时还可以找出异常点,这点和BIRCH算法类似。
那么我们什么时候需要用DBSCAN来聚类呢?一般来说,如果数据集是稠密的,并且数据集不是凸的,那么用DBSCAN会比K-Means聚类效果好很多。 如果数据集不是稠密的,则不推荐用DBSCAN来聚类 。
优点:
1)可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。不用指明类别的数量,能灵活找到并分离各种形状和大小的类。能很好地处理噪声和离群点。
2)可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
3)聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
缺点:
1)在不同密度的类方面有一定难度。如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合( HDBSCAN适合密度不均匀问题 )。
2)如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻近时建立的KD树或者球树进行规模限制来改进。当数据量增大时,要求较大的内存支持I/O消耗也很大;算法聚类效果依赖与距离公式选取,实际应用中常用欧式距离,对于高维数据,存在“维数灾难”。
3)调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。
4)对于从两类均可达的边界点,由于各个点是被随机访问的,因此DBSCAN不能保证每次都返回相同的聚类。
DBSCAN类的重要参数分为两类,一类是DBSCAN算法本身的参数,一类是最近邻度量的参数,下面我们对这些参数做一个总结。
1) eps: DBSCAN算法参数,即我们的ϵ-邻域的距离阈值,和样本距离超过ϵ的样本点不在ϵ-邻域内。 默认值是0.5 ,一般需要通过在多组值里面选择一个合适的阈值。eps过大,则更多的点会落在核心对象的ϵ-邻域,此时我们的类别数可能会减少,本来不应该是一类的样本也会被划分为一类。反之则类别数可能会增大,本来是一类的样本却被划分开。
2) min_samples: DBSCAN算法参数,即样本点要成为核心对象所需要的ϵ-邻域的样本数阈值。默认值是5。一般需要通过在多组值里面选择一个合适的阈值。通常和eps一起调参。在eps一定的情况下,min_samples过大,则核心对象会过少,此时簇内部分本来是一类的样本可能会被标为噪音点,类别数也会变多。反之min_samples过小的话,则会产生大量的核心对象,可能会导致类别数过少。
3) metric: 最近邻距离度量参数。可以使用的距离度量比较多,一般来说DBSCAN使用默认的欧式距离(即p=2的闵可夫斯基距离)就可以满足我们的需求。可以使用的距离量度参数有:欧式距离、曼哈顿距离、切比雪夫距离、闵可夫斯基距离、带权重闵可夫斯基距离、标准化欧式距离、马氏距离。
还有一些其他不是实数的距离度量,一般在DBSCAN算法用不上,这里也就不列了。
4)algorithm:最近邻搜索算法参数,算法一共有三种,第一种是蛮力实现,第二种是KD树实现,第三种是球树实现。这三种方法与K近邻法(KNN)原理中算法一致。对于这个参数,一共有4种可选输入,"brute"对应第一种蛮力实现,"kd_tree"对应于第二种KD树实现,"ball_tree"对应于第三种的球树实现,"auto"则会在上面三种算法中做权衡,选择一个拟合最好的最优算法。 需要注意的是,如果输入样本特征是稀疏的时候,无论我们选择哪种算法,最后sklearn都会去用蛮力实现"brute" 。个人的经验,一般情况使用默认的"auto"就够了。如果数据量很大或者特征也很多,用“auto”建树时间可能会很长,效率不高,建议选择KD树实现“kd_tree”,此时如果发现"kd_tree"速度比较慢或者已经知道样本分布不是很均匀时,可以尝试用"ball_tree"。
5) leaf_size :最近邻搜索算法参数,为使用KD树或者球树时,停止建子树的叶子节点数量的阈值。这个值越小,则生成的KD树或者球树就越大,层数越深,建树时间越长,反之,则生成的KD树或者球树会小,层数较浅,建树时间较短。默认是30,因为这个值一般只影响算法是运行速度和使用内存大小,因此一般情况下可以不管它。
6) p :最近邻距离度量参数。只有用于闵可夫斯基距离和带权重闵客服斯基距离中p值的选择,p=1为曼哈顿距离,p=2为欧式距离。如果使用默认的欧式距离不需要管这个参数。
以上就是DBSCAN类的主要参数介绍,其实需要调参的就是两个参数eps和min_samples,这两个值的组合对最终的聚类效果有很大的影响。
⑵ 人工智能算法简介
人工智能的三大基石—算法、数据和计算能力,算法作为其中之一,是非常重要的,那么人工智能都会涉及哪些算法呢?不同算法适用于哪些场景呢?
一、按照模型训练方式不同可以分为监督学习(Supervised Learning),无监督学习(Unsupervised Learning)、半监督学习(Semi-supervised Learning)和强化学习(Reinforcement Learning)四大类。
常见的监督学习算法包含以下几类:
(1)人工神经网络(Artificial Neural Network)类:反向传播(Backpropagation)、波尔兹曼机(Boltzmann Machine)、卷积神经网络(Convolutional Neural Network)、Hopfield网络(hopfield Network)、多层感知器(Multilyer Perceptron)、径向基函数网络(Radial Basis Function Network,RBFN)、受限波尔兹曼机(Restricted Boltzmann Machine)、回归神经网络(Recurrent Neural Network,RNN)、自组织映射(Self-organizing Map,SOM)、尖峰神经网络(Spiking Neural Network)等。
(2)贝叶斯类(Bayesin):朴素贝叶斯(Naive Bayes)、高斯贝叶斯(Gaussian Naive Bayes)、多项朴素贝叶斯(Multinomial Naive Bayes)、平均-依赖性评估(Averaged One-Dependence Estimators,AODE)
贝叶斯信念网络(Bayesian Belief Network,BBN)、贝叶斯网络(Bayesian Network,BN)等。
(3)决策树(Decision Tree)类:分类和回归树(Classification and Regression Tree,CART)、迭代Dichotomiser3(Iterative Dichotomiser 3, ID3),C4.5算法(C4.5 Algorithm)、C5.0算法(C5.0 Algorithm)、卡方自动交互检测(Chi-squared Automatic Interaction Detection,CHAID)、决策残端(Decision Stump)、ID3算法(ID3 Algorithm)、随机森林(Random Forest)、SLIQ(Supervised Learning in Quest)等。
(4)线性分类器(Linear Classifier)类:Fisher的线性判别(Fisher’s Linear Discriminant)
线性回归(Linear Regression)、逻辑回归(Logistic Regression)、多项逻辑回归(Multionmial Logistic Regression)、朴素贝叶斯分类器(Naive Bayes Classifier)、感知(Perception)、支持向量机(Support Vector Machine)等。
常见的无监督学习类算法包括:
(1) 人工神经网络(Artificial Neural Network)类:生成对抗网络(Generative Adversarial Networks,GAN),前馈神经网络(Feedforward Neural Network)、逻辑学习机(Logic Learning Machine)、自组织映射(Self-organizing Map)等。
(2) 关联规则学习(Association Rule Learning)类:先验算法(Apriori Algorithm)、Eclat算法(Eclat Algorithm)、FP-Growth算法等。
(3)分层聚类算法(Hierarchical Clustering):单连锁聚类(Single-linkage Clustering),概念聚类(Conceptual Clustering)等。
(4)聚类分析(Cluster analysis):BIRCH算法、DBSCAN算法,期望最大化(Expectation-maximization,EM)、模糊聚类(Fuzzy Clustering)、K-means算法、K均值聚类(K-means Clustering)、K-medians聚类、均值漂移算法(Mean-shift)、OPTICS算法等。
(5)异常检测(Anomaly detection)类:K最邻近(K-nearest Neighbor,KNN)算法,局部异常因子算法(Local Outlier Factor,LOF)等。
常见的半监督学习类算法包含:生成模型(Generative Models)、低密度分离(Low-density Separation)、基于图形的方法(Graph-based Methods)、联合训练(Co-training)等。
常见的强化学习类算法包含:Q学习(Q-learning)、状态-行动-奖励-状态-行动(State-Action-Reward-State-Action,SARSA)、DQN(Deep Q Network)、策略梯度算法(Policy Gradients)、基于模型强化学习(Model Based RL)、时序差分学习(Temporal Different Learning)等。
常见的深度学习类算法包含:深度信念网络(Deep Belief Machines)、深度卷积神经网络(Deep Convolutional Neural Networks)、深度递归神经网络(Deep Recurrent Neural Network)、分层时间记忆(Hierarchical Temporal Memory,HTM)、深度波尔兹曼机(Deep Boltzmann Machine,DBM)、栈式自动编码器(Stacked Autoencoder)、生成对抗网络(Generative Adversarial Networks)等。
二、按照解决任务的不同来分类,粗略可以分为二分类算法(Two-class Classification)、多分类算法(Multi-class Classification)、回归算法(Regression)、聚类算法(Clustering)和异常检测(Anomaly Detection)五种。
1.二分类(Two-class Classification)
(1)二分类支持向量机(Two-class SVM):适用于数据特征较多、线性模型的场景。
(2)二分类平均感知器(Two-class Average Perceptron):适用于训练时间短、线性模型的场景。
(3)二分类逻辑回归(Two-class Logistic Regression):适用于训练时间短、线性模型的场景。
(4)二分类贝叶斯点机(Two-class Bayes Point Machine):适用于训练时间短、线性模型的场景。(5)二分类决策森林(Two-class Decision Forest):适用于训练时间短、精准的场景。
(6)二分类提升决策树(Two-class Boosted Decision Tree):适用于训练时间短、精准度高、内存占用量大的场景
(7)二分类决策丛林(Two-class Decision Jungle):适用于训练时间短、精确度高、内存占用量小的场景。
(8)二分类局部深度支持向量机(Two-class Locally Deep SVM):适用于数据特征较多的场景。
(9)二分类神经网络(Two-class Neural Network):适用于精准度高、训练时间较长的场景。
解决多分类问题通常适用三种解决方案:第一种,从数据集和适用方法入手,利用二分类器解决多分类问题;第二种,直接使用具备多分类能力的多分类器;第三种,将二分类器改进成为多分类器今儿解决多分类问题。
常用的算法:
(1)多分类逻辑回归(Multiclass Logistic Regression):适用训练时间短、线性模型的场景。
(2)多分类神经网络(Multiclass Neural Network):适用于精准度高、训练时间较长的场景。
(3)多分类决策森林(Multiclass Decision Forest):适用于精准度高,训练时间短的场景。
(4)多分类决策丛林(Multiclass Decision Jungle):适用于精准度高,内存占用较小的场景。
(5)“一对多”多分类(One-vs-all Multiclass):取决于二分类器效果。
回归
回归问题通常被用来预测具体的数值而非分类。除了返回的结果不同,其他方法与分类问题类似。我们将定量输出,或者连续变量预测称为回归;将定性输出,或者离散变量预测称为分类。长巾的算法有:
(1)排序回归(Ordinal Regression):适用于对数据进行分类排序的场景。
(2)泊松回归(Poission Regression):适用于预测事件次数的场景。
(3)快速森林分位数回归(Fast Forest Quantile Regression):适用于预测分布的场景。
(4)线性回归(Linear Regression):适用于训练时间短、线性模型的场景。
(5)贝叶斯线性回归(Bayesian Linear Regression):适用于线性模型,训练数据量较少的场景。
(6)神经网络回归(Neural Network Regression):适用于精准度高、训练时间较长的场景。
(7)决策森林回归(Decision Forest Regression):适用于精准度高、训练时间短的场景。
(8)提升决策树回归(Boosted Decision Tree Regression):适用于精确度高、训练时间短、内存占用较大的场景。
聚类
聚类的目标是发现数据的潜在规律和结构。聚类通常被用做描述和衡量不同数据源间的相似性,并把数据源分类到不同的簇中。
(1)层次聚类(Hierarchical Clustering):适用于训练时间短、大数据量的场景。
(2)K-means算法:适用于精准度高、训练时间短的场景。
(3)模糊聚类FCM算法(Fuzzy C-means,FCM):适用于精确度高、训练时间短的场景。
(4)SOM神经网络(Self-organizing Feature Map,SOM):适用于运行时间较长的场景。
异常检测
异常检测是指对数据中存在的不正常或非典型的分体进行检测和标志,有时也称为偏差检测。
异常检测看起来和监督学习问题非常相似,都是分类问题。都是对样本的标签进行预测和判断,但是实际上两者的区别非常大,因为异常检测中的正样本(异常点)非常小。常用的算法有:
(1)一分类支持向量机(One-class SVM):适用于数据特征较多的场景。
(2)基于PCA的异常检测(PCA-based Anomaly Detection):适用于训练时间短的场景。
常见的迁移学习类算法包含:归纳式迁移学习(Inctive Transfer Learning) 、直推式迁移学习(Transctive Transfer Learning)、无监督式迁移学习(Unsupervised Transfer Learning)、传递式迁移学习(Transitive Transfer Learning)等。
算法的适用场景:
需要考虑的因素有:
(1)数据量的大小、数据质量和数据本身的特点
(2)机器学习要解决的具体业务场景中问题的本质是什么?
(3)可以接受的计算时间是什么?
(4)算法精度要求有多高?
————————————————
原文链接: https://blog.csdn.net/nfzhlk/article/details/82725769
⑶ 公式算法
DHL的费用计算方法
空运的费用主要是运费和杂费,运费是按照重量等级来计算单价的,一般有这么几个等级:+100KG (100KG以上的货物)+300KG,+500KG,+1000KG
有些航空公司对+45KG也有运价,一般没相应级别运价的话就按照TACT价格来计算货物运费,货物的计费重量也是个重要的地方,货物的重量在空运上分体积重量和毛重两个方面。当体积重量大于毛重是,体积重量就是货物的计费重量,当体积重量小于毛重是,实际毛重就是计费重量。
杂费包括的方面就比较多点,一般来说包括仓储费用,燃油附加费用,战争险等等
燃油附加费和战争险是特定情况下的产物,一般现在公司的报价都是包含在运费内的
DHL等快件类的运费计算是按照0.5KG为单位的,一般都是第一个0.5公斤有一个价格,然后就是续重价格
比如说一票快件,重量是3KGS 报价是起重
100RMB,续重 50RMB
那这个快件的运费就是100+(3*2-1)*50=350RMB。
国际包裹运费计算方法
1.计费重量单位:
特快专递行业一般以每0.5KG(0.5公斤)为一个计费重量单位。
2.首重与续重:
特快专递货品的寄递以第一个0.5KG为首重(或起重),每增加0.5KG为一个续重。
通常起重的费用相对续重费用较高。
3.实重与材积:
是指需要运输的一批物品包括包装在内的实际总重量称为实重;
当需寄递物品体积较大而实重较轻时,因运输工具(飞机、火车、船、汽车等)承载能力及能装载物品体积所限,需采取量取物品体积折算成重量的办法做为计算运费的重量,称为体积重量或材积。
体积重量大于实际重量的物品又常称为轻抛物。
4.计费重量:
按实重与材积两者的定义与国际航空货运协会规定,货物运输过程中计收运费的重量是按整批货物的实际重量和体积重量两者之中较高的计算。
5.包装费
一般情况下,快递公司是免费包装,提供纸箱、气泡等包装材料,但很多物品如衣物,不用特别细的包装就可以,但一些贵重、易碎物品,快递公司还是要收取一定的包装费用的。包装费用一般不计入折扣。
6.通用运费计算公式:
A) 当需寄递物品实重大于材积时,运费计算方法为:
首重运费+(重量(公斤)×2-1)×续重运费
例如:7KG货品按首重20元、续重9元计算,则运费总额为:
20+(7×2-1)*9=137 (元)
B) 当需寄递物品实际重量小而体积较大,运费需按材积标准收取,然后再按上列公式计算运费总额。求取材积公式如下:
规则物品: 长(cm)×宽(cm)×高(cm)÷6000=重量(KG)
不规则物品: 最长(cm)×最宽(cm)×最高(cm) ÷6000=重量(KG)
C) 国际快件有时还会加上燃油附加费
比如此时的燃油附加费为9%,还需要在公式(A)的结果加上:运费×9%
燃油附加费计一般会同运费一起打折
7.总费用:
总费用=(运费+燃油附加费)×折扣+包装费用+其它不确定费用
自2008年11月1日起,DHL将逐步更新对货物体积的计算方法,努力使低密度货物体积重量的计算方法标准化。同时,DHL快递的“当日送达”,“限时专递”和“限日快递”服务的容积除数将改为5000。按下列公式计算:
长*宽*高/5000
⑷ 铁的重量算法
铁板:(毫米厚)x(平方米数)x7.86=( )公斤
圆钢:(毫米直径)x(毫米直径)x(圆钢长度米)x0.006165= ( )公斤
钢材的比重为7.86吨/立方米=7.86公斤/立方分米=7.86克/立方厘米
铁板重量=铁板体积乘以铁板密度。
铁板密度是7.86克每立方厘米。
11*100*6*100*1.2*7.86/1000=6225.12
所以你家铁板的重量大约为6225.12千克。
铁在生活中分布较广,占地壳含量的4.75%,仅次于氧、硅、铝,位居地壳含量第四。纯铁是柔韧而延展性较好的银白色金属,用于制发电机和电动机的铁芯,铁及其化合物还用于制磁铁、药物、墨水、颜料、磨料等。
工业上所说的“黑色金属”之一(另外两种是铬和锰)(其实纯净的生铁是银白色的,铁元素被称之为“黑色金属”是因为铁表面常常覆盖着一层主要成分为黑色四氧化三铁的保护膜)
(4)低密度算法扩展阅读:
用途
1.用于制药、农药、粉末冶金、热氢发生器、凝胶推进剂、燃烧活性剂、催化剂、水清洁吸附剂、烧结活性剂、粉末冶金制品、各种机械零部件制品、硬质合金材料制品等。
2..纯铁用于制发电机和电动机的铁芯,还原铁粉用于粉末冶金,钢铁用于制造机器和工具。此外,铁及其化合物还用于制磁铁、药物、墨水、颜料、磨料等。
3.用作还原剂。用于铁盐制备。还用于制备电子元器件。
4.用作营养增补剂(铁质强化剂)。
5.在胶黏剂中用作环氧胶黏剂的填料,配制铸件修补胶。常作为还原剂使用。在电子工业、粉末冶金、机械工业中具有广泛的用途。FHY80.23主要用于含油轴承。FHY100.25主要用于中、低密度的机械零件。HFY100.27主要用于高密度的机械零件。
⑸ 八:聚类算法K-means(20191223-29)
学习内容:无监督聚类算法K-Means
k-means:模型原理、收敛过程、超参数的选择
聚类分析是在数据中发现数据对象之间的关系,将数据进行分组,组内的相似性越大,组间的差别越大,则聚类效果越好。
不同的簇类型: 聚类旨在发现有用的对象簇,在现实中我们用到很多的簇的类型,使用不同的簇类型划分数据的结果是不同的。
基于原型的: 簇是对象的集合,其中每个对象到定义该簇的 原型 的距离比其他簇的原型距离更近,如(b)所示的原型即为中心点,在一个簇中的数据到其中心点比到另一个簇的中心点更近。这是一种常见的 基于中心的簇 ,最常用的K-Means就是这样的一种簇类型。 这样的簇趋向于球形。
基于密度的 :簇是对象的密度区域,(d)所示的是基于密度的簇,当簇不规则或相互盘绕,并且有早上和离群点事,常常使用基于密度的簇定义。
关于更多的簇介绍参考《数据挖掘导论》。
基本的聚类分析算法
1. K均值: 基于原型的、划分的距离技术,它试图发现用户指定个数(K)的簇。
2. 凝聚的层次距离: 思想是开始时,每个点都作为一个单点簇,然后,重复的合并两个最靠近的簇,直到尝试单个、包含所有点的簇。
3. DBSCAN: 一种基于密度的划分距离的算法,簇的个数有算法自动的确定,低密度中的点被视为噪声而忽略,因此其不产生完全聚类。
不同的距离量度会对距离的结果产生影响,常见的距离量度如下所示:
优点:易于实现
缺点:可能收敛于局部最小值,在大规模数据收敛慢
算法思想:
选择K个点作为初始质心
repeat
将每个点指派到最近的质心,形成K个簇
重新计算每个簇的质心
until 簇不发生变化或达到最大迭代次数
这里的“重新计算每个簇的质心”,是根据目标函数来计算的,因此在开始时要考虑 距离度量和目标函数。
考虑欧几里得距离的数据,使用 误差平方和(Sum of the Squared Error,SSE) 作为聚类的目标函数,两次运行K均值产生的两个不同的簇集,使用SSE最小的那个。
k表示k个聚类中心,ci表示第几个中心,dist表示的是欧几里得距离。
这里有一个问题就是为什么,我们更新质心是让所有的点的平均值,这里就是SSE所决定的。
k均值算法非常简单且使用广泛,但是其有主要的两个缺陷:
1. K值需要预先给定 ,属于预先知识,很多情况下K值的估计是非常困难的,对于像计算全部微信用户的交往圈这样的场景就完全的没办法用K-Means进行。对于可以确定K值不会太大但不明确精确的K值的场景,可以进行迭代运算,然后找出Cost Function最小时所对应的K值,这个值往往能较好的描述有多少个簇类。
2. K-Means算法对初始选取的聚类中心点是敏感的 ,不同的随机种子点得到的聚类结果完全不同
3. K均值算法并不是很所有的数据类型。 它不能处理非球形簇、不同尺寸和不同密度的簇,银冠指定足够大的簇的个数是他通常可以发现纯子簇。
4. 对离群点的数据进行聚类时,K均值也有问题 ,这种情况下,离群点检测和删除有很大的帮助。
下面对初始质心的选择进行讨论:
当初始质心是随机的进行初始化的时候,K均值的每次运行将会产生不同的SSE,而且随机的选择初始质心结果可能很糟糕,可能只能得到局部的最优解,而无法得到全局的最优解。
多次运行,每次使用一组不同的随机初始质心,然后选择一个具有最小的SSE的簇集。该策略非常的简单,但是效果可能不是很好,这取决于数据集合寻找的簇的个数。
关于更多,参考《数据挖掘导论》
为了克服K-Means算法收敛于局部最小值的问题,提出了一种 二分K-均值(bisecting K-means)
将所有的点看成是一个簇
当簇小于数目k时
对于每一个簇
计算总误差
在给定的簇上进行K-均值聚类,k值为2 计算将该簇划分成两个簇后总误差
选择是的误差最小的那个簇进行划分
在原始的K-means算法中,每一次的划分所有的样本都要参与运算,如果数据量非常大的话,这个时间是非常高的,因此有了一种分批处理的改进算法。
使用Mini Batch(分批处理)的方法对数据点之间的距离进行计算。
Mini Batch的好处:不必使用所有的数据样本,而是从不同类别的样本中抽取一部分样本来代表各自类型进行计算。n 由于计算样本量少,所以会相应的减少运行时间n 但另一方面抽样也必然会带来准确度的下降。
聚类试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集成为一个“簇”。通过这样的划分,每个簇可能对应于一些潜在的概念(也就是类别);需说明的是,这些概念对聚类算法而言事先是未知的,聚类过程仅能自动形成簇结构,簇对应的概念语义由使用者来把握和命名。
聚类是无监督的学习算法,分类是有监督的学习算法。所谓有监督就是有已知标签的训练集(也就是说提前知道训练集里的数据属于哪个类别),机器学习算法在训练集上学习到相应的参数,构建模型,然后应用到测试集上。而聚类算法是没有标签的,聚类的时候,需要实现的目标只是把相似的东西聚到一起。
聚类的目的是把相似的样本聚到一起,而将不相似的样本分开,类似于“物以类聚”,很直观的想法是同一个簇中的相似度要尽可能高,而簇与簇之间的相似度要尽可能的低。
性能度量大概可分为两类: 一是外部指标, 二是内部指标 。
外部指标:将聚类结果和某个“参考模型”进行比较。
内部指标:不利用任何参考模型,直接考察聚类结果。
对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大
初学者会很容易就把K-Means和KNN搞混,其实两者的差别还是很大的。
K-Means是无监督学习的聚类算法,没有样本输出;而KNN是监督学习的分类算法,有对应的类别输出。KNN基本不需要训练,对测试集里面的点,只需要找到在训练集中最近的k个点,用这最近的k个点的类别来决定测试点的类别。而K-Means则有明显的训练过程,找到k个类别的最佳质心,从而决定样本的簇类别。
当然,两者也有一些相似点,两个算法都包含一个过程,即找出和某一个点最近的点。两者都利用了最近邻(nearest neighbors)的思想。
优点:
简单, 易于理解和实现 ;收敛快,一般仅需5-10次迭代即可,高效
缺点:
1,对K值得选取把握不同对结果有很大的不同
2,对于初始点的选取敏感,不同的随机初始点得到的聚类结果可能完全不同
3,对于不是凸的数据集比较难收敛
4,对噪点过于敏感,因为算法是根据基于均值的
5,结果不一定是全局最优,只能保证局部最优
6,对球形簇的分组效果较好,对非球型簇、不同尺寸、不同密度的簇分组效果不好。
K-means算法简单理解,易于实现(局部最优),却会有对初始点、噪声点敏感等问题;还容易和监督学习的分类算法KNN混淆。
参考阅读:
1.《 深入理解K-Means聚类算法 》
2.《 K-Means 》