精华内容
下载资源
问答
  • 算法的特征

    千次阅读 2013-09-04 18:16:30
    算法的特征 嗯,算法具有五个基本特征:输入、输出、有穷性、确定性和可行性。 输入 算法具有零个或多个输入。 尽管对于绝大多数算法来说,输入参数都是必要的。但是有些时候,像打印“I love fishc.com”,就不...

    算法的特征

    嗯,算法具有五个基本特征:输入、输出、有穷性、确定性和可行性。

    输入

    算法具有零个或多个输入。

    尽管对于绝大多数算法来说,输入参数都是必要的。但是有些时候,像打印“I love fishc.com”,就不需要啥参数啦。

     
    void print()
    {
        printf(“I love fishc.comn”);
    }

     
     
     
     

    输出

    算法至少有一个或多个输出。

    算法是一定要输出的,不需要它输出,那你要这个算法来干啥?

    输出的形式可以是打印形式输出,也可以是返回一个值或多个值等。

    有穷性

    指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

    一个永远都不会结束的算法,我们还要他来干啥?

    确定性

    算法的每一个步骤都具有确定的含义,不会出现二义性。

    算法在一定条件下,只有一条执行路径,相同的输入只能有唯一的输出结果。

    算法的每个步骤都应该被精确定义而无歧义。

    可行性

    算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。

    算法设计的要求

    刚才我们谈到了,算法并不是唯一的。

    也就是说同一个问题,可以有多种解决问题的算法。

    这可能让那些常年只做有标准答案题目的童鞋失望了,他们多么希望存在标准答案,因为只有一个正确的,把它背下来万事大吉!

    但是咱的算法是变幻无穷的,还记得我们刚才讲过的高斯童鞋吗?

    世界上要多几个这样的鱼油,那又会有多几种牛掰的算法哈。

    尽管算法不唯一,但我们要学习掌握一些好的算法,对我们解决问题很有帮助!

    正确性

    算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。

    大体分为以下四个层次:

    1. 算法程序没有语法错误。
    2. 算法程序对于合法输入能够产生满足要求的输出。
    3. 算法程序对于非法输入能够产生满足规格的说明。
    4. 算法程序对于故意刁难的测试输入都有满足要求的输出结果。

    可读性

    算法设计另一目的是为了便于阅读、理解和交流。

    我么写代码的目的,一方面是为了让计算机执行,但还有一个重要的目的是为了便于他人阅读和自己日后阅读修改。

    健壮性

    当输入数据不合法时,算法也能做出相关处理,而不是产生异常、崩溃或莫名其妙的结果。

    时间效率高和存储量低

    生活中,每个男人都希望找一个贤惠的老婆,她们温柔又体贴,美丽又大方,还会做着一手的好菜。

    好算法就犹如好老婆,应该具备时间效率高和存储量低的特点。

    所以在设计算法的时候我们应该尽量思考这两方面的问题!

    展开全文
  • 算法的特征及设计要求

    千次阅读 2016-03-24 12:58:23
    算法的特征及设计要求

    1、什么是算法呢?

    算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。简单来说,算法就是解决问题的方式和方法。 

    2、算法具有五个基本特征:输入、输出、有穷性、确定性和可行性。 

    1>输入

    算法具有零个或多个输入。

    尽管对于绝大多数算法来说,输入参数都是必要的。但是有些时候,像打印“I love fishc.com”,就不需要啥参数啦。

    void print(){

        printf(“I love fishc.comn”);} 

    2>输出

    算法至少有一个或多个输出。

    算法是一定要输出的,不需要它输出,那你要这个算法来干啥?

    输出的形式可以是打印形式输出,也可以是返回一个值或多个值等。 

    3>有穷性

    指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。 

    4>确定性

    算法的每一个步骤都具有确定的含义,不会出现二义性。

    算法在一定条件下,只有一条执行路径,相同的输入只能有唯一的输出结果。

    算法的每个步骤都应该被精确定义而无歧义。 

    5>可行性

    算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成。

     

    3、算法设计的要求

    1>正确性

    算法的正确性是指算法至少应该具有输入、输出和加工处理无歧义性、能正确反映问题的需求、能够得到问题的正确答案。

    大体分为以下四个层次:

    算法程序没有语法错误。

    算法程序对于合法输入能够产生满足要求的输出。

    算法程序对于非法输入能够产生满足规格的说明。

    算法程序对于故意刁难的测试输入都有满足要求的输出结果。 

    2>可读性

    算法设计另一目的是为了便于阅读、理解和交流。

    我么写代码的目的,一方面是为了让计算机执行,但还有一个重要的目的是为了便于他人阅读和自己日后阅读修改。

    3>健壮性

    当输入数据不合法时,算法也能做出相关处理,而不是产生异常、崩溃或莫名其妙的结果。 

    4>时间效率高和存储量低

    生活中,每个男人都希望找一个贤惠的老婆,她们温柔又体贴,美丽又大方,还会做着一手的好菜。

    好算法就犹如好老婆,应该具备时间效率高和存储量低的特点。

    所以在设计算法的时候我们应该尽量思考这两方面的问题!



    展开全文
  • 它是一个对大数据集和高维特征进行最近邻搜索的算法的集合。 特点:在面对大数据集时它的效果要好于 BFMatcher。 使用FLANN算法进行匹配时,需要传入两个字典作为参数。这两个字典是为了确定要使用的算法和其他...

    FLANN 是快速最临近邻搜索包的简称Fast_Library_for_Approximate_Nearest_Neighbors的简称。它是一个对大数据集和高维特征进行最近邻搜索的算法的集合。

    特点:在面对大数据集时它的效果要好于 BFMatcher。


    使用FLANN算法进行匹配时,需要传入两个字典作为参数。这两个字典是为了确定要使用的算法和其他相关参数等。

    1. 第一个字典是 IndexParams。对于SIFT 和SURF 等算法我们可以传入的参数是: indexparams = dict(algorithm = F LANNINDEXKDTREE, trees = 5)
    2. 第二个字典是 SearchParams。用它来指定递归遍历的次数。值越高结果越准确,但是消耗的时间也越多。如果想修改这个值,传入参数searchparams = dict(checks = 100)。

    使用一个查询图像,在其中找到一些特征点(关键点),我们又在另一幅图像中也找到了一些特征点,最后对这两幅图像之间的特征点进行匹配。简单来说就是:我们在一张杂乱的图像中找到了一个对象(的某些部分)的位置。这些信息足以帮助我们在目标图像中准确的找到(查询图像)对象。 

    可以使用 calib3d 模块中的 cv2.findHomography()函数。如果将这两幅图像中的特征点集传给这个函数,他就会找到这个对象的透视图变换。然后就可以使用函数cv2.perspectiveTransform() 找到这个对象了。至少要 4 个正确的点才能找到这种变换。 

    我们已经知道在匹配过程可能会有一些错误匹配,而这些错误会影响最终结果。为了解决这个问题,算法使用 RANSAC 和 LEAST_MEDIAN(可以通过参数来设定)。所以好的匹配提供的正确的估计被称为 inliers,剩下的被称为outliers cv2.findHomography() 返回一个掩模,这个掩模确定了 inlier 和outlier 点。

    代码如下图所示:

    import cv2
    from matplotlib import pyplot as plt
    import numpy as np
    
    MIN_MATCH_COUNT = 10
    
    img1 = cv2.imread('shu1.jpg', 0)
    img2 = cv2.imread('shu2.jpg', 0)
    
    sift = cv2.xfeatures2d.SIFT_create()
    kp1, des1 = sift.detectAndCompute(img1, None)
    kp2, des2 = sift.detectAndCompute(img2, None)
    
    FLANN_INDEX_KDTREE = 0
    indexParams = dict(algorithm=FLANN_INDEX_KDTREE, trees=5)
    searchParams = dict(checks=50)
    
    flann = cv2.FlannBasedMatcher(indexParams, searchParams)
    
    matches = flann.knnMatch(des1, des2, k=2)
    
    good = []
    for m, n in matches:
        if m.distance < 0.7 * n.distance:
            good.append(m)
    
    if len(good) > MIN_MATCH_COUNT:
        src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2)
        dst_pts = np.float32([kp2[m.trainIdx].pt for m in good]).reshape(-1, 1, 2)
        M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC, 5.0)
    
        matchesMask = mask.ravel().tolist()
        h, w = img1.shape
        pts = np.float32([[0, 0], [0, h - 1], [w - 1, h - 1], [w - 1, 0]]).reshape(-1, 1, 2)
        dst = cv2.perspectiveTransform(pts, M)
    
        img2 = cv2.polylines(img2, [np.int32(dst)], True, 255, 3, cv2.LINE_AA)
    else:
        print("Not Enough")
        matchesMask = None
    
    drawParams = dict(matchColor=(0, 255, 0),
                      singlePointColor=None,
                      matchesMask=matchesMask,
                      flags=2
                      )
    resultImage = cv2.drawMatches(img1, kp1, img2, kp2, good, None, **drawParams)
    plt.xticks([]), plt.yticks([])
    plt.imshow(resultImage), plt.show()
    

    运行结果如图所示:

    绿色为匹配线,白色为左边图框的单应性映射线
    展开全文
  • GBDT算法的特征重要度计算

    万次阅读 2016-12-27 21:22:59
    基于树的集成算法还有一个很好的特性,就是模型训练结束后可以输出模型所使用的特征的相对重要度,便于我们选择特征,理解哪些因素是对预测有关键影响,这在某些领域(如生物信息学、神经系统科学等)特别重要。...

    Tree ensemble算法的特征重要度计算

    标签: 特征选择 GBDT 特征重要度


    集成学习因具有预测精度高的优势而受到广泛关注,尤其是使用决策树作为基学习器的集成学习算法。树的集成算法的著名代码有随机森林和GBDT。随机森林具有很好的抵抗过拟合的特性,并且参数(决策树的个数)对预测性能的影响较小,调参比较容易,一般设置一个比较大的数。GBDT具有很优美的理论基础,一般而言性能更有优势。关于GBDT算法的原理请参考我的前一篇博文《GBDT算法原理深入解析》

    基于树的集成算法还有一个很好的特性,就是模型训练结束后可以输出模型所使用的特征的相对重要度,便于我们选择特征,理解哪些因素是对预测有关键影响,这在某些领域(如生物信息学、神经系统科学等)特别重要。本文主要介绍基于树的集成算法如何计算各特征的相对重要度。

    使用boosted tree作为学习算法的优势:

    • 使用不同类型的数据时,不需要做特征标准化/归一化
    • 可以很容易平衡运行时效率和精度;比如,使用boosted tree作为在线预测的模型可以在机器资源紧张的时候截断参与预测的树的数量从而提高预测效率
    • 学习模型可以输出特征的相对重要程度,可以作为一种特征选择的方法
    • 模型可解释性好
    • 对数据字段缺失不敏感
    • 能够自动做多组特征间的interaction,具有很好的非性线性

    特征重要度的计算

    Friedman在GBM的论文中提出的方法:

    特征j的全局重要度通过特征j在单颗树中的重要度的平均值来衡量:

    J2j^=1Mm=1MJ2j^(Tm)

    其中,M是树的数量。特征j在单颗树中的重要度的如下:
    J2j^(T)=t=1L1i2t^1(vt=j)

    其中,L为树的叶子节点数量,L1即为树的非叶子节点数量(构建的树都是具有左右孩子的二叉树),vt是和节点t相关联的特征,i2t^是节点t分裂之后平方损失的减少值。

    实现代码片段

    为了更好的理解特征重要度的计算方法,下面给出scikit-learn工具包中的实现,代码移除了一些不相关的部分。

    下面的代码来自于GradientBoostingClassifier对象的feature_importances属性的计算方法:

    def feature_importances_(self):
        total_sum = np.zeros((self.n_features, ), dtype=np.float64)
        for tree in self.estimators_:
            total_sum += tree.feature_importances_ 
        importances = total_sum / len(self.estimators_)
        return importances

    其中,self.estimators_是算法构建出的决策树的数组,tree.feature_importances_ 是单棵树的特征重要度向量,其计算方法如下:

    cpdef compute_feature_importances(self, normalize=True):
        """Computes the importance of each feature (aka variable)."""
    
        while node != end_node:
            if node.left_child != _TREE_LEAF:
                # ... and node.right_child != _TREE_LEAF:
                left = &nodes[node.left_child]
                right = &nodes[node.right_child]
    
                importance_data[node.feature] += (
                    node.weighted_n_node_samples * node.impurity -
                    left.weighted_n_node_samples * left.impurity -
                    right.weighted_n_node_samples * right.impurity)
            node += 1
    
        importances /= nodes[0].weighted_n_node_samples
    
        return importances

    上面的代码经过了简化,保留了核心思想。计算所有的非叶子节点在分裂时加权不纯度的减少,减少得越多说明特征越重要。

    不纯度的减少实际上就是该节点此次分裂的收益,因此我们也可以这样理解,节点分裂时收益越大,该节点对应的特征的重要度越高。关于收益的定义请参考我的前一篇博文《GBDT算法原理深入解析》中的等式(9)的定义。

    参考资料

    [1] Feature Selection for Ranking using Boosted Trees
    [2] Gradient Boosted Feature Selection
    [3] Feature Selection with Ensembles, Artificial Variables, and Redundancy Elimination
    [4] GBDT算法原理深入浅出

    展开全文
  • 使用森林优化算法的特征选择

    千次阅读 2017-10-16 16:01:08
    转自:...摘要:特征选择作为组合优化问题是数据挖掘中的重要预处理步骤,借助于去除不相关冗余特征,可以提高学习算法的性能。由于进化算法被报告适用于优化任务,所以森林优化算法(FOA) - 最初
  • SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or corner points)及其有关scale 和 orientation 的描述子得到特征并进行图像特征点匹配 ...
  • 本文转载于R语言中文社区,详情链接 greedy Algorithm Feature Selection ...贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略选择,选择贪心 策略必须具备无后效性,即某个状态以前
  • 大数据分析与挖掘技术在科学界正在如火如荼展开,各种大数据算法被开发研究出来,例如近年来发展比较完善一种数据分析挖掘算法支持向量机。  与此同时,大数据分析在商业中运用受
  • 最近工作中接触到了CRF算法以及CRF++,于是乎,去了解了关于...我们知道,深度学习(Deeplearning)是不需要特征模板的,它会自己学习里边的规律,而CRF则是需要特征模板的,所以,选择什么样的特征模板是至关重要的。
  • 初三-跟踪算法的特征选择

    千次阅读 2011-02-08 11:31:00
    可用于跟踪的特征有颜色、边缘、光流和纹理,或者是其中几种的组合。 颜色-最常用的颜色空间是RGB,但它不是均匀分布的;均匀分布的颜色空间是HSV。根据应用选择合适的颜色空间。 边缘-边缘通常伴随着剧烈的...
  • 算法的主要特征

    千次阅读 2019-04-18 20:11:11
    一个算法应该具有以下五个重要的特征: 1,有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止; 2,确切性(Definiteness):算法的每一步骤必须有确切的定义; 3,输入项(Input):一个算法...
  • 算法的基本特征

    万次阅读 2017-09-27 09:37:34
    算法的基本特征: 有限性:一个算法在执行有限步之后必须会终止。 确定性:一个算法的每个步骤都必须精确地定义,可以严格地、无歧义地执行。 输入:一个算法在运行之前赋给它的量,或在运行过程中动态地赋给它的...
  • 遗传算法特征选择python实现

    千次阅读 热门讨论 2019-07-02 16:43:39
    遗传算法特征选择基本原理是用遗传算法寻找一个最优二进制编码, 码中每一位对应一个特征, 若第i位为“1”, 则表明对应特征被选取, 该特征将出现在估计器中, 为“0”, 则表明对应特征未被选取,该特征将不出现在...
  • 特征选择之遗传算法

    万次阅读 2017-05-22 12:21:54
    基于遗传算法的特征选择是一种wrapper方法,该算法是以支持向量机分类器的识别率作为特征选择的可分性判断依据。在遗传算法中,对所选择的特征用[0,1]二进制串来初始化,由于二进制数{0,1}是等概率出现的,所以最优...
  • SIFT算法特征性质分析

    千次阅读 2014-10-15 10:37:08
    本文将个人对SIFT算法提取的特征
  • 特征算法之Moravec算法

    千次阅读 2018-04-24 14:46:11
    特征算法之Moravec算法 ...在特征算法的学习中,我认为主要关注以下几个方面。 特征的定义:要搞懂特征的定义,首先明白特征用做什么?我理解特征就是图像内容的一个关键信息,在图像检索、检测、匹配等后续操...
  • 图像特征匹配:选取一些图像,检测它们主要特征,并通过单应性(homography)来检测这些图像是否存在于另一个图像中。 常用opencv特征检测和提取方法 Harris: 该算法用于检测角点 SIFT: 该算法用于检测...
  • 目录 1. 模拟退火算法实现...在本节按照基本实现步骤实现模拟退火算法, 对于模拟退火算法的高级封装(类封装), 可以参考模拟退火算法之特征选择的python实现(二) 1. 模拟退火算法实现步骤 2. python实现 i...
  • C语言算法的基本特征

    千次阅读 2015-12-06 18:57:23
    三、 有效性:算法每一步操作都应该能有效执行,一个不可执行操作是无效,例如,一个数被0除操作就是无效,应当避免这种操作。 四、 有零个或多个输入: 这里输入是指在算法开始之前所需要初始数据...
  • 特征匹配算法

    千次阅读 2020-06-03 16:51:21
    目前 SIFT 算法和 ORB 算法获得了研究者的青睐,但是因为 SIFT 算法是对图像进行全局的特征点检测耗时较长,造成算法的运行速度慢,达不到令人满意的匹配效果,难于应用到目标的实时跟踪。 ORB 算法的运行速度较快,...
  • 推荐算法:基于特征的推荐算法

    千次阅读 2018-02-13 11:33:31
    【转】https://www.52ml.net/12583.html目录 推荐算法准确度度量公式:集合...推荐系统架构参考文献:推荐算法准确度度量公式:其中,R(u)表示对用户推荐N个物品,T(u)表示用户u在测试集上喜欢物品集合。集...
  • 在生成高斯金字塔的第一张图像的时候,为了图像反走样的需要...SIFT提取特征点的时候用了DoG来近似LoG,而据我所知LoG是用来检测斑点的,而DoG可以检测角点,SIFT的特征点是斑点还是角点呢,斑点与角点有什么区别吗 ?
  • 文本分类的特征提取算法

    千次阅读 2018-09-17 15:07:59
    为分类文本作处理的特征提取算法也对最终效果有巨大影响,而特征提取算法又分为特征选择和特征抽取两大类,其中特征选择算法有互信息,文档频率,信息增益,开方检验等等十数种...
  • SIFT算法提取特征

    千次阅读 2017-02-08 10:06:14
    本篇用于补充书上所学内容,特别是后面的匹配内容,书上没讲到,且贴有代码参考文献等...SIFT(Scale-invariant feature transform)是一种检测局部特征的算法,该算法通过求一幅图中的特征点(interest points,or co

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 58,860
精华内容 23,544
关键字:

算法的特征