集体编程智慧(1)

人:非凡能力,不管对错,对未来有一定的预判(我觉得也是受限于人的知识储备,否则对新的信息进行决策时,仍然不能从中识别出相似的信息);

机器:受限于大量模式之上的归纳能力。因此若出现不同于算法先前所曾见到过的任何其他模式,就可能被“误解”。

 

1.生物工艺学:测序技术和筛选技术(算法导论中的动态规划算法来实现LCS计算)——DNA序列、蛋白质结构;

2.金融欺诈侦测:信用卡公司侦测交易是否存在欺诈——神经网络归纳逻辑

3.机器视觉:军事或监控,自动识别事物(人脸、声音、图像等等)——从大数据集中发现有趣特征的独立组元分析技术

4.预测:

产品市场化:预测市场未来的发展、价格等趋势——聚类

供应链优化:预测不同地区的产品需求以及供应链的有效运行来预估成本投入

股票市场分析:

国家安全:分析潜在的威胁

 

协作型过滤:

背景:选择越来越多,通过询问小部分人来确定我们想要的东西,变得不靠谱,因为这小部分人并不了解所有的选择;(局部->整体,准确度不够)

思路:对一大群人进行搜索,并从中找出与我们品位相近的一小群人;(整体->局部,筛除一些不相关的样本,排除干扰)

       算法作用:对这些人所偏爱的其他内容进行考察,并将它们组合起来构造出一个经过排名的推荐列表。  

偏好空间计算方法:

       欧几里德距离;以经过人们一致评价的物品为坐标轴,然后将参与评价的人绘制到图上,并考查他们彼此间的距离远近。

       皮尔逊相关度评价:判断两组数据与某一直线拟合程度的一种度量。针对数据不规范的时候,会倾向于给出更好的结果。

皮尔逊的计算过程:

1.    找出评论者评价过的物品,然后计算两者的评分总和与平方和,并求得评分的乘积之和;

2.    利用上面的计算结果计算出皮尔逊相关系数。

皮尔逊的评判标准:相关系数范围为[0,1],而且系数值越大表示相关性越高。

    两种计算方法的差异在于:欧几里德完全从数据的特征来计算两种数据之间的关系;而皮尔逊相关度是从产生数据的来源进行修正,从而得出数据间最好的关系。


机器学习

监督学习:利用样本输入和期望输出来学习如何预测的技术。神经网络、决策树、向量支持机、贝叶斯过滤。这些方法都是通过检查一组输入和期望的输出来进行“学习”。当我们想要利用这些方法中的任何一种来提取信息时,我们可以传入一种输入,然后期望应用程序能够根据其此前学到的知识来产生一个输出。

无监督学习:不利用带有正确答案的样本数据进行“训练”。这类算法的目的是要在一组数据中找到某种结构,而这些数据本身并不是我们要找的答案。例如聚类,它的目标是采集数据,然后从中找到不同的群组。其他例子有:非负矩阵因式分解自组织映射

分级聚类:通过不断地将最为相似的群组两两合并,并构造出一个群组的层级结构。其中的每个群组都是从但一元素开始的。在每次的迭代过程中,分级聚类算法会计算每两个群组间的距离,并将距离最近的两个群组合并成一个新的群组。这一过程会一直重复下去,直到只剩一个群组为止。

树状图:在分级聚类完成的基础上,采用一种图形化的方式来展现所得得结果。

K-均值聚类:首先会随机确定k个中心位置(位于空间中聚类中心的点),然后将各个数据项平均分配给最临近的中心点。待分配完成之后,聚类中心就会移到分配给该聚类的所有节点的平均位置处,然后整个分配过程重新开始。这一过程会一直重复下去,直到分配过程不再产生变化为止

K-均值聚类与分级聚类的不同之处为,该方法会预先告诉算法希望生成的聚类数量,然后算法会根据数据的结构状况来确定聚类的大小。前提是能够收敛。

针对偏好的聚类:

定义距离度量标准:Tanimoto coefficient,代表的是交集与并集的比率

多维缩放技术:目的——根据每对数据项之间的差距情况,尝试绘制出一幅图来,图中各数据项之间的距离远近,对应于它们彼此间的差异程度。实施方式——首先计算出所有项之间的目标距离(可以使用皮尔逊相关度技术)。

 

基于网页内容的排名:

1.    单词频度:位于查询条件中的单词在文档中出现的次数能够有助于帮助我们判断文档的相关程度;

2.    文档位置:搜索单词在网页中的位置。文档的主题有可能会出现在靠近文档的开始处;

3.    单词距离:如果查询条件中有多个单词,则它们在文档中出现的位置应该靠得很近;(针对多个单词的搜索

利用外部回指链接:考查外界就该网页所提供的信息(特别是谁链向了该网页,以及它们对该网页的评价)来进一步改善搜索结果。

1.    简单计数:在每个网页上统计链接的数据,并将链接总数作为针对网页的度量——论文引用次数;

2.    pagerank算法:为每个网页都赋予一个指示网页重要程度的评价值。网页的重要性是依据指向该网页的所有其他网页的重要性,以及这些网页中所包含的链接数求得的

Pagerank计算公式:


对于网页A,其外部回指链接情况如下:


其中0.85为设定的阻尼因子,用以指示用户持续点击每个网页中链接的概率。

针对未知的pagerank值,可以通过设定一个任意的初始值,然后反复计算,迭代若干次。最终,每个网页的pagerank值将会越来越接近其真实值。

3.    SVD算法(Singular Value Decomposition,奇异值分解):提取一般实矩阵特征值的算法,(这里特征值加引号是因为,特征值是针对方阵来定义的,而一般的m*n的实矩阵是没有特征值的。)其实,矩阵就是一个线性变换的表示方法,因为一个向量乘一个矩阵的结果是一个向量,第一个向量通过线性变换来变成第二个向量。线性变换有许多变换方向,比如你可以对一个图像矩阵做伸缩同时也做平移。那么特征值和特征向量又是什么?一个特征向量就是表示其中的一个变换方向,而对应的特征值则表示这个变换方向对于整个线性变换有多么重要。

奇异值就是特征值从方阵往一般实矩阵的一个推广。你将一个m*n的实矩阵和它的转置相乘,就会得到一个方阵,然后对这个方阵做特征值分解,得到的特征值就是所谓的奇异值的平方。我的意思是说,某种意义上,可以讲奇异值和特征值理解为一回事。

那么拿到奇异值又会有什么用呢?拿到奇异值后,我们就可以抓到主要的成分,丢掉次要和非常次要的成分进行分析。也就是说,我们可以对原来的庞大的常常又非常稀疏的矩阵进行降维和分解,而分解后得到的矩阵都是稠密矩阵。最终我们会得到一个表示user特性的矩阵和一个表示item特性的矩阵。拿到这些数据之后,我们就可以进行推荐了,而且也可以很容易地进行聚类分析。

这个算法的好处在于,可以解决rating矩阵的稀疏性问题,同时可以降低矩阵的维度,提高运算速度。但它的缺点是付出的空间代价太大。在做svd分解时,你需要先把一个大的rating矩阵分解成三个大的矩阵,这三个矩阵需要存在计算机内存中,然后才能进行降维。

其实,svd这个方法的思路和PCA(主成分分析法)很像,抓住主要矛盾,忽略次要矛盾。分解降维后的矩阵非常约等于原来的矩阵。

相关性:两者都是从网络理论的形式来计算中心的数量。Pagerank计算中心的特征向量,而SVD显然优于Hyperlink-Induced Topics Search (HITS) 算法

计算代价:pagerank计算邻接矩阵的特征向量,然而HITS给出邻接矩阵的一维主向量。

使用pagerank还是SVD决定于:哪种测度是容易计算以及我们是要查找哪个信息域

4.    利用链接文本:根据指向某一网页的链接文本来决定网页的相关程度。大多数时候,相比于被链接的网页自身所提供的信息而言,我们从指向该网页的链接中所得到的信息会更有价值(这是因为针对其所指向的网页,其会提供一些解释其内容的间断描述,这个比指向的网页内容更佳精确)。

从点击行为中学习:根据持续收到的用户行为为表现形式的反馈信息,利用这一信息来改进搜索结果的排名。

1.    人工神经网络:查询条件中的单词,返回给用户的搜索结果,以及用户的点击决策,然后再对其加以训练。一旦网络经过了许多不同查询的训练之后,我们就可以利用它来改进搜索结果的排序,以更好的反映用户再过去一段时间里的实际点击情况。组成部分有:

1.1  设置数据库;

1.2  前馈法:反双曲正切变换函数(S型函数);

1.3  利用反向传播法进行训练:修改介于两节点间连接的权重值,以便更好的反映人们告知网络的正确答案。

 

随机优化:

       处理对象:受多种变量的影响,存在许多可能解的问题,以及结果因这些变量的组合而产生很大变化的问题。

       成本函数(costfunction):优化算法解决问题的关键,通常是最难确定的。任何优化算法的目标——寻找一组能够使成本函数的返回结果达到最小化的输入。因此成本函数必须要返回一个值用以表示方案的好坏。

 

决策树:最简单的机器学习方法,是对被观测数据进行分类的一种相当直观的方法,决策树再经过训练之后,看起来就像是以树状形式排列的一系列if-then语句。

建模:

1.分类回归树(CART):首先创建一个根节点,然后通过评估表中的所有观测变量,从中选出最合适的变量对数据进行拆分。

基尼不纯度:来自集合中的某种结果随机应用于集合中某一数据项的预期误差率。如果集合中的每个数据项都属于同一分类,那么推测结果总会是正确的。

你可能感兴趣的:(Algorithm)